堆栈就是先入后出的数据结构。
如果用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语言栈的问题帮忙解释下等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)