为什么用C语言编的数据结构的栈的运行结果显示不出来? 5

#include<stdio.h>#include<stdlib.h>#include<conio.h>#include<string.h>#defineSTACK_IN... #include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
#define STACK_INIT_SIZE 10//定义栈的初始分配空间
#define STACKINCRENMENT 1//栈的分配增量

typedef struct
{
char *top;//栈顶
char *base;//栈底
int stacksize;//当前栈的大小
}qyhstack;

int initStack(qyhstack *s)//栈的初始化//
{
s->base=(char*)malloc(STACK_INIT_SIZE *sizeof(char));//假设s没有分配成功//
if(NULL==s) return 0;
s->top=s->base;//栈顶指针指向栈底,也就是说栈顶与栈底都指向同一个位置//
s->stacksize=STACK_INIT_SIZE;
return 1;
}

int destoryStack(qyhstack *s)//销毁栈//
{
if(NULL==s->base) return 0;
free(s->base);//进行销毁,也就是将分配的内存空间收回,将栈的一些参数重新设置
s->top=s->base=NULL;
s->stacksize=0;
return 1;
}

int clearStack(qyhstack *s)//清空栈//
{
if(NULL==s->base){printf("\n 栈不存在");return 0;}
s->top=s->base;
return 1;
}

int getStackElem(qyhstack *s)//取栈顶元素//
{
char topElem;
if(s->top=s->base) {printf("栈中没有可以被取的元素!\n");return 0;}
topElem=*(s->top--);
return 1;
}

char push(qyhstack *s,char elem)//进栈操作//
{
if((s->top-s->base)>STACK_INIT_SIZE)//增大存储空间//
{
s->base=(char*)realloc(s->base,(STACKINCRENMENT+STACK_INIT_SIZE)*sizeof(char));
if(NULL==s->base) return 0;//增大空间未成功//
s->top=s->base+s->stacksize;
s->stacksize+=STACKINCRENMENT;
}
*(s->top)=elem; //将元素e,写入栈顶//
s->top++;
return 1;
}

char pop(qyhstack *s)//出栈//
{
char elem;
if(s->top==s->base) return 0;
s->top--;
elem=*(s->top);
return 1;
}

int main()
{
qyhstack s;
char *elem="acdef";
char *temp;
initStack(&s);//栈的初始化//
printf("进栈顺序:\n");
temp=elem;
while(*elem!='\0')
{
printf("%3c",*elem);
elem++;
}
elem=temp;
while(*elem !='\0')
{
push(&s,*elem);//插入元素a,b,c,d,e调用push函数//
elem++;
}
printf("\n出栈顺序:\n");
//while(s.top!=s.base!=NULL)
while(s.top!=NULL && s.base!=NULL)
{
printf("%3c",pop(&s)); //取出元素,调用pop函数//
}
clearStack(&s);
return 1;
}
展开
 我来答
zmfphoenix
2011-03-26
知道答主
回答量:15
采纳率:0%
帮助的人:0
展开全部
你看下你的elem和temp的使用是不是又点问题,我想你应该是使用temp指向elem吧。而不是让elem去自增,你的第一个while循环已经把elem指向了'\0'这个字符,在让elem进入第2个while循环的时候,*elem就是'\0'了,所以并没进行压栈的处理,根本就是无数据可压;还有就是你上边的栈实现是否有问题?在好好检查下吧。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
juminlove
2011-03-29
知道答主
回答量:11
采纳率:0%
帮助的人:0
展开全部
main函数中:
//while(s.top!=NULL && s.base!=NULL)
while(s.top!=s.base)
{
printf("%3c",pop(&s)); //取出元素,调用pop函数//
}
pop函数中:
char pop(qyhstack *s)//出栈//
{
char elem;
if(s->top==s->base) return 0;
s->top--;
elem=*(s->top);
//return 1;
return elem;
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式