1.栈是先入后出的数据结构,它的实现可以用数组或者栈顶指针表示,用数组时,可以为栈预分配一定的大小,栈为空时,下标值为top为-1,每增加一个元素,下标值加1,出栈时,弹出一个元素,下标值减1,判断栈是否为空可以用下标值top是否为-1。
# include <stdio.h>
# include <stdlib.h>
int stack[100]={};
int top=-1;
int size=100;
int main()
{
void push(int a[],int);
int pop(int a[]);
int isempty(int a[]);
push(stack,1);
push(stack,2);
push(stack,3);
printf("%d\n",isempty(stack));
printf("%d\n",pop(stack));
printf("%d\n",pop(stack));
system("pause");
return 0;
}
void push(int a[],int x)
{
if(top>=size)
printf("out of range");
else
top++;
stack[top]=x;
}
int pop(int a[])
{
if (top==-1){
printf("stack is empty");
exit(-1);
}
return a[top--];
}
int isempty(int a[])
{
return top==-1;
}
2.栈也可以用指针来实现,定义结构体表示一个节点,每个节点包含两个元素,一个是节点的数据值,另外一个是前驱指针。栈的入栈操作示意图为
# include <stdio.h>
# include <stdlib.h>
struct node
{
int num;
struct node *next;
};
typedef struct node *link;
int main()
{
link stack=NULL;
link push(link,int);
int pop(link);
int isempty(link);
link s=push(stack,1);
s=push(s,2);
s=push(s,3);
printf("%d\n",pop(s));
printf("%d\n",isempty(s));
system("pause");
return 0;
}
link push(link stack,int x)
{
link newele=(link)malloc(sizeof(node));
if(!newele)
exit(-1);
newele->next=stack;
newele->num=x;
stack=newele;
return stack;
}
int pop(link stack)
{
if(!stack)
return -1;
int t;
link temp=stack;
stack=stack->next;
t=temp->num;
free(temp);
return t;
}
int isempty(link stack)
{
return stack==NULL;
}
3栈的应用
栈可以用于把十进制数转换为其它进制,如将十进制转换为8进制,N=(N/8)*8+N%8,将N除以8取商,最后将商值反过来写,即得到对应的八进制数,这刚好和栈的性质类似,下面用数组实现一个栈,并用此栈实现进制数转换。
# include <stdio.h>
# include <stdlib.h>
int stack[100]={};
int top=-1;
int size=100;
int main()
{ int t;
void push(int a[],int);
int pop(int a[]);
int isempty(int a[]);
printf("input the decimal number\n");
scanf("%d",&t);
if(t>0){
while(t)
{
push(stack,t%8);
t=t/8;
}
while(!isempty(stack))
{
printf("%d",pop(stack));
}
}
else
{
t=-t;
while(t)
{
push(stack,t%8);
t=t/8;
}
printf("-");
while(!isempty(stack))
{
printf("%d",pop(stack));
}
}
printf("\n");
system("pause");
return 0;
}
void push(int a[],int x)
{
if(top>=size)
printf("out of range");
else
top++;
stack[top]=x;
}
int pop(int a[])
{
if (top==-1){
printf("stack is empty");
exit(-1);
}
return a[top--];
}
int isempty(int a[])
{
return top==-1;
}
原文:http://blog.csdn.net/u011608357/article/details/18980659