#include<stdio.h>
#include<malloc.h>
#define true 1
#define false 0
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define yes 1
#define no 0
typedef int ElemType;
typedef int Status;
typedef struct{
ElemType *base;
ElemType *top;
int StackSize;
}Stack;
int InitStack(Stack *S)
{
S->base = (ElemType*)malloc(STACK_INIT_SIZE*sizeof(ElemType));
if(!S->base)
return 0;
else{
S->top = S->base;
S->StackSize = STACK_INIT_SIZE;
}
return 1;
}
Status IsEmpty(Stack *S)
{
if(S->top == S->base)
return yes;
else
return no;
}
int PushStack(Stack *S,ElemType e)
{
if((S->top)-(S->base) == S->StackSize){ //栈满,增加空间
S->base = (ElemType*)realloc(S->base,(S->StackSize+STACKINCREMENT)*sizeof(ElemType));
if(S->base == NULL)
return false;
S->top = S->base + S->StackSize;
S->StackSize += STACKINCREMENT;
}
*(S->top)= e;
S->top = S->top+1;
return true;
}
int PopStack(Stack *S)
{
ElemType element;
if(IsEmpty(S))
return false;
else{
S->top = S->top-1;
element = *S->top;
}
return element;
}
int GetTop(Stack *S)
{
ElemType element;
if(IsEmpty(S))
return false;
else{
element = *(S->top-1);
}
return element;
}
int main()
{
Stack S;
printf("%d\n",InitStack(&S));
ElemType e = 5;
printf("%d\n",PushStack(&S,e));
printf("%d\n",GetTop(&S));
printf("%d\n",PopStack(&S));
}
数据结构-顺序栈
最新推荐文章于 2023-10-20 19:18:20 发布