线性表之顺序栈C++实现
线性表之顺序栈
栈是限定仅在表尾(栈顶)进行插入删除操作的线性表,FILO:先进后出
一、顺序栈的头文件:SeqStack.h
1 //顺序栈头文件 2 #include3 using namespace std; 4 //设置顺序栈的大小 5 const int StackSize = 10; 6 template 7 //定义顺序栈的模板类型 8 class SeqStack{ 9 public: 10//无参构造器,初始化栈顶指针 11SeqStack(){ top = -1; } 12//析构函数为空 13~SeqStack(){} 14//入栈操作,将元素入栈 15void Push(DataType x); 16//出栈操作,将栈顶元素弹出栈 17DataType Pop(); 18//取出栈顶元素,不删除栈顶元素(即取出的元素还在栈内) 19DataType GetTop(); 20//判断栈是否为空 21int IsEmpty(); 22 private: 23//存放站元素的指针 24DataType data[StackSize]; 25//栈顶指针:栈顶元素在数组中的下标 26int top; 27 }; 28 29 30 31 //实现顺序栈入栈操作 32 template 33 void SeqStack ::Push(DataType x) 34 { 35//判断当前顺序栈是否已是满栈 36if (top == StackSize - 1) 37{ 38throw "栈已满"; 39} 40else 41{ 42//如果当前顺序栈不满,则栈顶值栈向上移动一个单元 43top++; 44//给新的栈顶元素赋值 45data[top] = x; 46} 47 } 48 49 50 51 //实现顺序栈出栈,弹出栈顶元素 52 template 53 DataType SeqStack ::Pop() 54 { 55//先判断是否是空栈 56if (top == -1) 57{ 58throw "栈是空栈"; 59} 60else 61{ 62//若不是空栈,则取出栈顶元素,并删除栈顶元素 63DataType x = data[top]; 64//栈顶指针向下移动一个单元素 65top--; 66//返回栈顶元素的值 67return x; 68} 69 } 70 71 72 73 //实现取出栈顶元素,但不删除取出的元素 74 template 75 DataType SeqStack ::GetTop() 76 { 77//先判断是否是空栈 78if (top == -1) 79{ 80throw "栈是空栈"; 81} 82else 83{ 84//若不是空栈,则取出栈顶元素的值,但不删除栈顶元素 85DataType x = data[top]; 86//返回栈顶元素的值 87return x; 88} 89 } 90 91 92 93 //实现判断顺序栈是否是空栈:栈空返回 1,否则返回 0 94 template 95 int SeqStack ::IsEmpty() 96 { 97 98if (top == -1) 99{ 100return 1; 101} 102else 103{ 104return 0; 105} 106 }
二、测试顺序栈的源文件:TestSeqStack.cpp
1 //测试顺序栈 2 #include3 //引入顺序栈头文件 4 #include"SeqStack.h" 5 using namespace std; 6 int main() 7 { 8//创建一个顺序栈 9SeqStack seqStack = SeqStack (); 10//判断是否是空栈 11cout << "此时栈是否是空栈:" << seqStack.IsEmpty() << endl; 12//入栈 13seqStack.Push(1); 14cout << "1 入栈了" << endl; 15//判断是否是空栈 16cout << "此时栈是否是空栈:" << seqStack.IsEmpty() << endl; 17//取出栈顶元素 18cout << "栈顶元素是:" << seqStack.GetTop() << endl; 19//出栈 20seqStack.Push(3); 21cout << "3 入栈了" << endl; 22//取出栈顶元素 23cout << "栈顶元素是:" << seqStack.GetTop() << endl; 24//出栈 25seqStack.Push(7); 26cout << "7 入栈了" << endl; 27//取出栈顶元素 28cout << "栈顶元素是:" << seqStack.GetTop() << endl; 29//出栈 30seqStack.Push(5); 31cout << "5 入栈了" << endl; 32//取出栈顶元素 33cout << "栈顶元素是:" << seqStack.GetTop() << endl; 34//出栈 35cout << "栈顶元素" << seqStack.Pop() << "出栈了" << endl; 36//取出栈顶元素 37cout << "栈顶元素是:" << seqStack.GetTop() << endl; 38//出栈 39return 0; 40 }
三、运行示例结果:
文章图片
【线性表之顺序栈C++实现】
转载于:https://www.cnblogs.com/zfc-java/p/6664330.html
推荐阅读
- 笔记|C语言数据结构——二叉树的顺序存储和二叉树的遍历
- Spring|Spring Aop常见注解与执行顺序详解
- 机器学习|线性回归原理与python实现
- Python|Python实战(使用线性回归预测房价)
- 装修房子先后顺序|装修房子先后顺序 装修房子注意事项
- python对数据进行分类|python对数据进行分类、文件是csv文件_用Python将处理数据得到的csv文件分类(按顺序)保存...
- 机器学习之回归
- 机器学习|线性回归的正规方程法
- AIoT(人工智能+物联网)|程序员的数学【线性代数基础】
- 说话顺序很重要之坏话缓说