早教吧 育儿知识 作业答案 考试题库 百科 知识分享

栈的基本运算程序编写一个程序,实现顺序栈的如下各种基本运算,并在此基础上设计一个主程序验证其正确性:(1)初如化栈S。(2)判断栈S是否非空。(3)进栈。(4)出栈。(5)输出

题目详情
栈的基本运算程序
编写一个程序,实现顺序栈的如下各种基本运算,并在此基础上设计一个主程序验证其正确性:
(1)初如化栈S。
(2)判断栈S是否非空。
(3)进栈。
(4)出栈。
(5)输出栈S的长度。
▼优质解答
答案和解析
#include
typedef struct node
{
int num;
struct node *next;
}*link,LINK;
void empty(link top)
{
top=NULL;
}
int pd(link top)
{
if(top==NULL)
{
return 0;
}
else
{
return 1;
}
}
link create(link top,int n)
{
link s;
s=(link)malloc(sizeof(LINK));//分配时要分配一个结构体的空间,而不是仅仅一个指针的空间。
s->num=n;
s->next=top;
top=s;
return top;
}
/*如上个函数,要返回一个指针,否则是不能改变top的值的。因为在函数中只能修改指针指向地址的内容,而它指向的地址是不会改变的。因此要想使指针指向的地址发生变化,要重新返回一个link。出栈的数据放到x中。*/
link outword(link top,int *x)
{
link p;
if(pd(top)==0)
{
printf("underflow");
return top;
}
else
{
p=top;
*x=top->num;
top=top->next;
free(p);
return top;
}
}
void main()
{
link top=NULL;
int n,*x=(int*)malloc(sizeof(int));
//top=(link)malloc(sizeof(LINK));
//empty(top);
printf("进栈\n");
scanf("%d",&n);
//top->num=n;
while(n!=-1)
{
top=create(top,n);
scanf("%d",&n);
}
printf("出栈\n");
while(pd(top)!=NULL)
{
top=outword(top,x);
printf("%d\n",*x);
}
}
已经可以运行。主要问题就是出栈函数的问题,需要你仔细考虑一下。