- μ± μ΄ μμ¬μλ μ΄λ―Έμ§λ₯Ό μκ°νλ©΄ μ΄ν΄νκΈ° μ’μ΅λλ€.
- μ¬μ μ μΌλ‘ κ³μ μμ΄λ€λΌλ μλ―Έκ° μμ΅λλ€.
- μ€νμ μΌμ’ μ 리μ€νΈ
- λ¨, λ°μ΄ν°μ μ½μ κ³Ό μμ κ° νμͺ½ λμμλ§ μΌμ΄λ©λλ€.
- LIFO(Last In First Out)
- μ½μ /μμ κ° μΌμ΄λλ μͺ½μ μ€νμ topμ΄λΌκ³ λΆλ¦ λλ€.
- μ€νμ΄ λΉμ΄μμΌλ©΄ True, μλλΌλ©΄ Falseλ₯Ό 리ν΄ν©λλ€.
int isempty() { if (top == -1) {//topμ -1λΆν° μμν©λλ€. return 1; } return 0; }
- μ€νμ΄ κ°λ μ°Όλ€λ©΄ True, μλλΌλ©΄ Falseλ₯Ό 리ν΄ν©λλ€
int isfull() { if (top >= capacity - 1) {//topμ΄ κ°μ₯ ν° μ¬μ΄μ¦λ³΄λ€ ν¬κ±°λ κ°μΌλ©΄ κ°λ μ°¬ κ² μ λλ€. return 1; } return 0; }
- μ€νμ topμ μμλ₯Ό νλ μΆκ°ν©λλ€.
void push(item) { if (!isfull()) {//μΆκ° μ νμΈ stack[++top].key = item;//λ§μ§λ§ μΈλ±μ€μΈ topμ λ€μ κ°μ ν¬μΈν νκ³ (++top) μμλ₯Ό λ£μ΅λλ€. } }
- μ€νμ topμΈ μμλ₯Ό νλ μ κ±°ν©λλ€.
void pop(item) { if (!isempty()) {//μ κ±° μ νμΈ element item = stack[top]; //topμ μμλ₯Ό μ κ±°ν©λλ€. top--;// ν¬μΈν νλ topμ νλ μ€μ λλ€. } }
- μ€νμ 맨 μμ μλ μμλ₯Ό μμ νμ§ μκ³ λ°νν©λλ€.
int peek(){ if(!isempty()){ return stack[top]; } }
- λ°°μ΄ νΉμ μ°κ²°λ¦¬μ€νΈλ₯Ό μ΄μ©νμ¬ κ΅¬νν μ μμ΅λλ€.
- λ°°μ΄λ‘ ꡬννλ λ°©λ²μ κ°λ¨ν λ°λ©΄μ μ€νμ ν¬κΈ°κ° κ³ μ λλ μ½μ μ΄ μμ΅λλ€.
#include <stdio.h>
#define MAX_STACK_SIZE 100
char stack[MAX_STACK_SIZE];
int top = -1; // stackμ μ μ₯νλ top index
void push(int key) {
if (is_full()) {
return;
}
stack[++top] = key;
}
int pop() {
if (is_empty()) {
return;
}
int tmp = stack[top];
top--;
return tmp;
}
char peek() {
return stack[top];
}
int is_empty() {
return top == -1;
}
int is_full() {
return top == MAX_STACK_SIZE - 1;
}
- μ°κ²°λ¦¬μ€νΈλ₯Ό μ΄μ©ν λ°©λ²μ ꡬνμ΄ μ½κ° 볡μ‘ν λ°λ©΄, μ€νμ ν¬κΈ°λ₯Ό νμμ λ°λΌ κ°λ³μ μΌλ‘ λ³κ²½ν μ μμ΅λλ€.
- μ°κ²°λ¦¬μ€νΈμ 맨 μ λΆλΆμ μ€νμ topμΌλ‘ λλκ²μ΄ νΈν©λλ€.
#include <stdio.h>
typedef struct {
char* data;
struct NODE* next;
}NODE;
NODE* top = NULL; //κ°μ₯ 첫 λ
Έλλ₯Ό κ°λ¦¬ν΅λλ€.
//add-first
void push(char* item) {
NODE* node = (NODE*)malloc(sizeof(NODE));
node->data = item;
node->next = top;
top = node;
}
//remove-first
char* pop() {
if (is_empty()) { //λΉμ΄μλ€λ©΄ NULLλ°νν©λλ€.
return NULL;
}
char* result = top->data;
NODE* p = top;
top = top->next;
free(p); //μμ ν λ
Έλλ₯Ό μμ μ£Όλ κ²μ΄ μ’μ΅λλ€.
return result;
}
char* peek() {
if (is_empty()) {
return NULL;
}
return top->data;
}
int is_empty() {
return top == NULL;
}
- λ§μ½ μ€νμ΄ λμμ 2κ° μ΄μ νμνλ€λ©΄?
- stack λ°°μ΄κ³Ό topμ΄ μ μ λ³μλ‘ μ μΈλκΈ° λλ¬Έμ μ 체 νλ‘κ·Έλ¨μμ μ¬λ¬κ°μ μ€νμ μ¬μ©νκΈ° μ΄λ ΅λ€.
-> topκ³Ό stackλ°°μ΄μ νλμ κ΅¬μ‘°μ²΄λ‘ κ²°ν©μμΌμ μ΄ κ΅¬μ‘°μ²΄μ ν¬μΈν°λ₯Ό ν©μμ 맀κ°λ³μλ‘ μ λ¬νλ€.
<보μν μ½λ>
ν° νλ§ νμ±νλλΌ λν
μΌν μ λ€μ λ£μ§ μμμ΅λλ€ κ°μν΄μ£ΌμΈμ !
#include <stdio.h>
#define MAX_STACK_SIZE 100
typedef int element;
typedef StackType* Stack;
typedef struct {
element* stack; //stack λ°°μ΄ -> λμ ν λΉμΌλ‘ create ν¨μμμ λ§λ λ€
int top;
int size; //λ°°μ΄μ ν¬κΈ°
}StackType;
Stack create() {
Stack s = (Stack)malloc(sizeof(StackType));
s->top = -1;
s->size = MAX_STACK_SIZE;
return s;
}
void push(StackType* s, element item) {
if (is_full(s)) {
return;
}
else s->stack[++(s->top)] = item;
}
element pop(StackType* s) {
if (is_empty(s)) {
exit(1);
}
else return s->stack[(s->top)--];
}
int main(void) {
StackType* s1 = create();
StackType* s2 = create();
push(s1, 12);
push(s2, 9);
return 0;
}
- μλ‘ λ€λ₯Έ νμ μ λ°μ΄ν°λ₯Ό μ μ₯ν μ€νμ΄ νμνλ€λ©΄?
μ΄λ―Έμ§ μΆμ²
http://blog.naver.com/coolten/140057846054
http://dorson23.blogspot.com/2018/02/c-2-stack.html