본문 바로가기

IT전공관련

스택 구조 설명 및 구현

스택이란 ?



스택(Stack)이란 자료구조는 선입후출(First In, Last Out: FILO), 후입선출(Last In, First Out: LIFO)의 구조를 가지고 있습니다. 예를 들어

어느 개발자의 책상에 빼곡히 쌓여있는 책을 정리하기 위해 가장 위에있는 책부터 꺼내들어 차례대로 정리합니다. 여기서, 먼저 쌓인 책들보다 나중에 쌓인 책들이 먼저 밖으로 나간다고 해서 후입선출의 구조라 말하고, 반대로 나중에 쌓인 책들보다 먼저 쌓인 책들이 늦게 밖으로 나간다고 해서 선입후출의 구조라고 말하는 것입니다. 스택(Stack)도 마치 개발자의 책상에 빼곡히 쌓여있는 책들과 비슷합니다.

순서가 있다 - 삽입(insert)과 삭제(delete)를 리스트의 한쪽(top이라고 부름)에서 행함

**삽입과 삭제가 모두 리스트 마지막에서 이루어진다.

(위에 사진은 스택에 저장되어 있는 메모리 구조를 시각적으로 나타낸 것이다. 이 처럼 제일 처음에 넣은것을 가장 먼저 못빼고 가장 마지막에 넣은것부터 꺼낼수 있게 메모리가 되어있다)

(밑은 스택에서 쓰는 명령들이다)

top() : 스택의 맨 위에 있는 데이터 값을 반환한다.

push() : 스택에 데이터를 삽입한다. 

pop() : 스택에서 데이터를 삭제하여 반환한다. 

isempty() : 스택에 원소가 없으면 ‘true’ 있으면 ‘false’ 값 반환 

isfull() : 스택에 원소가 없으면 ‘false’ 있으면 ‘true’ 값 반환

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include<stdio.h>
#define MAX 5
int arr[MAX] = {0,};
int number = 0;
void PUSH(input) {
    if (number == MAX) {
        printf("데이터가 꽉 찼습니다\n");
    }
    else {
        arr[number] = input;
        number++;
    }
}
void bogi() {
    int i;
    printf(" >>  ");
    for (i = 0; i < MAX; i++) {
        printf("%3d", arr[i]);
    }
    printf("\n순서 ");
    for (i = 0; i < MAX; i++) {
        printf("%3d", i);
    }
    printf("\n");
}
void POP() {
    arr[number-1= 0;
    number--;
}
int main() {
    int a, b;
    while (1) {
        getch();
        printf("  1. 추가\n  2. 현재 입력된값 확인하기 \n  3. 삭제\n  5. 나가기\n  입력 : ");
        scanf("%d"&a);
        switch (a) {
        case 1scanf("%d"&b); PUSH(b);
            break;
        case 2: bogi();
            break;
        case 3: POP();
            break;
        case 4return 0;
        defaultprintf("입력하신 번호는 선택지에 없습니다\n");    
        }
    }
 
    return 0;
}
cs


'IT전공관련' 카테고리의 다른 글

링크드 리스트 설명 및 구현  (0) 2017.07.30
큐 구조 설명 및 구현  (0) 2017.07.30
Easy keygen 설명  (0) 2017.07.20
어셈블리어 용어 정리 & 리눅스 용어 정리  (0) 2017.07.19
c언어 메모리 구조(코드)  (0) 2017.07.17