导航:首页 > 源码编译 > 链式栈编译行编译程序

链式栈编译行编译程序

发布时间:2022-12-28 10:08:25

Ⅰ 如何用C语言创建一个链栈,并进行操作

1 思路: 主要是链表的插入和删除操作

2 代码

#include<stdio.h>
#include<stdlib.h>
typedefstructnode
{
intdata;
structnode*next;
}node_type;

voidpush(node_type*&stack,intelem){
node_type*node=(node_type*)malloc(sizeof(node_type));
node->data=elem;
node->next=stack;
stack=node;
}
intpop(node_type*&stack){
intelem=stack->data;
node_type*node=stack;
stack=stack->next;
free(node);
returnelem;
}
boolIsEmpty(node_type*stack){
returnstack==NULL;
}
voiddisplay(node_type*stack){
while(stack){
printf("%d",stack->data);
stack=stack->next;
}
puts("");
}
voiddestroy(node_type*stack){
while(!IsEmpty(stack)){
pop(stack);
}
}
intmain(){
puts("(1)建立空链栈");
node_type*stack=NULL;
puts(" (2)调用进栈函数,将从键盘输入的数据元素逐个进栈,输入0结束;");
intnum;
scanf("%d",&num);
while(num!=0){
push(stack,num);
scanf("%d",&num);
}
puts(" (3)显示进栈后的数据元素");
display(stack);
puts(" (4)调用两次出栈函数,显示出栈后的数据元素");
if(!IsEmpty(stack))
printf("%d ",pop(stack));
if(!IsEmpty(stack))
printf("%d ",pop(stack));

destroy(stack);
getchar();
getchar();
return0;
}

3 运行效果

Ⅱ 关于链栈的实现问题

InitStack(S);
调用它并不能改变main()函数中的变量S的指向,从 InitStack(S);返回之后,S还是指向main()函数中定义时指向的值。如果希望调用 InitStack(S);就需要对 InitStack();做出修改:

void InitStack(LinkStack *S)
{
*S=(LinkStack)malloc(sizeof(SNode));
(*S)->next=NULL;
}

并且把main()函数中的
InitStack(S);
改为
InitStack(&S);

Ⅲ 顺序栈与链式栈的区别

顺序栈的实现在于使用了数组这个基本数据结构,数组中的元素在内存中的存储位置是连续的,且编译器要求我们在编译期就要确定数组的大小,这样对内存的使用效率并不高。

一来无法避免因数组空间用光而引起的溢出问题,二在系统将内存分配给数组后,则这些内存对于其他任务就不可用;

而对于链栈而言,使用了链表来实现栈,链表中的元素存储在不连续的地址,由于是动态申请内存,所以我们可以以非常小的内存空间开始,另外当某个项不使用时也可将内存返还给系统。

Ⅳ C语言:链栈的基本操作(代码如下:帮我看看错哪了)

#include<stdio.h>
#include<stdlib.h>

typedefstructStackNode
{
intdata;
structStackNode*next;
}SNode;

//只进栈一个元素
voidPush(SNode*s,inte)
{
SNode*p;
p=(SNode*)malloc(sizeof(SNode));
s->data=e;
p->next=s;
s=p;
//returns;
}

//连续进栈n个元素
voidPush_Series(SNode*s)
{
printf("请输入进栈的元素数:");
intn,i,e;
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("请输入第%2.d个进栈元素:",i+1);
scanf("%d",&e);
Push(s,e);
//printf("此阶段的元素为:%2.d ",s->next->data);
}
}
voidPop(SNode*s)
{
if(s==NULL)
{
printf("栈空了!!!");
exit(0);
}
SNode*q;
inte;
e=s->data;
printf("***************** ");
printf("栈顶元素为:%d",e);
printf("***************** ");
q=s;
s=s->next;
free(q);
}

//★:s是形参,你在里面申请的内存空间地址是无法赋值给调用此函数的s的!
voidInirStack(SNode**s) //★:∴应用指针的指针!(或者C++里用引用)
{
*s=(SNode*)malloc(sizeof(SNode));
(*s)->next=NULL;
}

