用C语言实现顺序栈
#include<stdio.h>
#include<stdlib.h>
#define ERROR 0
#define OK 1
typedef int Status;
typedef struct {
int *base;
int *top;
int size;
}SqStack;
int main(){
Status InitStack(SqStack *);
Status Push(SqStack *,int );
Status GetTop(SqStack ,int *);
Status Pop(SqStack *,int *);
int StackLength(SqStack *);
Status DestroyStack(SqStack *);
Status ClearStack(SqStack *);
Status StackEmpty(SqStack *);
void StackTraverse(SqStack *);
SqStack s,*ss=&s;
if(InitStack(ss)){
printf("栈初始化成功\n");
}
if(Push(ss,9)){
printf("入栈成功\n");
}
Push(ss,8);
Push(ss,7);
printf("当前栈长:%d\n",StackLength(ss));
printf("遍历栈:");
StackTraverse(ss);
int k,*kp=&k;
if(Pop(ss,kp)){
printf("\n弹栈成功:");
}
printf("被弹出的元素是:%d\n",k);
printf("当前栈长:%d\n",StackLength(ss));
int t,*tp=&t;
GetTop(s,tp);
printf("当前栈顶元素是:%d\n",t);
printf("遍历栈:");
StackTraverse(ss);
return 0;
}
Status InitStack(SqStack *s){
s->base=(int *)malloc(100*sizeof(int));
if(!s->base){
return ERROR;
}
s->top=s->base;
s->size=100;
return OK;
}
Status Push(SqStack *s,int e){
if(s->top-s->base>=s->size){
s->base=(int *)realloc(s->base,(100+10)*sizeof(int));
if(!s->base){
exit(1);
}
s->top=s->base+s->size;
s->size+=10;
}
*s->top=e;
s->top++;
return OK;
}
Status GetTop(SqStack s,int *e){
if(s.base==s.top){
return ERROR;
}
*e=*(s.top-1);
return OK;
}
Status Pop(SqStack *s,int *e){
if(s->top==s->base){
return ERROR;
}
*e=*(--s->top);
return OK;
}
int StackLength(SqStack *s){
return (s->top-s->base);
}
Status DestroyStack(SqStack *s){
if(!s->base){
exit(1);
}
free(s->base);
s->base=NULL;
return OK;
}
Status ClearStack(SqStack *s){
s->top=s->base;
return OK;
}
Status StackEmpty(SqStack *s){
if(s->base==s->top){
return 1;
}else{
return 0;
}
}
void StackTraverse(SqStack *s){
if(!s->base){
exit(1);
}
int *t=s->top-1;
while(t>=s->base){
printf("%d\t",*t);
t--;
}
}
运行结果:
栈初始化成功
入栈成功
当前栈长:3
遍历栈:7 8 9
弹栈成功:被弹出的元素是:7
当前栈长:2
当前栈顶元素是:8
遍历栈:8 9
--------------------------------
Process exited after 0.02201 seconds with return value 0
请按任意键继续. . .