标签:
1 #include <stdio.h> 2 #include <malloc.h> 3 #include <stdlib.h> 4 #include <math.h> 5 6 #define STACK_INIT_SIZE 100 //å˜å‚¨ç©ºé—´åˆ?始分é…?é‡? 7 #define STACKINCREMENT 10 //å˜å‚¨ç©ºé—´åˆ†é…?å¢?é‡? 8 #define SElemType char //当å‰?æ•°æ?®ç±»å?‹ 9 10 typedef struct 11 { 12 SElemType *base; //æ ˆåº•æŒ‡é’ˆï¼› 13 SElemType *top; //æ ˆé¡¶æŒ‡é’ˆ 14 int stacksize; //当å‰?已分é…?çš„å˜å‚¨ç©ºé—´ 15 }SqStack; 16 17 SqStack InitStack() 18 { 19 SqStack S; 20 S.base = (SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType)); 21 if(!S.base) 22 { 23 printf("CREATE ERROR!\n"); 24 exit(OVERFLOW); //OVERFLOW定义äº?math.h文件ä¸ï¼Œå…¶å€¼ä¸º3,exit函数定义在stdlib.hä¸ 25 } 26 S.top = S.base; 27 S.stacksize = STACK_INIT_SIZE; 28 return S; 29 } 30 31 int StackEmpty(SqStack S) 32 { 33 if(S.top == S.base) 34 { 35 return 1; 36 } 37 else 38 { 39 return 0; 40 } 41 } 42 43 SElemType GetTop(SqStack S) 44 { 45 if(S.top == S.base) 46 { 47 return 0; 48 } 49 else 50 { 51 return *(S.top - 1); 52 } 53 } 54 55 SqStack Push(SqStack S, SElemType e) 56 { 57 if(S.top - S.base >= S.stacksize) 58 { 59 S.base = (SElemType*)realloc(S.base,(S.stacksize + STACKINCREMENT) * sizeof(SElemType)); 60 if(!S.base) 61 { 62 printf("ERROR\n"); 63 exit(OVERFLOW); //OVERFLOW定义äº?math.h文件ä¸ï¼Œå…¶å€¼ä¸º3,exit函数定义在stdlib.hä¸ 64 } 65 S.top = S.base + S.stacksize; 66 S.stacksize += STACKINCREMENT; 67 } 68 else 69 { 70 *(S.top++) = e; 71 } 72 return S; 73 } 74 75 SqStack Pop(SqStack S) 76 { 77 if(S.top == S.base) 78 { 79 printf("NULL\n"); 80 return S; 81 } 82 else 83 { 84 S.top--; 85 return S; 86 } 87 } 88 89 int ClearStack(SqStack S) 90 { 91 S.top = NULL; 92 S.base = NULL; 93 S.base = (SElemType*)malloc(STACK_INIT_SIZE * sizeof(SElemType)); 94 if(!S.base) 95 { 96 printf("CREATE ERROR!\n"); 97 exit(OVERFLOW); //OVERFLOW定义äº?math.h文件ä¸ï¼Œå…¶å€¼ä¸º3,exit函数定义在stdlib.hä¸ 98 } 99 S.top = S.base; 100 S.stacksize = STACK_INIT_SIZE; 101 return 1; 102 } 103 104 void StackTraverse(SqStack S) 105 { 106 SElemType *p = S.base; 107 while(p != S.top) 108 { 109 printf("%c",*(p++)); 110 } 111 printf("\n"); 112 } 113 114 int main() 115 { 116 SqStack S = InitStack(); 117 char c; 118 printf("ÇëÊäÈ룬windowsϵͳÏÂÇëÒÔCtrl+Z½áÊøÊäÈë\n"); 119 c = getchar(); 120 while(c != EOF) 121 { 122 if(c != EOF) 123 { 124 switch(c) 125 { 126 case ‘#‘: S = Pop(S);break; 127 case ‘@‘: ClearStack(S);break; 128 default: S = Push(S,c); 129 } 130 } 131 c = getchar(); 132 } 133 StackTraverse(S); 134 135 }
标签:
原文地址:http://www.cnblogs.com/yangsh1996/p/5377158.html