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语言
栈 栈是一种运算受限的线性表,是一种先进后出的数据结构,限定只能在一端进行插入和删除操作,允许操作的一端称为栈顶,不允许操作的称为栈底 顺序栈(顺序结构) 顺序栈:用一段连续的存储空间来存储栈中的数据 ...
随机推荐
- javaScript 基础知识汇总 (十五)
1.模块简介 什么是模块: 模块就是一个文件,一个脚本,通过关键字export 和 import 交换模块之间的功能. export 关键字表示在当前模块之外可以访问的变量和功能. import 关键 ...
- javascript中indexOf()和lastIndexOf()详解
ECMAScript5为数组实例添加两方法:indexOf()和lastIndexOf().这两个方法接受两个参数:要查找的项和(可选的)表示查找起点位置的索引.其中,indexOf()方法从数组的开 ...
- 高性能-GC
带着问题去思考!大家好 相对.NET 来说.CLR去处理了,C,C++这些就需要手动去垃圾回收. GC大部分容易察觉的性能问题.其实很多问题实际是哪个都是由于对垃圾回收器的行为和预期结果理解有误.在, ...
- Recover刷机简介
Recovery Recovery是一种可以对安卓手机内部的数据文件进行修改的模式,类似电脑的PE.不同的recovery有不同的功能.使用recovery可以说是刷机(卡刷)的基础,想要比较顺畅的刷 ...
- matplotlib 的几种柱状图
1.x 表示数量,y 表示名字 import matplotlib.pyplot as plt dic = {'a': 22, 'b': 10, 'c': 6, 'd': 4, 'e': 2, 'f' ...
- 为什么我推荐你用Ubuntu开发?
前言: 鱼哥在做多媒体开发时,领导倒逼我们用Ubuntu开发,后来才发现它的牛逼和高效.所以对于还在用Windows上开发的朋友,鱼哥建议,趁周末,搞个双系统,切到Ubuntu上开发, Ubuntu最 ...
- Effective python(五):内置模块
1,考虑使用contextlib和with语句改写可复用的try/finally代码 with lock:print('lock is held')相当于try:print('lock is held ...
- Xamarin.Forms读取并展示Android和iOS通讯录 - TerminalMACS客户端
Xamarin.Forms读取并展示Android和iOS通讯录 - TerminalMACS客户端 本文同步更新地址: https://dotnet9.com/11520.html https:// ...
- html之样式
HTML 样式 1. font字体 font-family 字体样式 比如:微软雅黑.Serif 字体.Sans-serif 字体.Monospace 字体.Cursive 字体.Fantasy 字体 ...
- React Hooks Typescript 开发的一款 H5 移动端 组件库
CP design 使用 React hooks Typescript 开发的一个 H5 移动端 组件库 English | 简体中文 badge button icon CP Design Mobi ...