언어 자료구조 (1) - Stack [민프레스 강의정리]
2005.12.30 23:21
[ 특징 ]
삽입과 삭제가 일어나는 곳을 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();
}
엔진입니다.
[예제프로그램]◁다른이름으로 저장하세요 ㅡ_ㅡ;
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
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] | 케이코냥이 | 2006.09.03 | 166 |
26 | 한국 위키백과를 추천합니다. | MrGeek | 2006.09.01 | 84 |
25 | 1. DirectX 8.0 sdk 해보기. | 케이코냥이 | 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 |