(1)堆栈(顺序栈)

目录

1.栈的概念

2.顺序栈—栈的顺序存储结构

2.1栈的上溢和下溢

3.栈类的定义

1.C++

2.C 

4.栈的抽象数据类型定义

5.实现顺序栈


  • 堆栈的主要操作

  • 定义堆栈、入栈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;
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值