메뉴 건너뛰기

창조도시 기록보관소

언어 자료구조 (1) - Stack [민프레스 강의정리]

2005.12.30 23:21

성령의분노 조회 수:321 추천:2

자료의 모든 삽입과 삭제가 한쪽에서만 일어나는 형태.

[ 특징 ]
삽입과 삭제가 일어나는 곳을 TOP이라고 한다.
자료를 스택에 넣는 행위를 PUSH라고 한다.
스택에서 자료를 꺼내는 것을 POP이라고 한다.
스택과 같은 자료구조를 LIFO(LIST-IN FIRST-OUT)이라고 한다.
시스템 내부의 함수의 호출시에 주소나 상태를 임시로 저장할 경우 산술식 계산등에 활용한다.

[ 개념도 ]



[ 예제소스 ]
#include
#include

int stack[10]; 스택은 여기선 배열입니다.
int top;

void init_stack()
{
top = -1;
}

TOP을 지하1층(?)으로 깔아서 초기화시키는 역활을 합니다.

void push( int val1 )
{
if( top >= 9 )
printf("\n######## 스택이 꽉 차버렸네요 ########\n");
else
stack[++top] = val1;
}

아직 여유공간이 있는 경우엔 입력받은 값를 인수로 받아 스택(배열)에 입력시키는 역활을 하는 함수입니다. ++top이기에 TOP을 한층 올린 뒤, 그 위치에 입력받은 값을 집어넣습니다.

void pop()
{
if( top < 0 )
printf(" ########## 더이상 비울 스택이 없습니다 ###########\n");
else
--top;
}

TOP을 한칸 내리면 ( --top; ) 가장 위에 있던 자료는 무용지물이 되는 것이죠. 다음에 PUSH를 하더라도 덮어버리기 때문에 삭제라고 보셔도 무방합니다. 위의 개념도에서 3번째 그림을 보시면 한칸 내려와 있는 TOP을 보실 수 있습니다.


void print_stack()
{
int i;
printf("스택 top --------------------- buttom\n");

for( i = top ; i >= 0 ; i-- )
printf("%d ", stack[i] );
printf("\n");
}

지금까지 쌓인 스택들을 출력하는 함수입니다. 바닥부터 차곡차곡 순서대로 출력됩니다.


void main()
{
printf(" 배열을 이용한 스택 프로그램 입니다 \n");
int select_num;
int push_num;
int exit_flag = 0;

init_stack();

while( 1 )
{

printf(" 1) push 2) pop 3) data print 4) Quit! \n" );
printf(" 숫자를 선택해주세요 : "); scanf("%d", &select_num );

if( select_num > 3 )
break;
else{
switch( select_num )
{
case 1 :
printf("푸쉬 숫자를 입력해주세요 => "); scanf("%d", &push_num );
push( push_num );
printf("푸쉬(push)를 실행 했습니다\n");
break;
case 2 :
pop();
printf("팝(pop)을 실행 했습니다\n");
break;

case 3 :
print_stack();
break;
}
}
}
printf("프로그램을 종료합니다\n");
getch();
}

엔진입니다.



[예제프로그램]◁다른이름으로 저장하세요 ㅡ_ㅡ;
번호 제목 글쓴이 날짜 조회 수
31 MSN 주소를 알려주세요. [3] MrGeek 2006.09.16 85
30 [소스첨부] 인자값 변경. 청연 2006.09.14 59
29 주석제거 프로그램 (수정) 청연 2006.09.13 128
28 ★C언어 처음 하시는분들 보세요.. [3] 청연 2006.09.13 202
27 2. Direct로 그림그리기! [1] file 케이코냥이 2006.09.03 166
26 한국 위키백과를 추천합니다. MrGeek 2006.09.01 84
25 1. DirectX 8.0 sdk 해보기. file 케이코냥이 2006.08.28 154
24 C#.NET 유용한 포인터 사용법(1) - 스택기반의 배열 괴짜인간 2006.08.14 124
23 VB/VC 키코드 리스트 [1] 알닭 2006.04.23 202
22 [울스M프로젝트?!-┏]Html 기초부터 탄탄히 ! -4- [2] 울스M 2006.02.08 215
21 [울스M프로젝트?!-┏]Html 기초부터 탄탄히 ! -3- [2] 울스M 2006.02.08 160
20 [울스M프로젝트?!-┏]Html 기초부터 탄탄히 ! -2- [5] 울스M 2006.02.08 173
19 [울스M프로젝트?!-┏]Html 기초부터 탄탄히 ! -1- [2] 울스M 2006.02.08 558
18 [비법은 아니지만] 비주얼 베이직에 이스터 에그 발견! [1] StartCraft 2006.02.06 287
17 질문이요. [2] 블랙호크 2006.01.06 125
16 비트맵&브레인스토밍&프로그래밍의 도(道) [1] 성령의분노 2006.01.04 307
15 자료구조 (3) - 링크리스트 [3] 성령의분노 2006.01.01 209
14 자료구조 (2) - Queue[민프레스 강의정리] [1] 성령의분노 2005.12.31 150
» 자료구조 (1) - Stack [민프레스 강의정리] 성령의분노 2005.12.30 321
12 [VB] [CD-ROM] CD-ROM 열고 닫기 StartCraft 2005.08.21 351