CHAP 5 Stack l push pop pushA pushB
CHAP 5: 스택(Stack)
스택의 연산 l 삽입(push), 삭제(pop) push(A) 초기상태 push(B) A push(C) C pop() B B B A A A
is_empty, is_full 연산의 구현 is_empty(S) is_full(S) if top = -1 then return TRUE else return FALSE if top = (MAX_STACK_SIZE-1) then return TRUE else return FALSE top 4 4 3 3 2 2 1 1 0 0 -1 top 공백상태 -1 포화상태
push 연산 push(S, x) if is_full(S) then error "overflow" else top ←top + 1 stack [top]← x 4 3 2 1 0 4 3 2 top 1 0 top
pop 연산 pop(S) if is_empty(S) then error "underflow" else e ← stack[top] top ← top - 1 return e 4 3 2 1 0 top
C언어 구현 typedef int element; typedef struct { element stack[MAX_STACK_SIZE]; int top; } Stack. Type; // 스택 초기화 함수 void init(Stack. Type *s) { s->top = -1; } // 공백 상태 검출 함수 int is_empty(Stack. Type *s) { return (s->top == -1); } // 포화 상태 검출 함수 int is_full(Stack. Type *s) { return (s->top == (MAX_STACK_SIZE-1)); }
// 삽입함수 void push(Stack. Type *s, element item) { if( is_full(s) ) { fprintf(stderr, "스택 포화 에러n"); return; } else s->stack[++(s->top)] = item; } // 삭제함수 element pop(Stack. Type *s) { if( is_empty(s) ) { fprintf(stderr, "스택 공백 에러n"); exit(1); } else return s->stack[(s->top)--]; } // 피크함수 element peek(Stack. Type *s) { if( is_empty(s) ) { fprintf(stderr, "스택 공백 에러n"); exit(1); } else return s->stack[s->top]; }
연결된 스택 정의 typedef int element; typedef struct Stack. Node { element item; struct Stack. Node *link; } Stacke. Node; typedef struct { Stack. Node *top; } Linked. Stack. Type; 9 7 3 NULL top
연결된 스택에서 push 연산 top C (2) temp B A NULL (1) D // 삽입 함수 void push(Linked. Stack. Type *s, element item) { Stack. Node *temp = (Stack. Node *)malloc(sizeof(Stack. Node)); if( temp == NULL ){ fprintf(stderr, "메모리 할당에러n"); return; } else{ temp->item = item; temp->link = s->top; s->top = temp; } }
연결된 스택에서 pop 연산 top C B temp // 삭제 함수 element pop(Linked. Stack. Type *s) { if( is_empty(s) ) { fprintf(stderr, "스택이 비어있음n"); exit(1); } else{ Stack. Node *temp = s->top; int item = temp->item; s->top = temp->link; free(temp); return item; } } A NULL
stack #include <stdio. h> #include <stack> using namespace std; int main() { stack<int> st; st. push(10); st. push(20); st. push(30); st. push(40); st. push(50); } while( !st. empty() ){ printf(“%dn”, st. top()); st. pop(); } return 0;
- Slides: 29