이번시간은
1)배열을 이용한 구현
2)연결리스트로 구현을 배울 것인데. 차차 버전업을 해서 효율적으로 구현을하자.
1)배열을 이용한 구현
#include "stack.h" //헤더파일을 모듈화 시켜서 작업시켜 유지보수에 용이함.
#define MAX_CAPACITY 100
char stack[MAX_CAPACITY]; //스택에 저장되는 데이터타입 문자(char)라고 가정
int top = -1;
void push(char ch) {
if(is_full()) //스택이 가득차면 더이상 push할 수 없다.
return;
top++;
stack[top] = ch;
}
char pop() {
char tmp = stack[top];
top--;
return tmp;
}
int is_empty() {
return top==-1;
}
char peek() {
return stack[top];
}
int is_full() {
return top == MAX_CAPACITY-1;
}
2)연결리스트로 구현
struct node {
char *data;
struct node *next;
}; //구조체 정의할때만 ; 세미콜론 붙이자. c언어 특징. .나머지는 없어도된다
typedef struct node Node;
Node *top = NULL;
void push(char *item) {
Node *p = (Node *)malloc(sizeof(Node));
p->data = item;
p->next = top;
top = p;
}
char *pop() {
if(is_empty())
return NULL; //단순히 null을 리턴하면. 나중에 오류가 생길수 있다. 그래서이것은 좋은방법은아니다.
char *result = top->data;
top = top->next;
return result;
}
!! 현재 버전에서의 문제점
o만약 스택이 동시에 2개 이상 필요하다면?
:지금 만들어놨던 스택을 하나 더만들고 메서드도 하나씩 더 만들어서
변수명만 다른 비효율적인 코드를 작성하게 된다.
o서로 다른 타입의 데이터를 저장할 스택이 필요하다면? 다음시간에.
0 comments:
Post a Comment