intmain()
{
SNode*s; //★你这个s没有申请内存空间!
/*
SNode*s=(SNode*)malloc(sizeof(SNode));
s->next=NULL;*/
InirStack(&s); //★此处要把指针的指针代入
Push_Series(s);
Pop(s);
printf("Helloworld! ");
return0;
}

Ⅳ 链式栈。程序编译通过,但一运行就死。貌似init函数那里有问题,但是不知原因何在,求高手解救!

不多说了:
测试结果:
56 84 23 67 34 45
请按任意键继续. . .

错误修改:
PSTACK S=(PSTACK)malloc(sizeof(STACK)); //只有给S申请一个合法的地址,才能把它作为参数去传递给init函数,应为init函数要对S指向的地址进行赋值操作。 【原来的S是游离指针】
init(S);

好运!

编程实现链栈的入栈和出栈操作。 在线等着你哦!

#include<stdio.h>
#include<stdlib.h>
typedefstructSnode
{
intdata;/*数据域*/
structSnode*next;/*指针域*/
}SNODE,*LinkStack;/*其中SNODE为链栈中的结点类型名,LinkStack为指向结点的指针类型名*/
//////////////////
LinkStackPush(LinkStacktop,inte)
/*将数据元素e压入到链栈top中,使其成为新的栈项元素*/
{
LinkStackp;
p=(LinkStack)malloc(sizeof(SNODE));/*生成一个新的结点*/
if(!p)/*如果分配空间失败,则函数返回"OVERFLOW"*/
printf("StackisOverflow ");
p->data=e;/*新结点的数据域赋值*/
p->next=top;/*修改链使新结点插入到链表的头部,并成为新的栈顶元素*/
top=p;
returntop;
}
/////////////
LinkStackPop(LinkStacktop,int*e)
/*将链栈top中的栈顶元素从栈中删除,并用e返回其值*/
{
LinkStackq;
if(!top)/*如果栈空,则函数返回ERROR*/
printf("StackisERROR ");
*e=top->data;/*将被删的栈顶元素的值保存在e中*/
q=top;/*用q记下待删的栈顶元素*/
top=q->next;
/*修改链使待删结点从链中"卸下",此时被删结点的后继成为新的栈顶元素结点*/
free(q);/*释放被删结点的存储空间*/
returntop;
}
/////////
LinkStackStack_display(LinkStacktop)
{
inte;
while(top)
{
e=top->data;
printf("%4d",e);
top=top->next;
}
returntop;
}
/////////////////////
voidmain()
{
LinkStacktop=0;
inti=0,n,e;
printf("pleaseinputthelength:");/*输入几个数*/
scanf("%d",&n);
printf("pleaseinputtheValue: ");/*输入*/
while(i<n)
{
scanf("%d",&e);
top=Push(top,e);
i++;
}
printf("thestackis: ");
Stack_display(top);
printf("pleaseinputtheinsertnode:");
scanf("%d",&e);
top=Push(top,e);
printf("thestackafterpushis: ");
Stack_display(top);
top=Pop(top,&e);
printf("thepopvalueis:%d ",e);
printf("thestackafterpopis: ");
Stack_display(top);
}

调好了麻烦采纳一下

阅读全文

与链式栈编译行编译程序相关的资料

热点内容
致敬ea命令与征服的良心真人 浏览:666
铝合金门窗价格算法k 浏览:215
阿里云服务器如何转出 浏览:191
租了云服务器能做什么 浏览:656
php数字组合 浏览:372
管家婆云服务器动态 浏览:385
苹果app存的视频在哪里 浏览:307
电脑玩安卓游戏怎么设置 浏览:873
怎么设置快捷进入云服务器 浏览:246
python爬虫线路图教程 浏览:135
解压玩具创意图片 浏览:525
组态软件pdf 浏览:486
箍筋加密区是如何计算根数的 浏览:855
笔记本如何服务器从做raid 浏览:929
视频编解码算法工程师 浏览:587
手机上服务器怎么找 浏览:324
抖音程序员变装男 浏览:339
qd128y压缩机参数 浏览:835
解压棒的视频 浏览:145
linux下kill命令 浏览:346