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

栈与队列

栈与队列可以理解为特别的链表(受限制的)。
那么什么是链表呢?
链表示意图
在这里插入图片描述
像这样的
在这里插入图片描述

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

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

在类中

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

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

栈- 是什么?

1.栈又称堆栈。
2.是一种仅在表尾进行插入和删除操作的线性表。
3.表尾称为栈顶,相对地,把另一端称为栈底。
4.向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈
顶元素的上面,使之成为新的栈顶元素;
5.从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
在这里插入图片描述

在标准模板库中有哪些功能
在这里插入图片描述

实现(使用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;
}

功能实现类(第一次写博客复制代码总是出问题就放图片了/狗头)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述结果展示
这是测试代码
在这里插入图片描述
结果
在这里插入图片描述

队列-是什么

1.它只允许在表的表头进行删除操作。
2.进行插入操作的端称为队尾,进行删除操作的端称为队头。
在这里插入图片描述
在标准模板库中有哪些功能
在这里插入图片描述

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

定义头节点(使用类定义的)
在这里插入图片描述
实现节点中的代码
在这里插入图片描述
在这里插入图片描述
功能实现类(因为和栈差不多就不解释了)
在这里插入图片描述

实现功能
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
结果展示
测试代码

在这里插入图片描述
结果
在这里插入图片描述从上面的结果中很容易看出来队列是先进先出,而栈是先进后出
那么能不能相互转化呢?下面我们来实现一下
多的不说直接上代码吧。

由栈到队列

首先是封装成类
在这里插入图片描述
下面是实现(直接使用模板库)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
测试一下
在这里插入图片描述

结果
在这里插入图片描述

有队列到栈

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
测试代码
在这里插入图片描述
结果
在这里插入图片描述
在这里面都是用两个表来实现另外的一个表。

总结

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

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值