스택이란?
스택은 사전적으로 '건초', '더미'를 의미한다. 자료구조에서 스택은 LIFO(Last-In First-Out)으로 마지막에 들어온 것이 먼저 나간다는 뜻으로 후입선출법이라고 한다. 예을 들어 접시 더미를 생각해보면 접시를 한개씩 쌓아올리고 맨 위부터 한 개씩 뺀다고 생각하면 먼저 쌓아올린 접시가 나중에 나갈것이고 나중에 쌓아올린 접시가 먼저 나갈 것이다. 이처럼 먼저 들어온게 나중에 나가는 것을 '선입후출'이라하고 나중에 들어온게 먼저 나가는 것을 '후입선출'이라 한다.
스택의 연산
스택에는 두 가지의 기본 연산이 있다. 위 그림과 같이 삽입 연산(PUSH)과 삭제 연산(POP)이다. 그 외의 연산도 필요한다. 아래에서 연산들을 확인해보자.
is_sull(s) : 스택이 가득 차있는지 검사하여 true나 faluse를 반환
push(s, item) : 스택의 가장 윗부분에 데이터 삽입
is_empty(s) : 스택이 비어 있는 지를 검사하여 true나 faluse를 반환
pop(s) : 스택의 가장 윗부분의 데이터 삭제
peek(s) : 스택의 가장 윗부분의 데이터를 제거하지 않고 반환
스택구현
정수 배열 스택 프로그램 | 구조체 배열 스택 프로그램 |
#include <stdio.h> stack[++top] = item; return stack[top--]; return stack[top];
|
#include <stdio.h> #define MAX_STACK_SIZE 100 #define MAX_STRING 100
typedef struct { int student_no; char name[MAX_STRING]; char address[MAX_STRING]; } element; element stack[MAX_STACK_SIZE]; int top = -1;
int is_empty() { // 공백 상태 검출 함수 return (top == -1); } int is_full() { // 포화 상태 검출 함수 return (top == (MAX_STACK_SIZE - 1)); } void push(element item) { // 삽입 함수 if (is_full()) { fprintf(stderr, "스택 포화 에러\n"); return; } else } element pop() { // 삭제 함수 if (is_empty()) { fprintf(stderr, "스택 공백 에러\n"); exit(1); } } element peek() { // 피크함수 if (is_empty()) { fprintf(stderr, "스택 공백 에러\n"); exit(1); } else }
int main(void) { element ie = { 20190001, "Hong", "Soeul" }; element oe;
push(ie); oe = pop();
printf("학번: %d\n", oe.student_no); printf("이름: %s\n", oe.name); printf("주소: %s\n", oe.address); return 0; } |
'프로그램언어 > C언어' 카테고리의 다른 글
실행파일 실행시 인자 삽입 int main(int argc, char* argv[]) (0) | 2020.08.27 |
---|---|
스택 괄호검사 프로그램 (0) | 2020.06.08 |
균형 이진 탐색트리 (0) | 2020.01.07 |
아스키코드 (0) | 2019.11.12 |
c언어 sort() 함수 (1) | 2019.10.21 |