스택 : LIFO(last in first out)

KakaoTalk_20220513_110816895.jpg

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의 연결리스트는 동적 할당이기 때문)

단점 : 구현 어려움(내 생각)

KakaoTalk_20220513_155632730.jpg

#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;
}