| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 772 人关注过本帖
标题:[求助]怎么打印输出栈??大家来研究一下
只看楼主 加入收藏
凉哥二世
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2006-10-7
收藏
 问题点数:0 回复次数:1 
[求助]怎么打印输出栈??大家来研究一下

#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);

搜索更多相关主题的帖子: 打印 输出 研究 
2006-11-04 09:42
凉哥二世
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2006-10-7
收藏
得分:0 
就是“ case 5:
Print(&S);
break;”
这部分函数~~
Print(&S);输出不对~~

欢迎大家常来我的百度空间: http://hi.baidu.com/liangges
2006-11-04 09:43
快速回复:[求助]怎么打印输出栈??大家来研究一下
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027781 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved