자료구조와 알고리즘
-
Tree - 트리와 이진트리란자료구조와 알고리즘/자료구조 2023. 5. 15. 22:38
1. 트리란? 트리는 계층적관계를 표현하는 자료구조이다. 1.2 선형자료구조와의 차이점 (약간) 자료구조는 데이터를 표현하는 방법이다. 저장, 삭제, 조회 등의 기능이 제공되는 것이다. - 선형자료구조는 데이터를 저장하는 것과 표현하는 것을 나누어 생각하기 힘들지만, 비선형은 데이터를 표현하는 관점에서 자료구조의 특징이 잘 들어난다. - 예를들어 위와 같은 연결리스트로 동물의 종의 데이터와 사원의 이름 데이터를 저장한다고 한다면, 정해진 순서에 맞게 데이터를 일정한 방향으로 추가하여 저장할 것이다. 이를 위해 우리는 동물에 맞는 연결리스트 혹은 사원에 맞는 연결리스트를 따로 만들진 않았다. - 이와 다르게 트리를 이용해 종속과목강문계에 따라 동물의 데이터를 나타내려는 것과 사원 데이터를 직급별로 나타내려..
-
Deque자료구조와 알고리즘/자료구조 2023. 5. 14. 10:58
Deque(덱)은 양방향으로 데이터를 꺼내거나, 삽입 할 수 있는 자료구조를 의미한다. 구현 덱의 구현은 양방향연결리스트의 소스를 참고하여 활용하면 비교적 간단하게 만들 수 있다. 헤더 #ifndef _DQUE_H #define _DQUE_H typedef int data; typedef struct _node{ data data; struct _node* next; struct _node* pre; }node; typedef struct _Dque{ node* head; node* tail; int size; }Dque; typedef Dque Deque; void DequeInit(Deque* pq1); int DQisEmpty(Deque* pq1); void DQAddFirst(Deque* pq1,..
-
Queue - 원형 큐, 연결리스트자료구조와 알고리즘/자료구조 2023. 5. 13. 11:11
큐는 먼저 들어온 데이터가 먼저 나가는 구조로 (FIFO) 스택과 반대되는 개념이라고 볼 수 있다. 큐에서 자료를 넣는 연산은 Enqueue, 자료를 꺼내는 연산을 Dequeue라고 한다. 단순히 스택과 반대되는 개념이므로 쉽게 생각할 수도 있지만, 한가지 생각할 점이 있다. Back 방향 데이터가 삽입되고, Rear가 그 위치를 나타낸다. Front 방향으로 데이터가 꺼내지고, 그 위치를 Front가 가리킨다. 1. 단순 배열 기반 큐 배열은 크기가 미리 정해져 있기 때문에, 이를 기반으로 한 큐를 구현하면, 같은 한계를 지닌다. 다음과 같이 배열의 크기가 6인 상황에서 모든 데이터를 Dequeue한다고 생각해보자. 그렇다면, 이제 Rear가 가리킬 수 있는 것은 배열의 마지막 인덱스 뿐이고, 넣을 수..
-
스택의 활용 - 계산기 프로그램자료구조와 알고리즘/자료구조 2023. 5. 13. 10:26
스택을 활용해서 계산기를 만드는 연습문제이다. 중위표기식 -> 후위표기식 -> 후위표기식 계산 순서로 이루어진다. 먼저 중위표기식을 후위표기식으로 고쳐보자 1. 중위 to 후위 헤더 #ifndef __PostFix_h #define __PostFix_h void ConvertRPN(char exp[]); #endif 소스 #include "Postfix.h" #include #include "CStack.h" #include #include int PrecOP(char op1, char op2){ int op1_n = GetOp(op1); int op2_n = GetOp(op2); if(op1_n == -1 || op2_n == -1){ printf("에러"); exit(-1); } if(op1_n > ..
-
Stack - 배열,연결리스트,원형연결리스트자료구조와 알고리즘/자료구조 2023. 5. 4. 11:33
- 스택은 데이터를 한 쪽 끝에서만 넣거나 뺄 수 있는 자료구조이다. -장/단점 장점: 구현이 쉽다, 데이터 저장 및 읽기 속도가 빠르다. 단점: 저장 공간 낭비, 데이터의 최대 갯수를 미리 지정해야함 *이는 스택의 장점을 최대한 활용하기 위해 배열기반으로 스택이 구현 되므로 발생하는 단점이다. -활용 컴퓨터 프로그램에서 함수를 부를 때 스택을 사용한다 > 순차적으로 읽으며, 가장 먼저 호출됨 함수가 가장 먼저 실행 > 위와 같이 함수 정보를 저장하는 스택을 콜스택이라고 함 재귀함수 또한 가장 마지막에 호출된 함수를 가장 먼저 실행하므로 스택의 구조로 구현된다고 볼 수 있다. -구현 >배열 기반 스택 헤더 #ifndef _St_Array #define _St_Array #define MAX_DATA 10..
-
LinkedList(3) 원형연결리스트자료구조와 알고리즘/자료구조 2023. 5. 2. 14:49
원형 연결리스트란, 리스트의 끝과 처음이 연결되어 참조하는 형식의 연결리스트를 말한다. 위 그림과 같이 연결의 형태가 원을 이루는 것을 원형연결리스트라고 부른다. 기존 연결리스트에서 head대신 tail을 사용하고 tail->next가 첫번째 노드를 가리키게 하면 된다. -ADT ADT는 크게 달라진 것이 없다. void Linsert --> 새 노드를 뒤에 추가 void LFinsert --->새 노드 처음에 추가 void Linit int LFirst int Lnext Ldata LRemove int Lcount - C언어 구현 헤더 #ifndef Circular_LinkedList #define Circular_LinkedList #define false 0 #define true 1 typedef..
-
LinkedList(2) - ADT와 구현자료구조와 알고리즘/자료구조 2023. 5. 1. 21:35
1 . ADT - 단순하게 데이터가 한쪽 방향으로 저장되고, 시작과 끝이 분명한 LinkedList를 구현해 보도록 하자. - 더미노드 기반으로 head만 존재한다. - ADT는 배열기반 연결리스트와 크게 차이가 없다. (정렬 추가) void Listinit(List * plist) > 리스트 초기화 void LInsert(List* plist, Ldata data) >리스트에 데이터를 추가 int LFirst(List* plist, Ldata* data) > 리스트에 저장된 데이터 참조를 위함 int LNext(List* plist, Ldata* data) > 리스트 저장된 데이터 참조 Ldata Lremove(List* plist) >리스트에 저장된 데이터 삭제 int Lcount(List* plis..
-
LinkedList (1)자료구조와 알고리즘/자료구조 2023. 5. 1. 17:18
데이터를 동적으로 할당하는 linkedList에 대해서 알아보기 전에 간단하게 그 컨셉에 대해 구현해보았다. #include #include typedef struct _node{ int data; struct _node* next; }node; int main(){ node* head =NULL; node* tail =NULL; node* cur =NULL; node* newnode = NULL; int readData; //데이터 읽기 while(1){ printf("자연수를 입력 하시오 종료하려면 0 입력"); scanf("%d",&readData); if(readDatadata =readData; newnode->next = NULL; if(head==NULL){ head=newnode; } el..