本篇主要介绍的是在数据结构中对栈的基本操作,以及算法实现的过程。
希望可以帮助到你们。
#include<stdio.h>
#include<stdlib.h>
#define STACK_INITSIZE 10
#define STACK_INCREAMENT 2
typedef struct
{
int *elem;
int top;
int stacksize;
}Seqstack;
int Initstack(Seqstack *S)//初始化操作
{
S->elem=(int *)malloc(sizeof(int)*STACK_INITSIZE);
if(!(S->elem))
return 0;
S->stacksize=STACK_INITSIZE;
S->top=0;
return 1;
}
int Push(Seqstack *S,int e)//入栈操作
{
int *newbase,newspacesize;
if(S->top>=S->stacksize-1)
{
newspacesize=(S->stacksize+STACK_INCREAMENT)*sizeof(int);
newbase=(int *)realloc(S->elem,newspacesize);
if(!newbase)
return 0;
S->elem=newbase;
S->stacksize+=STACK_INCREAMENT;
}
S->elem[S->top]=e;
S->top++;
return 1;
}
int Gettop(Seqstack *S,int *e)//取栈顶元素
{
if((S->top)<=0)
return 0;
*e=(*S).elem[S->top-1];
return *e;
}
void Printstack(Seqstack *S)// 输出栈
{
int p;
p=S->top-1;//[]加上就变成下标
while(p>=0)
{
printf("%d\t",S->elem[p]);
p--;
}
}
int Stackdepth(Seqstack *S)//求栈的深度
{
return S->top;
}
int Pop(Seqstack *S,int *e)//出栈操作
{
if(S->top<=0)
return 0;
*e=S->elem[S->top-1];
S->top--;
return *e;
}
int Stackempty(Seqstack *S)//判断栈是否为空
{
if(S->top<=0)
return 0;
else
return 1;
}
int Clearstack(Seqstack *S)//清空栈
{
S->top=0;
return 1;
}
int main()
{
int e,m,n;
int f,i,elem;
int a[12]={12,23,34,2,33,21,1,22,45,56,6,7};
Seqstack S;
Initstack(&S);
for(i=0;i<12;i++)
{
e=Push(&S,a[i]);
}
Printstack(&S);
printf("\n");
/*m=Pop(&S,&e);//取一个栈里面的元素
if(m==0)
printf("error\n");
else
printf("enter %d\n",Pop(&S,&e));
printf("\n");*/
elem=Stackempty(&S);
if(elem==0)
printf("error\n");
n=Stackdepth(&S);
printf("n=%d\n",n);
/*for(i=1;i<=n;i++)//循环输出栈里面的元素
{
m=Pop(&S,&e);
printf("enter %d\n",e);
}*/
m=Pop(&S,&e);
while(m!=0)
{
printf("enter %d\n",e);
m=Pop(&S,&e);
}
printf("\n");
f=Gettop(&S,&e);
if(f==0)
printf("error\n");
else
printf("f=%d\n",f);
printf("\n");
Clearstack(&S);
return 0;
}