#include "stdlib.h"
#include<iostream>
#define MAXSIZE 100
#define OK 1
#define OVERFLOW -2
#define ERROR -1
using namespace std;
typedef int SElemType;
//顺序表
typedef int Status;
typedef struct {
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
//XXX-XX:top一般指向栈顶元素的下一个
//当然,指针也可以做相加减的操作
Status InitStack(SqStack &S){
S.base = (SElemType *) malloc(MAXSIZE*sizeof(SElemType));
if(!S.base) exit(OVERFLOW);
S.top = S.base;
S.stacksize = MAXSIZE;
return OK;
}
Status StackEmpty(SqStack S)
{
if(S.top == S.base) return 1;
else return 0;
}
Status StackLength(SqStack S){
return S.top - S.base;
}
Status ClearStack(SqStack S){
if(S.base) S.top = S.base;
return OK;
}
Status DestroyStack(SqStack &S){
if(S.base){
delete S.base;
S.stacksize = 0;
S.base = S.top = nullptr;
}
return OK;
}
/**************************************************/
//入栈
Status Push(SqStack &S, SElemType e){
if(S.top - S.base == S.stacksize) return ERROR;
*S.top ++ = e;
return OK;
}
//出栈
Status Pop(SqStack &S, SElemType &e){
if(S.top == S.base) // StackEmpty(S)
return ERROR;
e = *--S.top;
return OK;
}
/***********************************/
//链栈
//只在链表头部进行操作
typedef struct StackNode{
SElemType data;
struct StackNode *next;
}StackNode, *LinkStack;
//LinkStack S;
Status InitStack(LinkStack &S){
S = nullptr;
return OK;
}
Status StackEmpty_L(LinkStack S){
if(S == NULL) return 1;//相当于S是头指针
else return 0;
}
Status Push(LinkStack &S, SElemType e){
StackNode *p = new StackNode;
p -> data = e;//新节点数据是e
p -> next = S;//将新节点插入栈顶
S = p;//修改栈顶的指针
return OK;
}
Status Pop(LinkStack &S, SElemType &e){
if(S == nullptr) return ERROR;
e = S -> data;
StackNode *p;
p = S;
S = S -> next;
delete p;
return OK;
}
SElemType GetTop(LinkStack &S){
if(S != nullptr) return S -> data;
}
//栈与递归
数据结构——栈操作
最新推荐文章于 2024-09-09 22:12:12 发布