那位大神能讲下C语言中栈的使用啊

那位大神能讲下C语言中栈的使用啊,第1张

堆栈就是先入后出的数据结构。

如果用c语言来实现的话用个struct

先定义一个栈的节点

struct

node;

typedef

strcut

node

position;

typedef

position

stack;

stack

creat();

void

push(int,stack);

int

pop(stack);

int

top();

struct

node

{

int

element;

position

next;

}

stack

creat()

{

stack

s;

s=malloc(sizeof(struct

node));

s->next==NULL;

}

void

push(int

a,stack

s)

{

position

temp;

temp=malloc(sizeof(struct

node));

temp->element=a;

temp->next=s->next;:

s->next=temp;

}

int

pop(stack

s)

{

int

res=s->next->element;

position

temp=s->next;

s->next=temp->next;

free

temp;

}

int

top(stack

s)

{

return

s->next->element;

}

好啦,先creat()一个栈,再进行push

pop等。程序中忽略了麻烦的错误检测给出了重点,当然还可以添加其他 *** 作。。对了,头文件也要加上。本人还是习惯用c++弄成一个类^_^

栈是用来保存数据的,数据形式是先压栈的最后出,最后压栈的最先出栈,就像米缸一样,你先放进去的要最后才能吃,反而最后放进米缸的最先出一样。

很多人把堆和栈搞混淆,其实堆是堆,栈是栈,你要煮东西就要壹个锅,而这锅里你可以煮菜饭,或者炒菜一样,你可以把米和菜一起放进去煮,这个锅就是你申请的堆,而煮只是你的代码,要执行的功能,执行完了你就把锅给盖上你开了锅盖,用完了就要你自己去盖上。

栈就是米缸,只能放米(保存数据);堆是锅,是你自己向系统申请的空间,用完了要你自己释放。

#include <stdioh>

#include <stdlibh>

#define StackInitSize 100

typedef struct

{ int data[StackInitSize];

int top;

} SeqStack;  //定义一个栈类型 

SeqStack InitStack()  //初始化一个栈 

{ SeqStack s;

s=(SeqStack )malloc(sizeof(SeqStack));

if(s!=NULL)

{ s->top=-1;

return s;

}

else

{ printf("没空间\n");

exit(0);

}

}

int isempty(SeqStack s)  //判断是否为空栈 

{ return (s->top==-1)1:0;

}

void push(SeqStack s,int x)  //进栈 

{ if(s->top==StackInitSize)

{ printf("栈满了");

exit(0);

}

else

{ s->top++;

s->data[s->top]=x;

}

return;

}

/void push1(SeqStack s,char x)   这段进栈的程序不要,栈的数据域类型为int 

{ if(s->top==StackInitSize)

{ printf("栈满了");

exit(0);

}

else

{ s->top++;

s->data[s->top]=x;

}

return;

}/

int pop(SeqStack s)   //出栈 

{ int temp;

if(isempty(s))

{ printf("kong");

exit(0);

}

else

{ temp=s->data[s->top];

s->top--;

return temp;

}

}

void conversion(int N,int r)  //进制转化 

{ SeqStack s;

int x;

char c;

s=InitStack();

while(N!=0)

{ push(s,N%r);

N=N/r;

}

while(!isempty(s))

{ x=pop(s);

if (x<10)

printf("%d",x);

else

printf("%x",x);

}

printf("\n");

}

int main()

{ int X,r;

printf("输入十进制的整数:");

scanf("%d",&X);

while(X!=0)

{ printf("输入转换进制数:");

scanf("%d",&r);

printf("结果是:");

conversion(X,r);

printf("输入十进制的数:");

scanf("%d",&X);

}

}

push是压入堆栈

pop 是从堆栈中d出数据到寄存器

mov是转移命令

cmp test是比较命令,影响标志位寄存器

jmp是无条件跳转

jnz是不相等跳转

以上就是关于那位大神能讲下C语言中栈的使用啊全部的内容,包括:那位大神能讲下C语言中栈的使用啊、c语言中栈的定义、C语言栈的问题帮忙解释下等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://www.outofmemory.cn/zz/9461402.html

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

发表评论

登录后才能评论

评论列表(0条)

保存