永发信息网

急!用C语言编写个使用栈的程序,简单点的,包含入栈,出栈等几个基本操作就行。

答案:2  悬赏:0  手机版
解决时间 2021-02-12 18:29
急!用C语言编写个使用栈的程序,简单点的,包含入栈,出栈等几个基本操作就行。
最佳答案
就用这堆函数就可以了,不懂再追问
#include

#define MaxSize 100
int mystack[MaxSize];


void init_stack(int* stack){
memset(stack,0,sizeof(stack));
}


void push_back(int* stack,int& num){
if(stack[0] ++stack[0];
stack[ stack[0] ] = num;
}
else{
printf("ERORR!\n");
}
}


int size(int* stack){
return stack[0];
}


int top(int* stack){
if(stack[0]>0){
return stack[ stack[0] ];
}
else{
printf("ERORR!\n");
return -1;
}
}


void pop(int* stack){
if(stack[0]>0){
--stack[0];
}
else{
printf("ERORR!\n");
}
}
全部回答
闲得没事干,跟你详细讲讲吧。 首先要弄明白一点,栈的结构是“先进后出“的,就像你堆积木一样,第一根放在最底层的地面上,然后一根一根往上堆。前一个放上去的总是被后一个放上去的压在底下。那我当我再想里面放一根的时候,总不能放中间或者放底下吧(除非你很无聊很寂寞闲的蛋疼了先一根根把堆在上面的全部拿出来然后把要放进去的那根放上去最后又把刚才搬下来的有重新搬上去......此处省去几万字)所以要往上面加东西的时候,就得放在最上面。 以上就是进栈的原理,怎么出栈呢,很简单,直接从”积木"的最顶端取下来就行了。 ok,以上比喻完了,希望你能看得明白。接下来讲程序不说积木了:),由上面的分析我们可以知道一个道理,对于栈的操作,栈顶的元素很重要(也就是积木最上面的那根)。为什么呢。无论是出栈还是进栈,都跟那哥们有直接的联系。你想啊,如果要是有元素要进栈的话,那么它就不能当“老顶”了,那老顶之位就要交给压在它上头那位了;如果出栈呢,它也不能当老顶了,老顶之位就要交到原来压在它底下的那个。 ok,所以一般的栈都将栈顶的那个元素所在的位置(内存地址--数组类型的,或者指针---节点类型的)视为栈的栈顶~!通过它来对栈进出进行操作。 一般来说(或者在我出生以来看到过的)栈有两种内存结构(注意是是内存结构,有的书说是存储结构,都一样一样滴),一种是连续的,一种是不连续的,连续的基本上就是数组了,不连续的基本上就是链表类型的啦。你上面的程序就是链表类型的,每个节点都有个指针指向它“底下”的节点(我觉得“底下”比下一个更容易理解)。通过这种你链我我链它的方式,把一组数据连在一起。 进栈: intpush(stack*s,inte)//进栈 { snode*p;//step1:这个编程习惯不好,没定义一个指针就应该把它指向null p=(snode*)malloc(sizeof(snode));//step2:为你的节点分配内存 if(!p) returnerror; p->data=e;//step3:当然了,你那个传进来的e是相当于temp,用来传值的,ok,那就把它的数据给p咯,p实际指向的是一块内存块,用来装节点的 p->next=s->top;//step4:回到上面积木问题,进栈的时候,原来的老顶要给新来的让位,但是如果这时候的top节点直接赋给新来的元素的话,那么那个原来的老顶是不是从此以后都找不到它了?所以,先把新来的元素的next指针指向当前的老顶,这样的话,以后通过next指针就可以找到它了。 s->top=p;//当然,都已经处理好以前老顶的身后事了(就是以后可以通过p的next指针找到它了)那么“让位”就可以进行了,这时,p便戴上了老顶之帽了 s->length++;//既然人数都增加了,那就到公安局登记入户口吧 returnok;//一切over,现在这个栈stack的栈顶位置就是你刚才新加进来的p了,通过stock.top指针就可以访问到栈顶,然后出栈也是同理的,ok,allover }
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
岳麓区长沙高新区中心幼儿园金南园地址是什么
请问那种将铁、铝等金属融化,然后铸造成型的
金粮小区在哪里啊,我有事要去这个地方
求 V带轮的cad图纸 大小带轮的 谢谢了
深圳市宝安区松岗镇劳动仲裁申请支付没签劳动
各位车友你们好,我有一个面包车6年了,现在就
中国农业银行(矿中心路)怎么去啊,我要去那办
常州市塑料加工厂在什么地方啊,我要过去处理
三字经全文为学篇起止点
佛山和青岛,哪个适合发展?
哈尔滨银行atm(五九七农场场部中心路与双柳河
吐乌大高速公路/柴窝堡立交桥(路口)怎么去啊
springmvc+cxf _wadl 如何调用
蝙蝠侠光秒抢怎么回事
泰鑫达汽车维修服务中心地址有知道的么?有点
推荐资讯
从云南到西藏要多长时间!
大雁一般是什么颜色的?
柴火小院在什么地方啊,我要过去处理事情
传奇霸业2017年3.16号更新内容
白色车被蹭出黑色底漆,这个问题有什么好的解
上海高考翻译介词错了扣几分?比如be delayed
158÷5=几
郁青《人证》阅读的答案
服装配色以()为基本准则。
某学生欲称取4.3g氯化钠,他在左盘放了4g砝码
编制费用计划的成果是()。A.项目费用估算表
在月球上看到的地球是哪一面?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?