#include<stdio.h>
#include<malloc.h>
#define INIT_SIZE 100 //存储空间初始分配量
#define INCREMENT 10 //存储空间分配增量
//typedef char ElemType;
typedef struct{
char *top, *base; //栈顶指针和栈底指针
unsigned stacksize; //当前已分配的存储空间,以元素为单位
}SqStack;
int InitStack(SqStack *S) //创建一个空栈
{
S->base=(char *)malloc( INIT_SIZE * sizeof(char) );
if(!S->base) //空间分配失败
return 1;
//空间分配成功
S->top=S->base;//置栈顶指针
S->stacksize=INIT_SIZE;//栈大小
return 0;
}
int GetTop(SqStack *S) //返回栈顶元素
{
if(S->base==S->top)//栈空,返回0
return 0;
return *(S->top - 1);//栈不空,返回栈顶元素
}
void Push(SqStack *S) //插入栈顶
{
if( (unsigned)(S->top - S->base) >= S->stacksize){//栈满,追加存储空间
S->base=(char *)realloc(S->base, (S->stacksize+INCREMENT)*sizeof(char) );
if(!S->base)//分配失败,返回1
printf("插入失败。\n");
//分配成功
S->top = S->base + S->stacksize;//置栈顶指针
S->stacksize +=INCREMENT;//栈大小
}
printf("请输入一个字符:");
scanf( "%c", S->top++ );
scanf( "%c", S->top++ );//接收输入后,S->top指向栈顶元素的下一个位置
printf("插入成功。\n");
}
int Pop(SqStack *S) //删除栈顶元素
{
if(S->base == S->top)//空栈,返回0
return 0;
return *( --(S->top) );//不空,栈顶指针下移(即删除栈顶元素),并且返回栈顶元素
}
void Print(SqStack *S)
{
char* k;
if (S->base==S->top) printf("空栈!");
else printf("栈元素如下:\n");
while (S->base!=S->top)
{
k=S->top;
printf("%c\n",k);
k--;
}
printf("\n");
}
//介绍菜单
void instructions(void)
{
printf("\n");
printf("********************************\n");
printf("*** 栈 ***\n");
printf("*** 请选择您要进行的操作 ***\n");
printf("********************************\n");
printf("* 1. 创建一个空栈 *\n");
printf("* 2. 插入栈顶元素 *\n");
printf("* 3. 返回栈顶元素 *\n");
printf("* 4. 删除栈顶元素 *\n");
printf("* 5. 打印栈 *\n");
printf("* 0.退出程序 *\n");
printf("********************************\n");
printf("\n");
}
int main()
{
SqStack S;
char e;
int choice;
instructions();/*显示菜单*/
printf("您还没有建立堆栈,请输入1建立一个堆栈。\n");
scanf("d%",&choice);
while(choice != 0){
switch(choice){
case 1:
if( InitStack(&S) ){
printf("创建堆栈失败。\n");
return 1;
}
printf("创建堆栈成功。\n");
break;
case 2:
Push(&S);
break;
case 3:
if( e=GetTop(&S) )
printf("栈顶元素为:%c\n", e);
else
printf("空栈。\n");
break;
case 4:
if( e=Pop(&S) )
printf("成功删除了栈顶元素 %c\n", e);
else
printf("空栈。\n");
break;
case 5:
Print(&S);
break;
default:
printf("非法选择!");
break;
}
instructions();
scanf("%d",&choice);
}
printf("end of run.\n");
return 0;
}
这个打印函数该怎么改才能输出正确结果呢??
麻烦各位指导一下!在线等~
(&S);