반응형 프로그래머의 길/알고리즘22 원형 큐 구현 소스 #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. 스택 예제 소스 숫자 저장 스택 #include #define MAX 10 int stack[MAX]; int top; void init_stack(void) { top = -1; } int push(int t) { if (top >= MAX-1) { printf("\n Stack overflow."); return -1; } stack[++top] = t; return t; } int pop(void) { if(top Bottom\n"); for(i=top; i>.. 2007. 3. 29. 스택과 큐, 데크 스택과 큐, 데크 3.1 스택(Stack) • 삽입과 삭제가 한쪽 끝에서만 발생하는 선형 리스트 • top(stack pointer) 포인터 : 자료의 삽입과 삭제가 발행하는 부분 → top 포인터는 항상 제일 위에 있는 자료를 가리킴 • BOTTOM(밑바닥) 포인터 : 막혀있는 다른 한쪽 끝 • PUSH :자료를 삽입하는 연산, POP : 자료를 삭제하는 연산, TOP 연산 : 현재top 포인터가 가리키는 자료의 내용을 조사하는 연산 • 자료의 삽입: top 포인터가 가리키는 위치보다 1이 증가한 위치에 → top = top + 1 • 자료의 삭제: top 포인터가 가리키는 위치의 자료가 → t.. 2007. 3. 29. 이중 연결 리스트로 구현한 텍스트 뷰어 #include #include #include #include #include #define PGUP 0x4800 #define PGDN 0x5000 #define ESC 27 #define PAGESIZE 25 // 한 페이지에 보여질 줄 수 typedef struct list *linked_list; struct list { char *buf; linked_list prev; // 이전 포인터 linked_list next; // 다음 포인터 }; linked_list head, tail; // 시작과 끝 노드 int total, now; // 전체 노드와 현재 노드 char filename[13]; void gotoxy(int, int); void init_linked_list(void) { he.. 2007. 3. 28. 이중 연결 리스트 이중 연결 리스트 단일 연결 리스트(single linked list)와 환형 연결 리스트(circular linked list)는 각 노드에 다음 노드를 가리키는 한 개의 링크 필드만을 사용하기 때문에 특정한 노드를 검색하거나, 삽입 또는 삭제를 할 경우 한 쪽 방향으로만 해당 노드의 위치를 찾을 수 있는 구조이다. 그러나 임의의 노드를 찾을 때 양쪽 방향으로 해당 노드를 검색하면 쉽게 찾을 수 있다. 그러므로 이중 연결 리스트(double linked list)는 노드의 선행 노드를 가리키는 좌링크(LLINK), 자료(DATA)필드, 후행 노드를 가리키는 우링크(RLINK)의 세 개 영역으로 각 노드를 구분하여 양방향으로 특정 노드를 검색할 수 있도록 한 구조이다 이중 연결 리스트 삽입 데이터 항목 .. 2007. 3. 28. 연결 리스트 관련 문자열 포함 프로그램 #include #include #include void print_link(list_pointer); typedef struct list *list_pointer; struct list { char data; list_pointer next; }; list_pointer header1, header2; list_pointer insert_link() { list_pointer head, tail, temp; char ch; ch=getche(); temp=(list_pointer)malloc(sizeof(struct list)); temp->next=NULL; temp->data=ch; head=tail=temp; while( ch!='\r'){ ch=getche(); temp=(list_pointer.. 2007. 3. 28. 이전 1 2 3 4 다음 반응형