C++语言实现顺序栈
C++语言实现顺序栈
在写C语言实现顺序栈的时候,我已经向大家介绍了栈的特点以及介绍了栈的相关操作,并利用C语言实现了相关算法。在这里小编就不在继续给大家介绍了,需要温习的可以去我的博客看看。在这篇博客我就给大家分享一下利用C++模板类来实现顺序栈的相关操作,主要实现了以下功能:
私有成员的封装
根据顺序栈的特点,封装了elements这样的数组存放栈中元素,top代表栈顶指针,maxSize代表栈的最大容纳量,其中还封装了一个overflowProcess()函数来对栈的溢出进行处理。
private:
T* elements;//存放栈中元素的数组
int top;//栈顶元素的指针
int maxSize;//栈的最大容纳元素个数
void overflowProcess();//栈的溢出处理操作
overflowProcess()函数的实现如下
在栈满的情况下,按照最大容纳量的2倍来扩展栈的容纳量,重新分配空间赋值给elements数组。
template <class T>
inline void Stack<T>::overflowProcess()
{
this->maxSize = int (2*this->maxSize);
T * temp = new T [this->maxSize];
for(int i = 0; i <= this->top ; i++){
temp[i] = this->elements[i];
}
delete []elements; //释放原来的空间
this ->elements = temp;
}
公有函数的封装
栈的操作自然少不了进栈,出栈,判空,判满等相关操作,下面分别给大家进行介绍:
无参构造函数
默认最大容纳量为10,可自行进行调整。
template<class T> Stack<T>::Stack()
{
this ->maxSize = 10;
this ->top = -1;
this ->elements = new T[this ->maxSize];
if(elements==NULL){
cout<<"动态分配错误!"<<endl;
}
}
有参构造函数
根据自身传递size大小来分配储存空间
template <class T>
inline Stack<T>::Stack(int size)
{
this ->maxSize = size;
this ->top = -1;
this ->elements = new T[this ->maxSize];
if(elements==NULL){
cout<<"动态分配错误!"<<endl;
}
}
顺序栈的“入栈”操作
入栈操作前,首先要判断栈是否溢出,如果栈isFull(),则进行溢出处理,否则将其插入到栈顶。
template <class T>
inline void Stack<T>::Push(const T &x)
{
if(isFull()==true){
cout<<"The stack is full , so need to enlarge 2x!"<<endl;
overflowProcess();//溢出处理,调整空间大小
elements[++top]=x;
}
else{
elements[++top]=x;//将x入栈
}
}
顺序栈的“出栈”操作
栈顶元素出栈,如果栈为空返回false;若栈不为空,栈顶元素出栈,top指针减一就OK啦。
template <class T>
inline bool Stack<T>::Pop(T& x)
{
if(isEmpty())return false;
else{
x=getTopelements();
top--;
return true;
}
}
顺序栈的“判满”
判断栈是否满,只需要将top指针与最大容纳量进行比较就行,如果满返回true,未满返回false
template <class T>
inline bool Stack<T>::isFull()
{
if(this->getTop()<this->getMaxsize()-1){
return false;
}
else{
return true;
}
}
顺序栈的“判空”
判断栈是否空,直接判断top指针,如果满返回true,未满返回false
template <class T>
inline bool Stack<T>::isEmpty()
{
if(this->getTop()==-1){
return true;
}
else{
return false;
}
}
打印顺序栈的元素
template <class T>
inline void Stack<T>::print()
{
if(isEmpty()){
cout<<"This Stack is empty!"<<endl;
}
cout<<"栈的元素为:"<<endl;
for(int i=0;i<getTop();i++)
{
cout<<"["<<elements[i]<<"]<-";
}
cout<<"["<<elements[getTop()]<<"]"<<endl;
}
到这里C++实现顺序栈的文章就结束了,相对而言还是挺简单的,完整的代码我已经上传到github(C++实现顺序栈),欢迎Star! 本来打算把顺序栈的应用也写在这篇文章一起的,工作量实在挺大,也害怕大家接受不了,所以我就后面在更新喽。其他的数据结构的分享大家可以来我的博客,我们一起讨论,我也是一个学生,如果有写的不好的地方,还忘各路大神提出来,我加以改正!
C++语言实现顺序栈的更多相关文章
- C语言实现顺序栈
C语言实现顺序栈,顺便加深刻++i,++i的区别 #include <stdio.h>#include <stdlib.h>#define maxsize 100/*写在前面的 ...
- C语言实现顺序栈以及栈的特点
什么是栈? 同顺序表和链表一样,栈也是用来存储逻辑关系为 "一对一" 数据的线性存储结构,如下图所示. 从上图我们看到,栈存储结构与之前所学的线性存储结构有所差异,这缘于栈对数据 ...
- C语言实现顺序栈的初始化&进栈&出栈&读取栈顶元素
/*顺序表实现栈的一系列操作*/ #include<stdio.h> #include<stdlib.h> #define Stack_Size 50 //设栈中元素个数为50 ...
- 数据结构(C语言版)顺序栈相关算法的代码实现
这两天完成了栈的顺序存储结构的相关算法,包括初始化.压栈.出栈.取栈顶元素.判断栈是否为空.返回栈长度.栈的遍历.清栈.销毁栈.这次的实现过程有两点收获,总结如下: 一.清楚遍历栈的概念 栈的遍历指的 ...
- 纯C语言实现顺序栈
#include <stdio.h> #include <stdlib.h> #define MAXSIZE 100 typedef int SElemType; typede ...
- 顺序栈的基本操作(C语言)
由于现在只学了C语言所以就写这个C语言版的栈的基本操作 这里说一下 :网上和书上都有这种写法 int InitStack(SqStack &p) &p是取地址 但是这种用法好像C并不 ...
- 数据结构与算法之顺序栈C语言实现
顺序栈是一种特殊的顺序表,主要操作是入栈和出栈.将顺序表加一些特定限制,就成了顺序栈. 注: 1.顺序栈C语言实现: 2.按较简单的方式实现,主要帮助理解,可在此基础上修改,更加完善: 3.提供几个简 ...
- 【小白成长撸】--顺序栈(C语言版)
// 顺序栈.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h"//test1.0--栈表仅限Int类型 #include <stdio. ...
- 栈(顺序栈)----C语言
栈 栈是一种运算受限的线性表,是一种先进后出的数据结构,限定只能在一端进行插入和删除操作,允许操作的一端称为栈顶,不允许操作的称为栈底 顺序栈(顺序结构) 顺序栈:用一段连续的存储空间来存储栈中的数据 ...
随机推荐
- .NET Core学习笔记(5)——WebAPI从Server端push消息到Client
标题起得有点厉害,汉字夹杂着E文,不符合教育部公布的“向社会推荐使用的外语词中文译名”规范.不过他管不着我.写本篇的起因,是重构一个现有的WinForms程序,将Server端的部分逻辑从raw so ...
- 使用EPX Studio 7.0 下载网站验证码
implementation var Document_: DispHTMLDocument; //用于处理网页文档对象 EPX: IExcelPanelXDisp; procedure TForm1 ...
- golang socket编程 net.Conn IO.EOF解读
结论 首先,先定义下我的理解,当在Read时,收到一个IO.EOF,代表的就是对端已经关闭了发送的通道,通常来说是发起了FIN. 那么根据自己的实际业务,就可以进行判断,这里的IO.EOF到底该怎么利 ...
- 【开源】使用Angular9和TypeScript开发RPG游戏
RPG系统构造 通过对于斗罗大陆小说的游戏化过程,熟悉Angular的结构以及使用TypeScript的面向对象开发方法. 项目地址 人物 和其他RPG游戏类似,游戏里面的人物角色大致有这样的一些属性 ...
- 手把手教你用GoEasy实现Websocket IM聊天
经常有朋友问起GoEasy如何实现IM,今天就手把手的带大家从头到尾用GoEasy实现一个完整IM聊天,全套代码已经放在了github. 今日的前端技术发展可谓百花争鸣,为了确保本文能帮助到使用任何技 ...
- Java并发编程之CAS二源码追根溯源
Java并发编程之CAS二源码追根溯源 在上一篇文章中,我们知道了什么是CAS以及CAS的执行流程,在本篇文章中,我们将跟着源码一步一步的查看CAS最底层实现原理. 本篇是<凯哥(凯哥Java: ...
- 动态规划-TSP问题-最短超级串
2020-03-03 22:55:08 问题描述: 给定一个字符串数组 A,找到以 A 中每个字符串作为子字符串的最短字符串. 我们可以假设 A 中没有字符串是 A 中另一个字符串的子字符串. 示例 ...
- 在Keras中可视化LSTM
作者|Praneet Bomma 编译|VK 来源|https://towardsdatascience.com/visualising-lstm-activations-in-keras-b5020 ...
- OpenCV-Python 图像梯度 | 十八
目标 在本章中,我们将学习: 查找图像梯度,边缘等 我们将看到以下函数:cv.Sobel(),cv.Scharr(),cv.Laplacian()等 理论 OpenCV提供三种类型的梯度滤波器或高通滤 ...
- 一 JVM垃圾回收模型
一 JVM垃圾回收模型 一. GC算法 1.1 标记-清除算法(Mark-Sweep) 算法分为"标记"和"清除"两个阶段首先标记出所有需要回收的对象,然后回收 ...