急!用C语言编写个使用栈的程序,简单点的,包含入栈,出栈等几个基本操作就行。
答案:2 悬赏:0 手机版
解决时间 2021-02-12 18:29
- 提问者网友:我的未来我做主
- 2021-02-12 13:21
急!用C语言编写个使用栈的程序,简单点的,包含入栈,出栈等几个基本操作就行。
最佳答案
- 五星知识达人网友:廢物販賣機
- 2021-02-12 13:27
就用这堆函数就可以了,不懂再追问
#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");
}
}
#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[ 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");
}
}
全部回答
- 1楼网友:十鸦
- 2021-02-12 13:36
闲得没事干,跟你详细讲讲吧。
首先要弄明白一点,栈的结构是“先进后出“的,就像你堆积木一样,第一根放在最底层的地面上,然后一根一根往上堆。前一个放上去的总是被后一个放上去的压在底下。那我当我再想里面放一根的时候,总不能放中间或者放底下吧(除非你很无聊很寂寞闲的蛋疼了先一根根把堆在上面的全部拿出来然后把要放进去的那根放上去最后又把刚才搬下来的有重新搬上去......此处省去几万字)所以要往上面加东西的时候,就得放在最上面。
以上就是进栈的原理,怎么出栈呢,很简单,直接从”积木"的最顶端取下来就行了。
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
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