顺序栈的源文件(个人学习记录)
#include"stdio.h"
#include"stdlib.h"
#include"malloc.h"
typedef int Elemtype;
#define STACK_INIT_SIZE 20
#define STACKINCREAMENT 10
typedef struct
{
Elemtype *top;
Elemtype *base;
int stacksize;
} sqstack;
void Initstack(sqstack *s)
{
s->base=(Elemtype*)malloc(STACK_INIT_SIZE*sizeof(Elemtype));
if(!s->base)
{
printf("创建失败!\n");
return;
}
s->top=s->base;
s->stacksize=STACK_INIT_SIZE;
printf("顺序栈创建成功!\n");
}
void Push(sqstack *s,int e)
{
if(s->top - s->base>=s->stacksize)
{
s->base = (Elemtype *)realloc(s->base,(s->stacksize + STACKINCREAMENT) * sizeof(Elemtype));
if(!s->base)
{
exit(0);
}
}
*(s->top)=e;
s->top++;
}
void Pop(sqstack *s,int *e)
{
if(s->base==s->top)
{
return;
}
*e=*--(s->top);
}
int Stacklen(sqstack *s)
{
return(s->top - s->base);
}
void Destroystack(sqstack *s)
{
s->top = NULL;
s->stacksize = 0;
free(s->base);
}
void Clearstack(sqstack *s)
{
s->base = s->top;
}
// int main()
// {
// int n=0,t=0,num=0,temp=0;
// sqstack s;
// Initstack(&s);
// printf("***********\n");
// printf("1.创建栈!\n");
// printf("2.压栈!\n");
// printf("3.出栈!\n");
// printf("4.销毁栈!\n");
// printf("5.清除栈!\n");
// printf("0.退出!\n");
// printf("***********\n");
// while(1)
// {
// printf("选择你的操作:\n");
// scanf("%d",&n);
// switch(n)
// {
// case 1:
// {
// Initstack(&s);
// break;
// }
// case 2:
// {
// if(s.top==NULL)
// {
// printf("此栈不存在!\n");
// }
// else
// {
// printf("输入要压栈的个数:\n");
// scanf("%d",&t);
// for(int i=0;i<t;i++)
// {
// int o=0;
// printf("输入你的数据:\n");
// scanf("%d",&o);
// Push(&s,o);
// }
// printf("压栈完成!\n");
// }
// break;
// }
// case 3:
// {
// if(s.base!=s.top)
// {
// printf("输入你尝试出栈的数据个数:\n");
// scanf("%d",&num);
// if(num==1)
// {
// Pop(&s,&temp);
// printf("出栈元素为:");
// printf("%3d\n",temp);
// }
// else if(num>1)
// {
// printf("出栈元素为:");
// for(int i = 0;i<num;i++)
// {
// Pop(&s,&temp);
// printf("%3d",temp);
// }
// printf("\n");
// }
// }
// else
// {
// printf("此栈已经为空!\n");
// }
// break;
// }
// case 4:
// {
// Destroystack(&s);
// printf("此栈已被销毁!\n");
// break;
// }
// case 5:
// {
// Clearstack(&s);
// printf("此栈已被清除!\n");
// break;
// }
// case 0:
// {
// exit(0);
// }
// }
// }
// return 0;
// }