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

链式栈编译行编译程序

发布时间: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);
}

调好了麻烦采纳一下

阅读全文

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

热点内容
摘译和编译的英文 浏览:357
热泵压缩机选型 浏览:119
op手机微信加密如何解除 浏览:384
如何在王牌战争找到高爆率服务器 浏览:13
江浙小学语文辅导课用什么APP 浏览:97
新梦幻大陆服务器地址 浏览:239
网吧服务器怎么更换壁纸 浏览:528
linux命令方法 浏览:330
linux下载freetype 浏览:121
程序员入驻平台 浏览:327
程序员大战外挂 浏览:743
html实例教程pdf 浏览:155
linux命令开放所有权限 浏览:573
30岁能学会编程 浏览:735
小火箭的服务器是什么 浏览:967
cad查信息命令 浏览:402
XP禁止新建文件夹 浏览:394
程序员的悲惨生活 浏览:207
什么找房app比较好用 浏览:202
手机视频剪辑压缩 浏览:320