目录
-
堆栈的主要操作
-
定义堆栈、入栈push、出栈pop
-
判断是否为空isEmpty、已满isFull
1.栈的概念
-
栈(Stack):是操作受限的线性表,插入和删除数据元素只能在线性表的一端进行。
- 后进先出LIFO
2.顺序栈—栈的顺序存储结构
-
进栈:top+1
-
出栈:top-1
-
栈空:top=-1
-
栈满:top=MAX_SIZE-1
2.1栈的上溢和下溢
上溢的判断
-
当top=MAX_SIZE-1时,栈满—>还有元素进栈,则栈会溢出
下溢的判断
-
当top=-1,空栈—>再将栈顶元素弹出,下溢
3.栈类的定义
-
以存储字符型数据为例:
1.C++
const int MAX_SIZE=100; //定义栈最大值常量
class Stack{
private:
char *data; //属性:线性表
int size; //栈的实际大小
int top; //栈顶
public:
Stack(); //构造函数
Stack(int a); //有参构造
~Stack(); // 析构函数
void push(char ch); //入栈
char pop(); //出栈并返回栈顶元素
char getTop(); //获得栈顶元素(不出栈)
bool isEmpty(); //判断是否为空
bool isFull(); //判断是否满
void setNull(); //设置栈为空
};
构造函数
Stack::Stack(){
size = MAX_SIZE;
top = -1;
data = new char[MAX_SIZE];
/*缺省构造函数分配最大内存空间*/
}
Stack::Stack(int s){
size = s;
top = -1;
data new char[size];
/*根据指定大小分配分配栈的内存空间*/
}
Stack::~Stack(){
delete [] data;
/*内存回收*/
}
2.C
#define MAX_SIZE 1000 //定义栈最大值常量
typedef struct Stack{
char *data; //线性表
int size;
int top;
};
void initStack(Stack &s); // 初始化
void distoryStack(Stack &s); // 销毁栈
void push(Stack s,char ch); //入栈
char pop(Stack s); //出栈并返回栈顶元素
char getTop(); //获得栈顶元素
bool isEmpty(); //判断是否为空
bool isFull(); //判断是否满
void setNull(); //设置栈为空
初始化函数
#define MAX_SIZE 1000 //定义栈最大值常量
typedef struct Stack{
char *data; //线性表
int size;
int top;
};
void initStack(Stack &s); // 初始化
void distoryStack(Stack &s); // 销毁栈
void push(Stack s,char ch); //入栈
char pop(Stack s); //出栈并返回栈顶元素
char getTop(); //获得栈顶元素
bool isEmpty(); //判断是否为空
bool isFull(); //判断是否满
void setNull(); //设置栈为空
销毁栈函数
void destoryStack(Stack s){
free(s.data); //内存回收
}
4.栈的抽象数据类型定义
5.实现顺序栈
#include "Stack.h"
//构造函数
Stack::Stack(){
size = MAX_SIZE;
top = -1;
data = new char[MAX_SIZE];
}
//有参构造
Stack::Stack(int s){
size = s;
top = -1;
data = new char[s];
}
// 析构函数
Stack::~Stack(){
delete [] data;
}
//入栈
void Stack::push(char ch){
if(!isFull()){
data[++top] = ch;
}
}
//出栈并返回栈顶元素
char Stack::pop(){
if(!isEmpty()) {
return data[top--];
}
}
//获得栈顶元素(不出栈)
char Stack::getTop(){
if(!isEmpty()) {
return data[top];
}
}
//判断是否为空
bool Stack::isEmpty(){
if(top==-1)
return true;
else
return false;
}
//判断是否满
bool Stack::isFull(){
if(top+1 == size)
return true;
else
return false;
}
//设置栈为空
void Stack::setNull(){
top = -1;
}