반응형
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 |
---|