我想实现入栈的顺序为12345,出栈的顺序为54321,栈顶元素为5,这个程序有点问题,请你帮忙指导一下好吗?

#include<stdlib.h>#include<stdio.h>#defineOK1#defineERROR0#defineTRUE1#defineFALSE0//... #include<stdlib.h>#include<stdio.h>
#define OK 1#define ERROR 0
#define TRUE 1
#define FALSE 0
//#define NULL 0
typedef int SElemType;
typedef int Status;
typedef struct StackNode
{
SElemType data;
struct StackNode *next;
}StackNode,*LinkStack;
LinkStack S;

//栈的初始化
void InitStack(void)
{LinkStack p;
p=(LinkStack)malloc(sizeof(StackNode));
p=NULL;

//S=NULL;
}//判栈空
Status StackEmpty(LinkStack S)
{
if(S==NULL) return OK;
else return ERROR;
}

//进栈
LinkStack LinkStack_Push(LinkStack S,SElemType &e)
{
LinkStack p;
p=(LinkStack)malloc(sizeof(LinkStack));
p->data=e;
p->next=S;
S=p;
return S;
}

//退栈
LinkStack LinkStack_Pop(LinkStack S)
{int e;
if(S==NULL) return NULL;
else
{
LinkStack p;
e=S->data;
printf("%d",e);
p=S;
S=S->next;
free(p);
return S;
}
}
//取栈顶元素
int GetLinkStackTop(LinkStack S,SElemType &e)
{
if(S==NULL) return ERROR;
e = S->data;
return e;

}int main()
{
int i,num;
SElemType n;
LinkStack x;
InitStack();
//进栈
printf("请输入要进栈元素的个数:");
scanf("%d",&num);

printf("进栈顺序为:");
for(i=0;i<num;i++)
{
scanf("%d",&n);
x=LinkStack_Push(x,n);

}
n=GetLinkStackTop(x,n);
printf("栈顶元素:%d\n",n);
//退栈
printf("出栈结果为%d\n");
// for(i=0;i<num;i++)
while(x)
{
//scanf("%d",&n);
x=LinkStack_Pop(x);

}
return 0;

}
展开
 我来答
kaixingui2012
2012-10-14 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6326万
展开全部
改好了,测试一下吧,改的好辛苦,呵呵
#include<stdlib.h>
#include<stdio.h>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int SElemType;
typedef int Status;
typedef struct StackNode
{
SElemType data;
struct StackNode *next;
}StackNode,*LinkStack;

LinkStack S; //这里S是全局变量,后面的代码就不要再传这个变量了,S会一直指向栈头
//而且,也不要再定义同名的S变量了,大家都犯相同的错误!!
//局部变量定义与全局变量名相同,两个变量会互相影响的,让程序无所适从,编程者也迷糊
//栈的初始化
void InitStack(void)
{
S=NULL; //你这里申请一个局部变量p没用啊,删掉!!
}
//判栈空
Status StackEmpty(LinkStack S)
{
if(S==NULL) return OK;
else return ERROR;
}

//进栈
void LinkStack_Push(SElemType &e)
{
LinkStack p;
p=(LinkStack)malloc(sizeof(LinkStack));

p->data=e;
p->next=S;
S=p;
}

//退栈
void LinkStack_Pop()
{
if( S )
{
LinkStack p;
printf(" %d", S->data ); //加个空格,这样数据有间隔,看起来舒服点
p=S;
S=S->next;
free(p);
}
}
//取栈顶元素
Status GetLinkStackTop(SElemType &e) //这里返回取数状态比较好,因为e为引用,可以直接带回数据值
{
if(S==NULL) return ERROR;
e = S->data;
return OK ;
}
int main()
{
int i,num;
SElemType n;
InitStack();
//进栈
printf("请输入要进栈元素的个数:");
scanf("%d",&num);

printf("进栈顺序为:");
for(i=0;i<num;i++)
{
scanf("%d",&n);
LinkStack_Push(n);
}
GetLinkStackTop(n);
printf("栈顶元素:%d\n",n);
//退栈
printf("出栈结果为\n"); //这里多了个%d,因为你没参数
while(S)
{
LinkStack_Pop();
}
return 0;
}
来自:求助得到的回答
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式