user-0 提问: 初学者，关于C语言栈的应用问题，求大神指点

回复:
user: user-1
content: #include <stdio.h> #include <stdlib.h> #include <malloc.h> #include <unistd.h> //#include<process.h>  /* exit() */ #define STACK_INIT_SIZE 100 //初始栈空间分配能够存储的ElementType元素个数  #define STACKINCREMENT 10 //栈空间不够用后每次增加的存储量  typedef short Status;//返回状态值  typedef struct{  	char value;  }ElementType; //typedef char ElementType;  typedef struct{  	ElementType *base;//栈底指针；  	ElementType *top;//栈顶指针；  	int stacksize;//当前栈总共能容纳多少个ElementType元素，也就是最大容量  }SqStack;    //根据以上定义，完成如下功能（使用顺序存储结构）  Status InitStack(SqStack &S)//构造一个空栈，分配栈空间 { 	S.base = (ElementType*)malloc(STACK_INIT_SIZE*sizeof(ElementType)); 	if(!S.base) 		exit(0); 	S.top = S.base; 	S.stacksize =  STACK_INIT_SIZE; 	return 1; }  Status DestoryStack(SqStack &S)//销毁一个已分配的栈，回收栈空间 { 	free(S.base); 	S.base = NULL; 	S.top = NULL; 	S.stacksize = 0;  	return 1; }  Status StackEmpty(SqStack S)//判断S是否为空栈，是返回1，否则返回0 { 	if(S.base == S.top) 		return 1; 	else 		return 0; }  int StackLength(SqStack S)//返回S中元素个数 { 	return S.top-S.base; }  Status GetTop(SqStack S,ElementType &e)//返回栈顶元素给e，如果空栈函数返回-1，正常返回1 { 	if (S.top <= S.base) 		return -1;  	e = *(S.top-1); 	printf("栈顶元素为：%c\n",e.value); 	return 1;  	/* 	   if(S.top > S.base) 	   { 	   e = *(S.top-1); 	   printf("栈顶元素为：%c\n",e.value); 	   return 1;  	   }else 	   return -1; 	 */ }  Status Push(SqStack &S,ElementType e)//插入e为新的栈顶元素，如果栈空间不够，自动扩充（realloc函数） {  	if(S.top-S.base>=S.stacksize) 	{ 		//S.base = (ElementType *)realloc(S.base,(S.stacksize + STACK_INIT_SIZE)); 		S.base = (ElementType *)realloc(S.base,(S.stacksize + STACK_INIT_SIZE) * sizeof(ElementType)); 		if(!S.base) 			exit(0); 		S.top = S.base+S.stacksize; 		S.stacksize = S.stacksize+STACKINCREMENT; 	}  	//*(S.top) = e; 	*(S.top) = e; 	S.top++;  	return 1; }  Status Pop(SqStack &S,ElementType &e)//从栈中删除栈顶元素，并放在e中，空栈函数返回-1，正常返回1 { 	//if(S.top == S.base) 	if(S.top <= S.base) 		return 0; 	else 		//S.top = S.top-1; 		S.top--; 	e = *(S.top);  	return 1; }  Status Judge(SqStack S,ElementType &e) { 	while(S.top>S.base) 	{ 		if((S.top-1)->value==(S.base)->value) 		{ 			S.top = S.top-1; 			S.base = S.base+1; 		} 		else 			return 0; 	} 	if((S.top)->value =='&'||(S.base)->value =='&') 		return 1; 	else 		return 0; }  void print(SqStack S) { 	if (S.top <= S.base) 		return; 	printf("++此时栈内元素为："); 	while(S.top>S.base) 	{ 		// printf("此时栈内元素为：\n"); 		S.top = S.top-1; 		printf("%c(%d)\t",S.top->value, S.top->value); 	} 	printf("\n");  }  int main() { 	SqStack s; 	ElementType x; 	int a; 	int i; 	InitStack(s); 	printf("请选择测试内容（1为实验一，2为实验2）\n"); 	scanf("%d",&a); 	getchar();    // for '\n' 	switch(a) 	{ 		case 1:{  				   //ElementType c; 				   printf("请输入5个字符：\n"); 				   //for(i=0;i<6;i++) 				   for(i=0;i<5;i++) 				   {  					   scanf("%c",&x.value); 					   Push(s,x); 				   } 				   //printf("111"); 				   //print(s); 				   do{ 					   GetTop(s,x); 					   print(s); 					   Pop(s,x); 				   }while(StackLength(s)>0); 				   puts("\n"); 			   };break; 		case 2: 			   //{ 				   printf("请输入奇数个字符（要以序列1&序列2的形式输入，中间用&隔开,其中序列1和序列2为逆序）\n"); 				   int d; 				   printf("请输入要输入的字符数："); 				   scanf("%d",&d); 				   printf("请输入字符：\n"); 				   for(i=1;i<=d;i++) 				   { 					   scanf("%c",&x.value); 					   Push(s,x); 				   } 				   if(Judge(s,x)) 					   printf("符合要求！\n"); 				   else 					   printf("不符合要求！\n"); 				   //printf("正在开发中..."); 			  // }; 			   break; 		default: 			   printf("正在开发..");break; 	}  }   供参考～  注意提示输入5个，其实是输入6个。 另外，输入a之后的换行符。  其他认为有问题的也一并改了，详见上面的代码～