๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • Welcome.
:: C_ ๐Ÿšฉ/์•Œ๊ณ ๋ฆฌ์ฆ˜

[์ž๋ฃŒ๊ตฌ์กฐ] by C์–ธ์–ด #09 [stack ๊ตฌ์กฐ]

by EunBird 2021. 3. 30.

Stack ๊ตฌ์กฐ

- ํ›„์ž…์„ ์ถœ(LIFO; Last In First Out)์˜ ๊ตฌ์กฐ

- ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ์˜ ์—ญ์ˆœ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•จ

- ‘์ง์„ ์Œ“์•„์˜ฌ๋ฆฐ ํ˜•ํƒœ๋ผ๋Š” ์˜๋ฏธ์˜ ๊ตฌ์กฐ

- ๋ฐ์ดํ„ฐ์˜ ์ €์žฅ์€ push (๋ฐ€์–ด ๋„ฃ๊ธฐ)๋ผ๊ณ  ํ•˜๋ฉฐ, ๋ฐ์ดํ„ฐ์˜ ์ฒ˜๋ฆฌ๋Š” pop (๊บผ๋‚ด๊ธฐ)์ด๋ผ๊ณ  ํ•œ๋‹ค.

 

์˜ˆ)

 ์ธํ„ฐ๋„ท ํƒ์ƒ‰์˜ ๋’ค๋กœ๊ฐ€๊ธฐ๊ธฐ๋Šฅ

 ์‹คํ–‰์ทจ์†Œ๊ธฐ๋Šฅ

 ํ…์ŠคํŠธ ์ž…๋ ฅ ์ปค์„œ

 STACK ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ (๋ณ€์ˆ˜์˜ ์„ ์–ธ, ํ•จ์ˆ˜์˜ return)

 CPU์˜ ์—ฐ์‚ฐ

 ๊ธธ ์ฐพ๊ธฐ

 

ใ…กใ…กใ…กใ…กใ…ก

#include <stdio.h>
#include <Windows.h>
#include <string.h>

#define MAX 8
#define TRUE 1
#define FALSE 0
void stack_test01();
void stack_test02();

int push(int data);
int pop();

int arr[MAX] = { 0, }; 
// ์›์†Œ๋“ค์„ ์ €์žฅํ•  ๋ฐฐ์—ด
int top = -1; 
// ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ์›์†Œ์˜ ์ธ๋ฑ์Šค (์ดˆ๊ธฐ๊ฐ’ -1)

void main() {
   stack_test02();
}

int push(int data) {
   if (top == MAX - 1) {
 // top == 7
      printf(
"๋”์ด์ƒ ์ €์žฅํ•  ๊ณต๊ฐ„ ์—†์Œ!\n");
      return FALSE;
   }
   arr[++top] = data;
   // ++top;
   // arr[top] = data;

   return TRUE;
}

 

int pop() {
   if (top < 0) {
   printf("๊บผ๋‚ผ ๋ฐ์ดํ„ฐ ์—†์Œ!\n");
   return FALSE;
   }
   arr[top--] = 0;
   // arr[top] = 0
   // top--;
   return TRUE;
}

 

void print() { // arr์ˆซ์ž์—ด ์ถœ๋ ฅํ•จ์ˆ˜.
   int i;
   for (i = 0; i < MAX; ++i) {
      printf("%d ", arr[i]);
   }
   printf("\n");
}

 

void stack_test01() {
   push(4);
   push(5);
   push(1);   
   push(2);
   print(); 
// 4 5 1 2 0 0 0 0
   pop();
   print(); 
// 4 5 1 0 0 0 0 0
   pop();
   print(); 
// 4 5 0 0 0 0 0 0   
   pop();
   print(); 
// 4 0 0 0 0 0 0 0
   pop();
   print(); 
// 0 0 0 0 0 0 0 0
   pop();
   print();
}

void stack_test02() {
   int select = 0;
   int data;
   while (1)   
// ๋ฌดํ•œ๋ฃจํ”„ ์ƒ์„ฑ.
   printf("๋ฐฐ์—ด : ");
   print();

   printf("1. push\n");
   printf("2. pop\n");
   printf("3. exit \n์ž…๋ ฅ : ");
   scanf_s("%d", &select);      
// ์ž…๋ ฅํ•œ ์ˆ˜๋ฅผ select์— ์ €์žฅ.
   switch (
select)
// select ์— ์ €์žฅํ•œ ๊ฐ’์— ๋”ฐ๋ผ .
      case 1:
// push ๋ฅผ ํ˜ธ์ถœํ•œ ๊ฒฝ์šฐ.
         printf("์ถ”๊ฐ€ํ•  ์›์†Œ : "); 
         scanf_s("%d", &data); 
//์ž…๋ ฅํ•œ ์›์†Œ๋ฅผ data์— ์ €์žฅ.
         if (push(data)) 
// push(data) ์—์„œ True(1) ํ˜น์€ False(0) ๋ฅผ returnํ•ด์คŒ.
            printf(
"์ถ”๊ฐ€ ์™„๋ฃŒ!\n");
            break;
   case 2: 
// pop์„ ํ˜ธ์ถœํ•œ ๊ฒฝ์šฐ
      if (pop(data)) 
// pop(data) ์—์„œ True(1) ํ˜น์€ False(0) ์„ returnํ•ด์คŒ.
         printf("์‚ญ์ œ ์™„๋ฃŒ!\n");
         break;
   case 3: 
// exit ์„ ํ˜ธ์ถœํ•œ ๊ฒฝ์šฐ.
      printf("ํ”„๋กœ๊ทธ๋žจ์„ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.\n");
      exit(0);
   
   getch();
   system("cls");
   

ใ…กใ…กใ…กใ…กใ…ก

728x90

๋Œ“๊ธ€