C언어 자료구조 스택의 개념과 구현(2) stack


이번시간은     
            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