栈的基本操作(C语言)
#include <stdio.h>
#include <stdlib.h>
typedef struct SqStack{
int *base;
int *top;
int stacksize;
} SqStack;
int InitStack(SqStack *s){
s->base=(int *)malloc(10*sizeof(int));
if(!s->base){
exit(-1);
}
s->top=s->base;
s->stacksize=10;
return 1;
}
int GetTop(SqStack *s,int *e){
if(s->top==s->base){
return -1;
}
*e=*(s->top-1);
return 1;
}
int Push(SqStack *s,int e){
if(s->top-s->base==s->stacksize){
s->base=(int *)realloc(s->base,(s->stacksize+10)*sizeof(int));
if(!s->base){
exit(-1);
}
s->base=&s->stacksize;
s->top=&s->stacksize;
s->stacksize+=10;
}
*s->top++=e;
return 1;
}
int Pop(SqStack *s,int *e){
if(s->top==s->base){
return -1;
}
--s->top;
*e=*s->top;
return 1;
}
int StackLength(SqStack *s){
return s->top-s->base;
}
int main(){
int i,v;
SqStack s;
InitStack(&s);
printf("请输入初始入栈的个数 :");
scanf("%d",&i);
while(i--){
printf("入栈数据");
scanf("%d",&v);
if(!Push(&s,v)){
printf("入栈失败 !");
}
}
printf("栈的长度为 :%d\n",StackLength(&s));
printf("栈的容量为 :%d\n",s.stacksize);
while(StackLength(&s)){
if(Pop(&s,&v)){
printf("出栈数据:%d\n",v);
}else{
printf("出栈失败\n");
}
}
system("pause");
return 0;
}