#include <iostream>
#define MaxSize 10
/*栈(顺序存储)*/
typedef struct{
int data[MaxSize];
int top; //top所指的位置是栈顶
}SqStack;
//栈的初始化(栈顶指在-1处,因为空栈)
void InitStack(SqStack &S){
S.top=-1;
}
bool StackEmpty(SqStack S){
if(S.top==-1)
return true;
else
return false;
}
//新元素进栈
bool Push(SqStack &S,int x){
if(S.top==MaxSize-1)
return false; //栈满了
S.top=S.top+1;
S.data[S.top]=x; //或者写成"S.data[++S.top]=x"
return true;
}
//出栈
bool Pop(SqStack &S,int &x){
if(S.top==-1)
return false; //空栈无法出栈
x=S.data[S.top]; //带回要出的栈顶元素;也能写作"x=S.data[S.top--];
S.top=S.top-1; //逻辑上删除,被删除数据依然残留在内存中
return true;
}
//读取栈顶元素
bool GetTop(SqStack S,int &x){
if(S.top==-1)
return false; //空栈
x=S.data[S.top];
return true;
}
/*以上代码表示top指针指向栈顶元素所在位置,下面介绍top指针指向栈顶元素上方的位置*/
//初始化2//
void InitStack2(SqStack &S){
S.top=0;
}
//进栈+出栈2//
bool Push2(SqStack &S,int x){
if(S.top==MaxSize)
return false;
S.data[S.top++]=x; //进
x=S.data[--S.top]; //出
}
//共享栈(两个栈共享空间)
//共享栈定义,有两个栈顶指针
typedef struct{
int data[MaxSize];
int top0;
int top1;
}ShStack;
//共享栈初始化
void InitShStack(ShStack &S){
S.top0=-1; //从下往上放入
S.top1=MaxSize; //从上往下放入
}
//共享栈判满
bool EmpShStack(ShStack &S){
if(S.top0+1==S.top1)
return true;
else
return false;
}
//测试
void testStack(){
SqStack S;
InitStack(S);
}
/****注意!!由于没有使用malloc函数分配内存,在函数结束后栈的内存会被系统自动回收***/
/*栈(链式存储),也就是单链表在头结点一端插入、删除,链头=栈顶*/
/*包括带头结点和不带头结点,其他操作只能在表头执行,推荐不带头结点*/
int main(int argc, char** argv) {
return 0;
}
【数据结构笔记】线性表-栈
最新推荐文章于 2024-08-08 17:05:23 发布