程序中的栈是什么?

程序中的栈是什么?,第1张

栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除 *** 作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

要搞清楚这个概念,首先要明白”栈“原来的意思,如此才能把握本质。栈,存储货物或供旅客住宿的地方,可引申为仓库、中转站,所以引入到计算机领域里,就是指数据暂时存储的地方,所以才有进栈、出栈的说法。

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

}

}

已经可以运行。主要问题就是出栈函数的问题,需要你仔细考虑一下。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11906777.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存