栈与队列实现以及相互转化

栈与队列

栈与队列可以理解为特别的链表(受限制的)。
那么什么是链表呢?
链表示意图
栈与队列实现以及相互转化_第1张图片
像这样的
在这里插入图片描述

我们成为一个节点一般我们是这样定义的
在结构体中

struct Node//这里访问权限为public
{
int data;//数据域,这里我们想使用int
Node * node;//指针域,用于指向下一个节点
}

在类中

class Node//这里数据为private访问权限
{
int data;//数据域,这里我们想使用int
Node * node;//指针域,用于指向下一个节点
}

就是这样由一个节点指向下一个节点来构成链表;

栈- 是什么?

1.栈又称堆栈。
2.是一种仅在表尾进行插入和删除操作的线性表。
3.表尾称为栈顶,相对地,把另一端称为栈底。
4.向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈
顶元素的上面,使之成为新的栈顶元素;
5.从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
栈与队列实现以及相互转化_第2张图片

在标准模板库中有哪些功能
栈与队列实现以及相互转化_第3张图片

实现(使用c++实现,按模板实现,课以把T看作int等数据类型)
定义头节点(使用类定义的)

template<class T>
class CNode
{
public:
 CNode(T val);
 ~CNode();
 void setList(CNode<T>* pNode);
 CNode<T>* getNext();
 T getData();
private:
 T m_val;
 CNode<T>* m_pNext;
};

下面是实现节点类中的函数

//实现构造函数
template<class T>
CNode<T>::CNode(T val):m_val(val), m_pNext(nullptr)
{ }
//实现析构函数
template<class T>CNode<T>::~CNode()
{	
m_pNext = nullptr;
}
//建立链表
template<class T>
void CNode<T>::setList(CNode<T>* pNode)
{	
m_pNext = pNode;
} 
//下一个节点
template<class T>
CNode<T>* CNode<T>::getNext()
{	
return m_pNext;
} 
//节点里的数据
template<class T>
T CNode<T>::getData()
{	
return m_val;
}

功能实现类(第一次写博客复制代码总是出问题就放图片了/狗头)
栈与队列实现以及相互转化_第4张图片
栈与队列实现以及相互转化_第5张图片
栈与队列实现以及相互转化_第6张图片

栈与队列实现以及相互转化_第7张图片
栈与队列实现以及相互转化_第8张图片结果展示
这是测试代码
栈与队列实现以及相互转化_第9张图片
结果
栈与队列实现以及相互转化_第10张图片

队列-是什么

1.它只允许在表的表头进行删除操作。
2.进行插入操作的端称为队尾,进行删除操作的端称为队头。
栈与队列实现以及相互转化_第11张图片
在标准模板库中有哪些功能
栈与队列实现以及相互转化_第12张图片

实现(使用c++实现,按模板实现,课以把T看作int等数据类型)

定义头节点(使用类定义的)
栈与队列实现以及相互转化_第13张图片
实现节点中的代码
栈与队列实现以及相互转化_第14张图片
栈与队列实现以及相互转化_第15张图片
功能实现类(因为和栈差不多就不解释了)
栈与队列实现以及相互转化_第16张图片

实现功能
栈与队列实现以及相互转化_第17张图片
栈与队列实现以及相互转化_第18张图片
栈与队列实现以及相互转化_第19张图片
栈与队列实现以及相互转化_第20张图片
结果展示
测试代码

栈与队列实现以及相互转化_第21张图片
结果
栈与队列实现以及相互转化_第22张图片从上面的结果中很容易看出来队列是先进先出,而栈是先进后出
那么能不能相互转化呢?下面我们来实现一下
多的不说直接上代码吧。

由栈到队列

首先是封装成类
栈与队列实现以及相互转化_第23张图片
下面是实现(直接使用模板库)
栈与队列实现以及相互转化_第24张图片
栈与队列实现以及相互转化_第25张图片
栈与队列实现以及相互转化_第26张图片
栈与队列实现以及相互转化_第27张图片
测试一下
栈与队列实现以及相互转化_第28张图片

结果
栈与队列实现以及相互转化_第29张图片

有队列到栈

栈与队列实现以及相互转化_第30张图片
栈与队列实现以及相互转化_第31张图片
栈与队列实现以及相互转化_第32张图片
栈与队列实现以及相互转化_第33张图片
测试代码
栈与队列实现以及相互转化_第34张图片
结果
栈与队列实现以及相互转化_第35张图片
在这里面都是用两个表来实现另外的一个表。

总结

1.受限的线性表:栈和队列;
2.栈:先进后出,类似于箱子。(FILO结构)
栈底:栈的底部。
栈顶:栈的顶部。
入栈:将元素添加到栈顶。
出栈:将栈顶元素移除。
3.队列:先进先出,类似于排队。(FIFO结构)
队头:队的头部。
队尾:队的尾部。
入队:将元素添加到队尾。
出队:将队头的元素移除。

你可能感兴趣的:(队列,链表,数据结构,c++,栈)