스택 : LIFO(last in first out)

push : 데이터삽입
pop : 데이터 삭제
top : 스택의 index
peek : 스택의 마지막 값
순차 스택
장점 : 구현 쉬움(내 생각)
단점 : 메모리 낭비ㅇ(because c의 배열은 정적 할당이기 때문)
#include<stdio.h>
int stack[100]; // 순차스택 생성
int top = -1; // 순차스택 인덱스 초기화
// 삽입
void push(char x){
stack[++top]=x;
}
// 삭제와 반환
int pop(){
return stack[top--]; // 자체 삭제를 하기보다는 인덱스만 바꿈
}
// 스택의 마지막 값
int peek(){
return stack[top];
}
연결 스택
장점 : 메모리 낭비x(because c의 연결리스트는 동적 할당이기 때문)
단점 : 구현 어려움(내 생각)

#include<stdio.h>
// 연결스택의 틀 생성
typedef struct stack_node {
int data;
struct stack_node* link;
}stack_node;
// 연결스택 인덱스 초기화
stack_node* top=NULL;
// 삽입
void push(char x){
stack_node* tmp=(stack_node*) malloc(sizeof(stack_node));
tmp->data = x
tmp->link = top
top=tmp
}
// 삭제와 반환
int pop(){
char value = top->data; // 삭제할 노드의 값을 저장(return용도)
before_link= top->link // 삭제할 노드의 주소값 저장(free용도)
top = before_link;
free(before_link);
return value // 삭제할 노드의 값 반환
}
// 스택의 마지막 값
int peek(){
return top->data;
}