반응형


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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
//스택 구현
//기능(함수) : push(데이터 넣는거), pop(데이터 뺴내는거), peek(젤위의데이터 보는거), del(젤위의데이터 삭제), isEmpty(데이터 하나라도있나없나), getSIze(스택에 데이터몇개) print(스택의 데이터 출력)
//1.역순 문자열 만들기
//2.수식의 괄호검사
//3.수식의 후위 표기법 변환
//4.후위 표기 수식의 연산
 
#include<stdio.h>
#include<stdlib.h> //화면클리어를 위해 넣어줌
 
#define STACK_SIZE 100
 
void push(char input);
void print(void);
char pop(void);
char peek(void);
void del(void);
int isEmpty(void);
int getSize(void);
 
char stack[STACK_SIZE]; //스택(배열)생성
int top = -1//스택의 가장 마지막 데이터 위치
 
int main(void)
{
   int sel=1;
   int ch;
 
   while(sel !=0)
   {
       system("cls"); //화면 클리어
      printf("<MENU>\n");
      printf("0.quit\n");
      printf("1.print\n");
      printf("2.push\n");
      printf("3.pop\n");
      printf("4.peek\n");
      printf("5.delete\n");
      printf("6.isEmpty\n");
      printf("7 getSize\n");
      printf("------------------\n");
 
       scanf("%d",&sel);
 
         switch(sel)
         {
         case 1:
            print(); //스택의 데이터 전체를 출력
            break;
         case 2:
            scanf(" %c",&ch);//사용자로부터 문자 입력
            push(ch); //스택에 문자를 삽입
            break;
         case 3:
            if(!isEmpty())
               printf("pop data : %c",pop()); //스택의 마지막 데이터를 반환하면서 삭제
            break;
         case 4:
            if(!isEmpty())
            printf("Data: %c\n",peek()); // 스택의 마지막 데이터를 반환(조회)
            break;
         case 5:
            if(!isEmpty())
            del();
            break;
         case 6:
            if(isEmpty())
               printf("state: Empty !");
            else
               printf("state: not empty!");
         case 7:
            printf("size: %d\n",getSize());
            break;
 
         }
         getch(); //일시정지(계속하려면 아무 키나 누르십시오)
      }
 
   return 0;
   
}
 
void push(char input)
{
   if(top>=(STACK_SIZE-1)) //스택이 가득 차면 더이상 삽입이 불가능하다
   {
      printf("full!\n");
      return;
   }
   stack[++top] = input;//스택에 데이터 삽입
}
 
void print(void)
{
   int i;
   //스택 전체를 출력
   printf("<Stack>\n");
   for(i=0; i<=top; i++)
      printf("%c ",stack[i]);
   printf("\n");
 
}
 
char pop(void)
{
   if(top ==-1//스택이 비어있는 경우에는 pop을 할 수 없음.
   {
      printf("Empty!\n");
      return ;
   }
   return stack[top--]; //가장 마지막에 들어온 데이터를 반환
}
 
char peek(void)
{
   if(top ==-1//스택이 비어있는 경우에는 peek을 할 수 없음.
   {
      printf("Empty!\n");
      return;
   }
   return stack[top]; //가장 마지막에 들어온 데이터를 반환
}
 
void del(void)
{
   if(top ==-1//스택이 비어있는 경우에는 del을 할 수 없음.
   {
      printf("Empty!\n");
      return;
   }
   top --;
}
 
int isEmpty(void)
{
   if(top==-1// 스택이비어있음
      return 1;// true
   else //스택이 비어있지않음
      return 0;//faulse
}
 
int getSize(void)
{
   return top+1//현재 스택에 데이터 개수를 반환
}
cs


반응형

'c언어 > c언어 (스택)' 카테고리의 다른 글

[c언어] 역순 문자열 만들기  (0) 2017.09.26

+ Recent posts