C语言实现顺序栈,其中的数据元素是字符数组。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define SIZE 100
#define INCR 10
#define ERROR 0
#define OK 1
typedef int Status;
typedef struct {
char *top;
char *base;
int size;
}SqStack;
int main(){
Status InitStack(SqStack *);
Status Push(SqStack *,char *);
void StackTraverse(SqStack *);
Status Pop(SqStack *,char *);
Status GetTop(SqStack ,char *);
Status ClearStack(SqStack *);
Status DestroyStack(SqStack *);
Status StackEmpty(SqStack *);
int StackLength(SqStack *);
SqStack s,*ss=&s;
InitStack(ss);
char a[20]="你好",b[20]="再见",c[20]="C语言",d[20];
Push(ss,a);
Push(ss,b);
Push(ss,c);
printf("当前的栈长是:%d\n",StackLength(ss));
StackTraverse(ss);
Pop(ss,d);
printf("\n被弹出的数据是:%s\n",d);
printf("当前的栈长是:%d\n",StackLength(ss));
StackTraverse(ss);
GetTop(s,d);
printf("\n获取栈顶元素:%s\n",d);
printf("当前的栈长是:%d\n",StackLength(ss));
StackTraverse(ss);
return 0;
}
Status InitStack(SqStack *s){
s->base=(char *)malloc(SIZE*sizeof(char [20]));
if(!s->base){
return ERROR;
}
s->top=s->base;
s->size=SIZE;
return OK;
}
Status Push(SqStack *s,char *e){
if((s->top-s->base)/20>=s->size){
s->base=(char *)realloc(s->base,(s->size+INCR)*sizeof(char [20]));
if(!s->base){
return ERROR;
}
s->top=s->base+s->size;
s->size+=INCR;
}
strcpy(s->top,e);
s->top+=20;
return OK;
}
void StackTraverse(SqStack *s){
if(!s->base){
exit(1);
}
char *t=s->top-20;
while(t>=s->base){
printf("%s\t",t);
t-=20;
}
}
Status Pop(SqStack *s,char *e){
if(s->base==s->top){
return ERROR;
}
s->top-=20;
strcpy(e,s->top);
return OK;
}
Status GetTop(SqStack s,char *e){
if(s.top==s.base){
return ERROR;
}
char *t=s.top-20;
strcpy(e,t);
return OK;
}
Status ClearStack(SqStack *s){
s->top=s->base;
return OK;
}
Status DestroyStack(SqStack *s){
if(!s->base){
return ERROR;
}
free(s->base);
s->base=NULL;
return OK;
}
Status StackEmpty(SqStack *s){
if(s->base==s->top){
return 1;
}else{
return 0;
}
}
int StackLength(SqStack *s){
return (s->top-s->base)/20;
}
运行结果:
当前的栈长是:3
C语言 再见 你好
被弹出的数据是:C语言
当前的栈长是:2
再见 你好
获取栈顶元素:再见
当前的栈长是:2
再见 你好
--------------------------------
Process exited after 0.1175 seconds with return value 0
请按任意键继续. . .``