要搞清楚这个概念,首先要明白”栈“原来的意思,如此才能把握本质。栈,存储货物或供旅客住宿的地方,可引申为仓库、中转站,所以引入到计算机领域里,就是指数据暂时存储的地方,所以才有进栈、出栈的说法。
#include<stdlib.h>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)
}
}
已经可以运行。主要问题就是出栈函数的问题,需要你仔细考虑一下。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)