티스토리 뷰

Programming?/C++

[C] 스택

Erlka 2012. 6. 10. 12:20


#include <stdio.h>
#include <stdlib.h>
#define MAXSTACK 5

struct stack
{
    int item[MAXSTACK];
    int top;
};

void push(struct stack *s1, int x);
int pop(struct stack *s1);

void main()
{
    struct stack s1;
    int select, data;

    s1.top = -1;

    do
    {
        printf("\n ***********************************\n");
        printf("* 1. push(스택에 데이터 삽입) 선택        *\n");
        printf("* 2. pop(스택에서 데이터 추출) 선택       *\n");
        printf("* 3. 스택 종료                                       *\n");
        printf("\n ***********************************\n");
        printf("메뉴를 선택하세요 (1,2,3,)");
        scanf("%d",&select);

        if(select == 1)
        {
            printf("삽입할 데이터를 입력하세요 ? ");
            scanf("%d", &data);
            push(&s1, data);
        }
        else if(select == 2)
        {
            printf("스택에서 꺼낸 데이터 = %d \n",pop(&s1));
        }
    }while(select != 3);
}
void push(struct stack *s1, int x)
{

    if(s1->top == MAXSTACK-1) // s1의 top이 99라면 (꽉 찼다면)
    {
        printf("스택이 가득 찼습니다"); // 안내문 출력
        exit(1); // 종료
    }
    s1->item[++s1->top]=x; //s1의 item 배열에 s1의 top을 먼저 증가 시키고 x값 저장
}

int pop(struct stack *s1)
{
    int popdata; // 데이터를 저장할 popdata를 선언
    if(s1->top == -1) // s1의 top이 -1이라면 (비었다면)
    {
        printf("스택이 비어있습니다"); // 안내문 출력
        exit(1); // 종료
    }
    popdata = s1->item[s1->top--]; // s1의 item배열의 s1의 top이 가리키는 자리의 데이터를 popdata에 저장하고 top을 감소
    return(popdata); // 받은 데이터를 리턴
}

 


 
 



 1,2,3,4,5 입력후 데이터를 출력했을때의 모습. 5,4,3,2,1로 출력
 

 

 

'Programming? > C++' 카테고리의 다른 글

[C] 정수형 퀵정렬  (0) 2012.06.10
[C] 큐  (0) 2012.06.10
[C] 초간단 계산기  (0) 2012.06.10
[C] 배열 최대값 프로그램(5개 입력)  (0) 2012.06.10
[C] 배열 최대,최소값(범위지정)  (0) 2012.06.10
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2025/01   »
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
글 보관함