数据结构|链栈的实现(实验3.2)
来源:互联网 发布:卡尔曼滤波算法的应用 编辑:程序博客网 时间:2024/05/29 13:28
一、实验目的
1、熟练掌栈的结构特点,掌握栈的顺序存储结构和实现。
2、学会使用栈解决实际问题。
二、实验内容
1、自己确定结点的具体数据类型和问题规模,建立一个链栈,实现栈的压栈和出栈操作。
三、实验步骤
1、依据实验内容分别说明实验程序中用到的数据类型的定义;
template < typename T >class LinkStack{public:LinkStack(T array[],int n); //构造函数~LinkStack(); //析构函数void push(T x); //入栈操作T pop(); //出栈操作void print(); //遍历操作T gettop() { if(top!=NULL) return top->data;} //取栈顶元素int Empty() ; //判断是否为空private:Node <T> *top;};
2.、相关操作的算法表达;
2.1 构造函数
1.栈顶指针 top 置为 NULL
2.创建一个结点 node 置为 NULL
3.循环:
①.为结点 node 申请空间
②.把数组的值存储在结点 node 的 data 域中
③.把栈顶指针 top 指向的结点的地址存储在 结点 node 的 next 域中
④.栈顶指针 top 指向结点 node
2.2析构函数:
1.创建一个结点 deleteNode 置为 NULL
2.循环:
①.结点 deleteNode 指向栈顶结点
②.栈顶指针 top 指向栈顶结点的下一个结点
③.删除栈顶结点
2.3入栈操作函数:
1.创建一个结点 s ,申请空间
2.把 x 存储在结点 s 的 data 域中
3.结点 s 与原来的栈顶元素相连
4.栈顶指针 top 指向结点 s ,即结点 s 成为栈顶元素
2.4出栈操作函数:
1.判断是否栈空,若是则抛出“下溢”,否则
2.创建一个结点 p ,其指向栈顶结点
3.创建一个变量 x ,其记录栈顶结点存储的元素
4.栈顶指针 top 指向栈顶结点的下一个结点
5.删除栈顶结点 p
6.返回栈顶结点存储的元素 x
2.5输出操作函数:按照顺序,输出栈元素
3、完整程序;
由于结点元素类型不确定,因此采用C++模板机制。
源代码如下:
#include<iostream>using namespace std;template < typename T >struct Node{T data;Node<T> *next;};template < typename T >class LinkStack {public:LinkStack(T array[], int n){top = NULL;Node<T> *node = NULL;for (int i = 0; i < n; i++) {node = new Node<T>;node->data = array[i];node->next = top;top = node;}}~LinkStack(){Node<T> *deleteNode = NULL;deleteNode = top;top = top->next;delete deleteNode;}void push(T x);T pop();void print();T gettop() { if (top != NULL) return top->data; }int Empty() { top == NULL ? return 1 : return 0; }private:Node <T> *top;};
template <typename T> bool LinkStack<T>::Empty(){ return top == NULL ? true : false; }
template < typename T >void LinkStack<T>::push(T x){Node<T> *s;s = new Node<T>;s->data = x;s->next = top;top = s;}template < typename T >T LinkStack<T>::pop(){T x;Node<T> *p;if (top == NULL)throw"下溢";x = top->data; p = top;top = top->next;delete p;return x;}template <class T>void LinkStack<T>::print(){Node<T> *node = top;while (node->next != NULL) {cout << node->data << " ";node = node->next;}cout << node->data << endl;}void main(){int arr[] = { 0,1,2,3,4 };cout << "创建对象:0、1、2、3、4 依次入栈 " << endl;LinkStack<int> a(arr, 5);cout << "遍历栈内的元素:";a.print();cout << "出栈一个元素" << a.pop() << "结果如下:" << endl;a.print();cout << "现在栈顶元素为:" << a.gettop();cout << "入栈元素6~10:" << endl;for (int i = 6; i <= 10; i++){a.push(i);}cout << "遍历栈内的元素:";a.print();}
4、总结、运行结果和分析。
①总结
在程序内定义对象为int型,将元素1~5按顺序入栈。再出栈一个元素,后6~10依次入栈。
通过调用成员函数,实现入栈、出栈、输出等基本功能。
②运行结果如下:5、总体收获和不足,疑问等。
经过上一次实验,我对栈的相关知识已经有所了解。本次试验较为简单,因为实验内容较少,且对书本知识掌握得有点熟悉。但本次试验还是发现了自己的不足之处。经过改进、询问同学,成功完成了实验。收获颇丰。总的来说,我对理论知识有了更充分的理解,也能较大程度明白运行原理。
- 数据结构|链栈的实现(实验3.2)
- 数据结构|链栈的实现(实验3.2)
- 数据结构|顺序栈的实现(实验3.1)
- 数据结构|顺序栈的实现(实验3.1)
- 数据结构|链队列的实现(实验3.4)
- 数据结构|链队列的实现(实验3.4)
- C语言数据结构链栈实现个位数计算式(数据结构第二次实验)
- 数据结构实验 约瑟夫环的循环链表实现
- 数据结构|顺序队列的实现(实验3.3)
- 数据结构|顺序队列的实现(实验3.3)
- 数据结构第三章实验2.实现链栈的各种基本运算
- 数据结构实验--------线性表的实现
- 数据结构实验--------主要排序算法的实现
- 【数据结构实验】约瑟夫环的实现
- 数据结构实验二--单链表的基本实现
- 数据结构实验2---表达式求值(“栈”实现)
- 数据结构实验:栈实现计算器(表达式计算)
- 数据结构实验之栈四:括号匹配(java实现)
- MYSQL日期 字符串 时间戳互转
- PHP中 or 与 || ,and 与 && 区别
- 几道经典的数据结构算法代码实现(1)
- 互联网时代个人信息安全的重要性
- Javaweb工具类
- 数据结构|链栈的实现(实验3.2)
- 深度学习--通过正则化regularization防止overfitting
- eclipse项目中.classpath文件详解
- Hibernate 异常 : Error parsing JNDI name [XXXX]
- 1005. 继续(3n+1)猜想 (25)
- Chrome console换行输入
- Hdu 5750 Dertouzos 素数筛 解题报告
- php计算百钱百鸡
- 工具使用:如何使用 SSH 连接到你的云服务器