반응형
- ListBaseStack.h -
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | #ifndef __LB_STACK_H__ #define __LB_STACK_H__ #define TRUE 1 #define FALSE 0 typedef int Data; typedef struct _node // 연결 리스트의 노드를 표현한 구조체 { Data data; struct _node *next; } Node; typedef struct _listStack // 연결 리스트 기반 스택을 표현한 구조체 { Node *head; } ListStack; typedef ListStack Stack; void StackInit(Stack *pstack); // 스택 초기화 int SIsEmpty(Stack *pstack); // 스택이 비어있는지 확인 void SPush(Stack *pstack, Data data); // 스택의 push 연산 Data SPop(Stack *pstack); // 스택의 pop 연산 Data SPeek(Stack *pstack); // 스택의 peek 연산 #endif | Crocus |
- ListBaseStack.c -
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | #include <stdio.h> #include <stdlib.h> #include "ListBaseStack.h" void StackInit(Stack *pstack) // 스택 초기화 과정 { pstack->head = NULL; // 초기화 과정에서는 아무것도 가리키지 않는 NULL을 지정한다. } int SIsEmpty(Stack *pstack) // 스택이 비었는지 확인 { if (pstack->head == NULL) // head포인터가 가리키는 부분이 아무것도 없다면 return TRUE; // 노드가 형성되어 있지 않은 상태 즉 스택이 비어있다는 뜻이다. else return FALSE; } void SPush(Stack *pstack, Data data) // 스택 노드에 값을 추가 { Node *newNode = (Node*)malloc(sizeof(Node)); // 노드에 공간을 형성해준다. newNode->data = data; // 새로 생긴 노드의 data부분에 data값을 넣어주고 newNode->next = pstack->head; // 새로 생긴 노드의 next부분은 head가 가리키고 있던 노드를 가리킴 pstack->head = newNode; // head는 새로 생긴 노드를 가리키게 한다. } Data SPop(Stack *pstack) // 스택의 값을 추출 { Data rdata; Node *rnode; if (SIsEmpty(pstack)) { printf("Stack Memory Error!"); exit(-1); } rdata = pstack->head->data; // rdata는 head가 가리키는 부분의 data가 가리키는 값을 가진다. rnode = pstack->head; // rnode는 head가 가리키는 부분을 가리킨다. pstack->head = pstack->head->next; // head는 head가 가리키는 부분의 next가 가리키는 부분을 가진다. free(rnode); // rnode가 가리키던 부분을 삭제한다. 즉 노드를 삭제한다. return rdata; // rdata의 값을 반환한다. } Data SPeek(Stack *pstack) // 스택 가장위에 있는 값을 보여주는 함수 { if (SIsEmpty(pstack)) { printf("Stack Memory Error!"); exit(-1); } return pstack->head->data; } | Crocus |
- ListBaseStackMain.c -
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #include <stdio.h> #include "ListBaseStack.h" int main(void) { // Stack의 생성 및 초기화 Stack stack; StackInit(&stack); //데이터 넣기 SPush(&stack, 1); SPush(&stack, 2); SPush(&stack, 3); SPush(&stack, 4); SPush(&stack, 5); //데이터 꺼내기 while (!SIsEmpty(&stack)) printf("%d ", SPop(&stack)); return 0; } | Crocus |
반응형
'Applied > 자료구조' 카테고리의 다른 글
Dummy 노드를 이용한 연결 리스트(Dummy Linked List) 소스코드 (0) | 2016.02.28 |
---|---|
연결 리스트 기반 스택(List Base Stack) 개념 (0) | 2016.02.26 |
배열 기반 스택(Array Base Stack) 개념 (0) | 2016.02.24 |
배열 기반 스택(Array Base Stack) 소스코드 (0) | 2016.02.24 |
원형 큐(Circular Queue) 개념 (0) | 2016.02.22 |