/*
栈的顺序存储和链栈
//@hey超级巨星
*/
#include<stdio.h>
#include<stdlib.h>
typedef int Elemtype;
typedef int Status;
#define OK 1;
#define ERROR 0;
#define STACK_SIZE 10
#define STACKINCREASE 10
typedef struct
{
Elemtype* base;
Elemtype* top;
int stacksize;
}SqStack;
Status InitStack(SqStack& s)
{
s.base = (Elemtype*)malloc(sizeof(Elemtype)*STACK_SIZE);
if (!s.base)
exit(0);
s.top = s.base;
s.stacksize = STACK_SIZE;
return OK;
}
//压栈
Status Push(SqStack& S,Elemtype e)
{
if (S.top - S.base >= STACK_SIZE)
{
S.base = (Elemtype*)realloc(S.base, S.stacksize+sizeof(Elemtype) * STACKINCREASE);
if (!S.base)
exit(0);
}
*S.top = e;
S.top++;
return OK;
}
Status Pop(SqStack& S, Elemtype& e)
{
if (S.top == S.base)
{
printf("此栈为空");
return ERROR;
}
S.top--;
e = *S.top;
return e;
}
/*
链栈
@hey超级巨星
*/
typedef struct StackNode
{
Elemtype data;
struct StackNode* next;
}StackNode,*LinkStackNode;
typedef struct LinkStack
{
LinkStackNode top;
int count;
}LinkStack,*PLinkStack;
//初始化
Status InitStack(PLinkStack &S)
{
S = (PLinkStack)malloc(sizeof(LinkStack));
S->top = NULL;
S->count = 0;
return OK;
}
//压栈
Status Push(PLinkStack &S,Elemtype e)
{
if (!S)
exit(0);
LinkStackNode p = (LinkStackNode)malloc(sizeof(StackNode));
p->data = e;
p->next = S->top;
S->top = p;
S->count++;
return OK;
}
//弹栈
Status Pop(PLinkStack& S, Elemtype& e)
{
if (!S->top)
exit(0);
LinkStackNode p;
p = S->top;
e = S->top->data;
S->top = S->top->next;
free(p);
S->count--;
return OK;
}
C语言数据结构栈的顺序存储与链式存储的基本函数
最新推荐文章于 2023-03-13 22:27:29 发布