c 数据结构栈

#include<stdio.h>
#include<stdlib.h>
#include<math.h>

#define Max 50
#define Maxjia 10

typedef char ElemType;
typedef struct node
{
ElemType *top;
ElemType *base;
int stackMax;

}sqStack;

//清空一个栈
ClearStack(sqStack *s)
{
s->top=s->base;
}

//栈的长度
int StackLen(sqStack s)
{
return (s.top - s.base);
}

//栈的初始化
void InitStack(sqStack *s)
{
s->base=(ElemType *)malloc(Max *sizeof(ElemType));
if( !s->base)
{
exit(0);
}
s->top=s->base;
s->stackMax=Max;
}

//入栈
void Push(sqStack *s, ElemType e)
{
if(s->top-s->base>=s->stackMax){
s->base=(ElemType *)realloc(s->base,(s->stackMax+Maxjia)*sizeof(ElemType));
if(!s->base)
{
exit(0);
}
}

*(s->top)=e;
s->top++;
}
//出栈
void pop (sqStack *s,ElemType *e)
{
if(s->top=s->base)return;
*e=*--(s->top);
}

int main()
{
ElemType c;
sqStack s;
int len,i=1;
InitStack(&s);
printf("---------------------\n");
printf("1:将一个数据放入栈\n");
printf("2:取出一个栈顶的数\n");
printf("3:看一下目前栈的数\n");
printf("4:清空栈内的数\n");
printf("5:结束\n");
printf("----------------------\n");
while(i)
{
int j;
scanf("%d",&j);
switch(j)
{
case 1:printf("请输入一个数:\n"); scanf("%c",&c);printf("输入完成\n");Push(&s,c);break;
case 2:pop (&s,&c);printf("%c",c);
case 3:printf("栈内的数据量为:%d",len=StackLen(s));break;
case 4:ClearStack(&s);printf("清空完毕!");break;
case 5:i=0;break;
}
}
}

猜你喜欢

转载自www.cnblogs.com/3w1z3/p/10907914.html