본문 바로가기
반응형

알고리즘4

원형 큐 구현 소스 #include #define MAX 10 int queue[MAX]; int front, rear; void init_queue(void) { front = rear = 0; } void clear_queue(void) { front = rear; } int put(int k) { if((rear+1)%MAX == front) { printf("\n Queue overflow."); return -1; } queue[rear] = k; rear = ++rear%MAX; return k; } int get(void) { int i; if(front == rear) { printf("\n Queue underflow."); return -1; } i=queue[front]; front = ++front%M.. 2007. 3. 29.
스택과 큐, 데크 스택과 큐, 데크 3.1 스택(Stack) • 삽입과 삭제가 한쪽 끝에서만 발생하는 선형 리스트 • top(stack pointer) 포인터 : 자료의 삽입과 삭제가 발행하는 부분 → top 포인터는 항상 제일 위에 있는 자료를 가리킴 • BOTTOM(밑바닥) 포인터 : 막혀있는 다른 한쪽 끝 • PUSH :자료를 삽입하는 연산, POP : 자료를 삭제하는 연산, TOP 연산 : 현재top 포인터가 가리키는 자료의 내용을 조사하는 연산 • 자료의 삽입: top 포인터가 가리키는 위치보다 1이 증가한 위치에 → top = top + 1 • 자료의 삭제: top 포인터가 가리키는 위치의 자료가 → top = top - 1 • top의 초기치는 -1이다 그림 3.1 스택의 구조 • 입출력 정책(policy):.. 2007. 3. 29.
이중 연결 리스트 이중 연결 리스트 단일 연결 리스트(single linked list)와 환형 연결 리스트(circular linked list)는 각 노드에 다음 노드를 가리키는 한 개의 링크 필드만을 사용하기 때문에 특정한 노드를 검색하거나, 삽입 또는 삭제를 할 경우 한 쪽 방향으로만 해당 노드의 위치를 찾을 수 있는 구조이다. 그러나 임의의 노드를 찾을 때 양쪽 방향으로 해당 노드를 검색하면 쉽게 찾을 수 있다. 그러므로 이중 연결 리스트(double linked list)는 노드의 선행 노드를 가리키는 좌링크(LLINK), 자료(DATA)필드, 후행 노드를 가리키는 우링크(RLINK)의 세 개 영역으로 각 노드를 구분하여 양방향으로 특정 노드를 검색할 수 있도록 한 구조이다 이중 연결 리스트 삽입 데이터 항목 .. 2007. 3. 28.
연결 리스트 ■ 연결 리스트는 왜 쓰느냐? Z A C R A \0 배열을 데이터 삽입과 삭제에 치명적이 약점이 있다! 자 위 ZACRA 라는 Z 앞에 T 라는 문자를 넣으려고 한다고 하면 그냥 생각하면 Z A C R A \0 이 배열의 크기를 늘리고 Z A C R A \0 T 를 넣고 나머지를 뒤로 쭉 밀면 됩니다. T Z A C R A \0 이론상으로는 쉽지만 코드 상으로는 상당히 번거로운 일이다. 데이터의 삭제는 어떤가요? 저기서 C를 삭제한다고 치면 C를 삭제하고 그 뒤의 문자들을 또 앞으로 한 칸씩 당겨야 한다. 말은 쉽지만 코드 상으로는 번거롭고 저런 배열의 구조의 단점이 없는 구조가 연결리스트 이다. ■ 연결리스트의 구조 연결 리스트는 그럼 어떤 구조를 가지고 있는가? Data next → Data nex.. 2007. 3. 27.
반응형