数据结构|顺序栈的实现(实验3.1)
来源:互联网 发布:淘宝游戏专营 编辑:程序博客网 时间:2024/06/05 10:03
一、实验目的
1、熟练掌栈的结构特点,掌握栈的顺序存储结构和实现。
2、学会使用栈解决实际问题。
二、实验内容
1、自己确定结点的具体数据类型和问题规模,建立一个顺序栈,实现栈的压栈和出栈操作。
三、实验步骤
1、依据实验内容分别说明实验程序中用到的数据类型的定义;
template < typename T >class SeqStack{public:SeqStack() {top = -1;} //构造函数,初始化一个空栈~SeqStack() {} //析构函数为空void push(T x); //入栈操作,将元素x入栈T pop(); //出栈操作,将栈顶元素弹出T get() { if(top!=-1) return data[top]; } //取栈顶元素(不删除)bool Empty() { return top == - 1 ? true : false; } //判断栈是否为空bool Full() { return top == StackSize - 1 ? true : false; } //判断是否栈满void print(); //遍历操作private: T data[StackSize]; //存放栈元素的数组int top; //栈顶指针,为栈顶元素在数组中的下标};
2、相关操作的算法表达;
2.1、构造函数,初始化一个空栈
2.2、入栈操作函数:①.判断是否栈满,若是则返回,否则
②.先栈顶指针 top 往上移一位,再在该位存储数据
2.3、出栈操作函数:①判断是否栈空,若是则返回 -1,否则
②先返回栈顶指针 top 指向的位置的值,再把栈顶指针 top 往下移一位
2.4、输出操作函数:按照顺序,输出栈元素。
3、完整程序;
由于结点元素类型不确定,因此采用C++模板机制。
源代码如下:
#include<iostream>using namespace std;const int StackSize = 10 ;template < typename T >class SeqStack{public:SeqStack() {top = -1;} //构造函数,初始化一个空栈~SeqStack() {} //析构函数为空void push(T x); //入栈操作,将元素x入栈T pop(); //出栈操作,将栈顶元素弹出T get() { if(top!=-1) return data[top]; } //取栈顶元素(不删除)bool Empty() { return top == - 1 ? true : false; } //判断栈是否为空bool Full() { return top == StackSize - 1 ? true : false; } //判断是否栈满void print(); //遍历操作private: T data[StackSize]; //存放栈元素的数组int top; //栈顶指针,为栈顶元素在数组中的下标};template< typename T >void SeqStack<T>::push(T x){if(Full()){ //判断是否栈满入栈: cout<<"栈满!"<<endl; return; }data[++top] = x; cout<<"入栈"<<x<<"成功!"<<endl;}template< typename T >T SeqStack<T>::pop(){T x;if(Empty()){ //判断是否栈空出栈 * 1.判断是否栈空,若是则返回 -1,否则 * 2.先返回栈顶指针 top 指向的位置的值,再把栈顶指针 top 往下移一位 cout<<"栈空!"<<endl; return -1; }x = data[top--];return x;}template< typename T >void SeqStack<T>::print(){for( int i=0 ; i<=top ; i++){ cout<<data[i]<<" ";}cout<<endl;}void main(){SeqStack<int>a;cout<<"按顺序把“1,2,3,4,5”推进栈"<<endl;for(int i=1;i<=5;i++) { a.push(i); }cout<<"结果如下:"<<endl;a.print();cout<<"出栈一个元素"<<a.pop()<<"结果如下:"<<endl;a.print();cout<<"现在栈顶元素为:"<<a.get()<<endl;}
4、总结、运行结果和分析。
①总结
在程序内定义对象为int型,将元素1~5按顺序入栈。
通过调用成员函数,实现入栈、出栈、输出等基本功能。
②运行结果如下:5、总体收获和不足,疑问等。
本次试验较为简单,因为实验内容较少,且对书本知识掌握得有点熟悉。但本次试验还是发现了自己的不足之处。经过改进、询问同学,成功完成了实验。收获颇丰。总的来说,我对理论知识有了更充分的理解,也能较大程度明白运行原理。
阅读全文
0 0
- 数据结构|顺序栈的实现(实验3.1)
- 数据结构|顺序栈的实现(实验3.1)
- 数据结构|顺序队列的实现(实验3.3)
- 数据结构|顺序队列的实现(实验3.3)
- 《数据结构》实验【顺序栈】
- 数据结构-顺序表(2)实验要求以及顺序表的表示与实现
- 《数据结构》实验二:线性表的实验(顺序表)
- 《数据结构》实验二:线性表的实验(顺序表)
- 【数据结构】顺序栈的实现(c++)
- 数据结构实验1-线性表的顺序实现
- 数据结构---栈的顺序实现
- 数据结构-----顺序栈的实现
- 数据结构实验(一)——顺序表和单链表的设计与实现
- 终于完成~《数据结构》实验二:线性表的实验(实现一个N个学生成绩的顺序表)
- C++数据结构实验报告:顺序表实现
- 【数据结构实验】实验二 顺序表的基本操作的实现
- 顺序栈和链栈的实现(实验3.1)
- 实验三:顺序栈的实现
- WEB 端批量移动设备管理控制工具 STF 的环境搭建和运行
- JavaBean注解之Lombok(java奇淫巧技之Lombok)
- JS HTML 单引号与双引号
- 判断网络状态
- 百度地图和ztree开发电子围栏功能
- 数据结构|顺序栈的实现(实验3.1)
- ThinkPHPURL重写提示错误No input file specified htaccess规则问题
- Ubuntu 16.04安装Tomcat 8 图解
- 如何检查linux服务器的端口是否被防火墙挡住
- spring boot 读取配置文件(application.yml)中的属性值
- JS(二十二)DataTables使用
- Unity播放视频3种方式(2旧1新)
- Binary Tree BFS Template
- Requests库的使用