자료구조
자료구조 제 13-2 강 ( 스택의 구현 )
한 면만 쓴 종이
2022. 3. 14. 00:08
배열을 이용한 구현
#include "statck.h"
#define MAX_CAPACITY 100
char stack[MAX_CAPACITY]; // 스택에 저장되는 데이터의 타입을 문자(char)라고 가정
int top = -1; // index of the top element
void push(char ch) {
if (is_full()) // 스택이 가득차면 더이상 push할 수 없다.
return;
top++;
stack[top] = ch;
}
char pop() {
char tmp = stack[top];
top--;
return tmp;
}
char peek() { // peek을 호출하기 전에 먼저 empty인지 검사해야 한다.
return stack[top];
}
int is_empty() {
return top == -1;
}
int is_full() {
return top == MAX_CAPACITY - 1;
}
연결리스트로 구현
- 연결리스트의 맨 앞이 노드를 삽입/삭제하기에 편하다.
- 따라서 첫번째 노드를 stack의 top으로 한다.
#include <stdio.h>
#include <stdlib.h>
struct node {
char* data; // 문자열들을 저장하는 스택이라고 가정
struct node* next;
};
typedef struct node Node;
Node* top = NULL;
void push(char* item) {
Node* p = (Node*)malloc(sizeof(Node)); // 새로운 노드를 만듦
p->data = item; // 새로운 노드의 data필드에 item 저장
p->next = top; // p의 다음 노드는 현재의 top이 됨
top = p; // top은 새로 만든 p가 됨
}
char* pop() {
if (is_empty())
return NULL;
char* result = top->data;
top = top->next;
return result;
}
char* peek() {
if (is_empty())
return NULL;
return top->data;
}
int is_empty() {
return top == NULL;
}
- 만약 스택이 동시에 2개 이상 필요하다면?
- 서로 다른 타입의 데이터를 저장할 스택이 필요하다면?
-> 다음 강의에서...