#include <iostream>
using namespace std;
//栈(受限线性表的一种,分为顺序栈和链栈,以及共享栈)
/*---------------顺序栈----------规定top为指向栈顶元素的指针----------------------*/
//顺序栈的定义(和顺序表的定义类似)
#define MaxSize 10 //定义栈中元素的最大个数
typedef struct{
int data[MaxSize]; //静态数组(!)存放栈中元素
int top; //栈顶指针,用于指向此时栈的栈顶元素,top记录的是数组的下标
}SqStack;
//初始化
void InitSqStack(SqStack &S){
S.top=-1; //初始化栈顶指针,此时还没有栈顶元素
}
//判断栈空
bool StackEmpty(SqStack S){
return (S.top==-1);
}
//Push进栈(增)
bool PushSq(SqStack &S, int x){
if(S.top==MaxSize-1)
return false; //栈满报错
S.top++; //指针先加一
S.data[S.top]=x;//新元素入栈
//或者两步合并为S.data[++S.top]=x;
return true;
}
//出栈Pop
bool PopSq(SqStack &S, int &x){
if(S.top==-1)
return false;//栈空,报错
x=S.data[S.top--]; //逻辑上删除了栈顶元素,但其值依然残留在该存储空间中
return true;
}
//读栈顶元素
bool GetTopSq(SqStack S,int &x){
if(S.top==-1)
return false;
x=S.data[S.top];
return true;
}
/*--------当规定top为指向下一个可以插入的位置时,情况有所不同!!!----------*/
/*---------共享栈-------------------------*/
//定义
typedef struct{
int data[MaxSize];
int top0;
int top1;
}ShStack;
//初始化
void InitShStack(ShStack &S){
S.top0=-1; //初始化栈顶指针
S.top1=MaxSize;
}
/*-----------------------------链栈----------(推荐不带头结点)-----------------------*/
//定义
typedef struct LinkNode{
int data; //数据域
struct LinkNode *next; //指针域
}LinkNode,*LinkStack; //栈类型定义
//初始化(创)
void InitLStack(LinkStack &S){
S=NULL;
}
//Push(进栈)
bool PushL(LinkStack &S, int x){
LinkNode *s=(LinkNode *)malloc(sizeof(LinkNode));
if(s==NULL)
return false;//分配空间失败
s->data=x;
s->next=S;
S=s;
return true;
}
//Pop(出栈)
bool PopL(LinkStack &S, int &x){
LinkNode *p=S;
x=p->data;
S=p->next;
free(p);
return true;
}
//获取栈顶元素
bool GetTopL(LinkStack S, int &x){
if(S==NULL)
return false; //栈为空,无栈顶元素
x=S->data;
return true;
}
//判空
bool EmptyL(LinkStack S){
return (S==NULL);
}
//判满(链栈没有“满”)
int main()
{
return 0;
}
数据结构_栈_基本操作的c++实现
最新推荐文章于 2022-05-12 21:15:20 发布