๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’œ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ/๐Ÿ’œ ์ž๋ฃŒ๊ตฌ์กฐ

[๐Ÿ’œ ์ž๋ฃŒ๊ตฌ์กฐ1] STACK ์Šคํƒ (๋ฐฐ์—ด, ์—ฐ๊ฒฐ)

by eyes from es 2023. 7. 19.
728x90
๋ฐ˜์‘ํ˜•

1. ๋ฐฐ์—ด STACK Code

#include <stdio.h>
#include <stdlib.h>
#define N 10
 
typedef int element; //๋‚˜์ค‘์— int๋งŒ char ๋กœ ๋ฐ”๊ฟ”์ฃผ๋ฉด ๋จ

element stack[N];// ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋„ ๋‚˜์ค‘์— ๋ฐ”๊ฟ€ ์ˆ˜๋„ ์žˆ์œผ๋‹ˆ๊นŒ
int top = -1;

// ๋…ธ๋“œ ์‚ฝ์ž…
void push(int value){
	if(top>=N -1){
		printf("stack overflow");
		exit(1);
	}
    top++;
	stack[top] = value;
} //๊ฐ’์„ ์‚ฝ์ž…ํ•˜๋Š” ํ•จ์ˆ˜ 

// ๋…ธ๋“œ ์‚ญ์ œ
element pop(){
	if (top<=-1){ //top = -1 : stack ๊ณต๋ฐฑ
		printf("stack underflow");
		exit(1);
	}
	
	element tmp;
	tmp = stack[top];
	top--; 
	return tmp;
}

int main(){
	push(5); //stack: 5
 	push(3); //stack: 5 3
	printf("%d\n", pop()); //stack: 5 , 3์ถœ๋ ฅ
	push(7);  //stack: 5 7
	printf("%d\n",pop()); //stack: 5, 7์ถœ๋ ฅ
	printf("%d\n",pop()); //stack:  , 5์ถœ๋ ฅ
	
}

 

2. linkedlist STACK Code

#include<stdio.h>
#include<stdlib.h>

typedef int element;
typedef struct stack_node* stack_pointer;

typedef struct stack_node{
	element data;
	stack_pointer link;
	
}snode;

//stack์˜ top ํ˜„์žฌ ๋น„์–ด์žˆ์Œ
stack_pointer top = NULL; //null: false ๊ฑฐ์ง“

//์‚ฝ์ž…
void push (element value){
	stack_pointer news=(stack_pointer)malloc(sizeof(snode));
	news->data = value;
	news -> link = top;
	top = news;

} 

//0: ๊บผ์ง ๊ฑฐ์ง“ ์•„๋ฌด๊ฒƒ๋„ ์—†์Œ NULL(0) = ๊บผ์ง, ๊ฑฐ์ง“
//1: ์ผœ์ง ์ฐธ ๋ฌด์–ธ๊ฐ€ ์žˆ์Œ

element pop(){

	// stack =NULL
	// top = NULL
	// NULL == FALSE == 0
	// !NULL == TRUE == 1
	
	//if: ์ด ์กฐ๊ฑด์ด ์ฐธ์ด๋ผ๋ฉด ์•ˆ์— ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ด์ค˜
	//!๊ฑฐ์ง“: ์ฐธ
	if(!top){ //true์ผ๋•Œ
	  printf("์Šคํƒ์— ๊ฐ’์ด ์—†์Šต๋‹ˆ๋‹ค");
	  exit(1);
	  }//NULL์ผ๋•Œ ๊ฑฐ์ง“
	  // 0 NULL : false
	  // 1 ํ˜น์€ ๊ฐ’์ด ์žˆ๋Š” ๊ฒฝ์šฐ if(2) : true

	  

	stack_pointer del = top;
	element tmp = top->data ; //์‚ญ์ œํ•œ ๋…ธ๋“œ์˜ ๋ฐ์ดํ„ฐ ๊ฐ’
	top = top->link;
	free(del); //๋™์ ํ• ๋‹นํ•œ ๋ฉ”๋ชจ๋ฆฌ free
	return tmp;

}

int main(void){
	push(5); //stack: top -> 5
	push(1); //stack: top -> 1 5 
	printf("%d\n", pop()); //stack: top -> 5, 1์ถœ๋ ฅ
	push(3); //stack: top -> 3 -> 5
	printf("%d\n", pop()); //stack: top -> 5, 3 ์ถœ๋ ฅ
	printf("%d\n", pop()); //stack: top -> NULL, 5์ถœ๋ ฅ
}

 

3. ์—ฐ๊ฒฐ STACK - ์‚ฝ์ž…

 

 

4. ์—ฐ๊ฒฐ STACK - ์‚ญ์ œ

728x90
๋ฐ˜์‘ํ˜•