본문 바로가기

스택 (Stack) Stack(스택)은 처음에 들어간 것이 가장 마지막에 나오도록 되어 있는 구조를 가진 자료구조 입니다. 이러한 구조를 FILO(First In, Last Out) 또는 LIFO(Last In, First Out) 이라고 부르는데, 요소의 삽입과 삭제가 자료구조의 한쪽 끝에서만 이루어지는 것이 특징이다. 스택의 주요 연산은 삽입(Push)와 삭제(Pop) 이다. 삽입 연산 삽입 연산은 스택 위에 새로운 요소를 "쌓는" 작업이다. 삭제 연산 삭제 연산은 스택에서 최상위 요소를 '걷어내는' 작업이다. 정말 간단한 자료구조이다. 배열을 이용하여 주요 연산을 구현해보겠다. 스택 구조체 typedef struct tagNode { int Data; } Node; typedef struct tagArrayStack ..
웹상에서의 소스코드 구문강조 "SyntaxHighlighter" /** * SyntaxHighlighter */ function foo() { if (counter * SyntaxHighlighter */ function foo() { if (counter <= 10) return; // it works! } 라는 태그를 사용하는 데 brush의 이름은 아까 봤던 name 또는 aliases 를 참고하여 작성하면 된다. 사이에 자신의 코드를 삽입하면 사용법은 끝이다. 실행결과 /** * SyntaxHighlighter */ function foo() { if (counter
환형 연결 리스트 (Circular Linked List) 연결 리스트 (Linked List)와 이중 연결 리스트 (Doubly Linked List)에 대한 설명은 이미 포스팅 되어 있으므로 생략하겠다.환형 연결 리스트는 아래의 그림을 보면 이해하기 쉬울 것이다. 이중 연결 리스트 환형 연결 리스트위 그림에서 보시다시피, 이중 연결 리스트와 노드 형태는 같다. 하지만 HEAD 노드의 PrevNode 와 TAIL 노드의 NextNode 를 사용한다는 점이 다르다. 이러한 구조의 장점은 시작을 알면 끝을 알 수 있고, 끝을 알면 시작을 알 수 있다는 점이다.새로운 노드를 붙일 때 TAIL 노드를 찾기 위한 비용이 거의 없어진다는 의미와 같다. 환형 연결 리스트의 주요 연산은 다른 연결 리스트와 같지만 염두에 두어야 할 것이 있다.첫 번째, TAIL은 HEAD의 ..
이중 연결 리스트 (Doubly Linked List) 연결 리스트(Linked List)에 대한 설명은 이미 포스팅 되어 있으므로 자세한 설명은 생략하겠다. 이중 연결 리스트는 아래 그림을 보면 이해하기 쉬울 것이다. 연결 리스트 이중 연결 리스트 이중 연결 리스트(Doubly Linked List)는 연결 리스트의 탐색 기능을 개선한 자료구조이다.연결 리스트는 노드를 찾으려면 HEAD에서 TAIL 방향으로만 탐색을 할 수 있는데 반해이중 연결 리스트는 양방향으로 탐색이 가능하다. 구조체로 표현하면 아래와 같다.typedef struct tagNode {int Data;Struct tagNode* PrevNode;Struct tagNode* NextNode;} Node;간단히 설명하면 PrevNode는 자신 Node 앞 Node를 가리키고 NextNode는..
연결 리스트 (Linked List) 자료의 수가 정해져있다면 배열을 사용하면 된다.하지만 대부분의 경우 자료의 수가 정해지지 않는다. 이럴 경우 정적인 배열 대신 동적인 연결 리스트(Linked List)를 사용한다. 리스트 내의 각 요소는 노드(Node)라고 한다.노드(Node) 는 데이터를 보관하는 필드와 다음 노드와의 연결 고리 역할을 하는 포인터로 이루어진다. 필드와 포인터로 이루어진 노드들을 다음 그림처럼 연결하면 연결리스트가 된다. 리스트의 첫 번째 노드를 HEAD라 하고 마지막 노드를 TAIL이라고 한다. C 언어를 이용하여 간단한 연결 리스트를 만들어보겠다.우선 연결 리스트의 주요 연산은 노드 생성/소멸, 노드 추가, 노드 삭제, 노드 삽입, 노드 탐색이 있다.노드 생성/소멸, 노드 추가, 노드 삭제, 노드 삽입은 연결 리스..