#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef int Status;
typedef int SElemType;
typedef struct node{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
Status InitStack(SqStack &S){ //初始化栈
S.base = (SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType));
if(!S.base) exit(OVERFLOW);
S.top = S.base;
S.stacksize = STACK_INIT_SIZE;
return OK;
}
Status StackEmpty(SqStack &S){ //判断栈是否为空
if(S.top == S.base)
return TRUE;
else return FALSE;
}
Status GetTop(SqStack &S,SElemType &e){ //获得栈顶元素
if(S.top == S.base) return ERROR;
e = *(S.top - 1);
return OK;
}
Status Push(SqStack &S,SElemType e){ //元素入栈
if(S.top - S.base >= S.stacksize){
S.base = (SElemType *)realloc(S.base,(S.stacksize + STACKINCREMENT) * sizeof(SElemType));
if(!S.base) exit(OVERFLOW);
S.stacksize += STACKINCREMENT;
}
*S.top++ = e;
return OK;
}
Status Pop(SqStack &S,SElemType &e){ /栈顶元素弹出
if(S.top == S.base) return ERROR;
e = *(--S.top);
return OK;
}
Status StackTraverse(SqStack &S){ //遍历栈
SElemType *p;
if(S.top == S.base) return ERROR;
p = S.top -1;
while(p != S.base -1){
printf("%d ",*p);
p--;
}
return OK;
}
int main(){
SqStack S;
printf("创建一个空栈!!!\n");
InitStack(S);
printf("判断栈是否为空:\n");
if(StackEmpty(S)) printf("栈为空!!!\n");
else printf("栈不为空!!!\n");
int n,x;
printf("创建栈的元素个数为:");
scanf("%d",&n);
printf("元素为%d个!!!\n",n);
for(int i=0;i<n;i++){
scanf("%d",&x);
Push(S,x);
}
printf("遍历栈:\n");
StackTraverse(S);
printf("\n");
}
栈的实现(c语言)
最新推荐文章于 2022-11-27 10:00:00 发布