코딩 > 자료구조
스택은 LIFO(선입후출)의 구조만 top이라는 변수를 통해서 구현합니다.
큐는 FIFO(선입선출)의 구조만 head와 tail이라는 변수를 통해서 구현합니다.
배열을 이용한 스택 구현
#include <stdio.h>
int main (){
// 스택에 집어넣을 값들
int values[10] = {10,9,8,7,6,5,4,3,2,1};
// 스택과 TOP변수
int stack[100];
int top=0; // <= 처음에 배열의 첫번째 원소가 top이라 볼 수 있다.
// PUSH
for(int i=0; i < sizeof(values)/sizeof(int); i++){
// 아래와 같이 PUSH를 구현
// top변수를 통해서 계속 top을 바라봅니다.
// top - 1의 위치에 가장 최근에 넣은 값이 있습니다.
stack[top++] = values[i];
}
// POP and PRINT
for(int i=0; i < sizeof(values)/sizeof(int); i++){
// 아래와 같이 POP을 구현합니다.
printf("%d ", stack[--top]);
}
printf("\n");
return 0;
}
배열을 이용한 큐 구현
#include <stdio.h>
int main (){
// 큐에 집어넣을 값들
int values[10] = {10,9,8,7,6,5,4,3,2,1};
// 큐와 HEAD 그리고 TAIL변수
int queue[100];
int head=0,tail=0; // <= 처음에 배열의 첫번째 원소가 head와 tail이라 볼 수 있다.
// ENQUEUE
for(int i=0; i < sizeof(values)/sizeof(int); i++){
// 아래와 같이 ENQUEUE를 구현
// ENQUEUE 할때마다 tail의 위치에 값을 넣고 증가시니다.
queue[tail++] = values[i];
}
// DEQUEUE and PRINT
for(int i=0; i < sizeof(values)/sizeof(int); i++){
// 아래와 같이 DEQUEUE을 구현합니다.
// DEQUEUE 할때마다 head의 위치의 값을 반환하고 증가시킵니다.
printf("%d ", queue[head++]);
}
printf("\n");
return 0;
}
Reference
https://twpower.github.io/61-simple-stack-and-queue-by-array-in-c