数据结构【动态队列】代码实现
时间:2022-07-22
本文章向大家介绍数据结构【动态队列】代码实现,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
队列是使用链表实现,包含队列的初始化、入队、出队、输出队列内容、判断队列内容是否为空
#include <iostream>
//链表节点
typedef struct Node
{
int nData;
Node *pNext;
}*PNODE;
//队列
//队列有两个指针记录数据,front、rear
typedef struct Queue
{
PNODE pFront;
PNODE pRear;
}*PQUEUE;
//初始化队列
void init_queue(PQUEUE pQueue);
void push_queue(PQUEUE pQueue, const int& nValue);
void pop_queue(PQUEUE pQueue);
void show_queue(const PQUEUE pQueue);
bool isEmpty_queue(const PQUEUE pQueue);
int main()
{
Queue oQueue;
init_queue(&oQueue);
push_queue(&oQueue, 1);
push_queue(&oQueue, 2);
push_queue(&oQueue, 3);
push_queue(&oQueue, 4);
push_queue(&oQueue, 40);
push_queue(&oQueue, 88);
push_queue(&oQueue, 99);
show_queue(&oQueue);
pop_queue(&oQueue);
pop_queue(&oQueue);
pop_queue(&oQueue);
}
//初始化队列
void init_queue(PQUEUE pQueue)
{
//初始化的时候,申请一个无效节点(不存储任何内容)
//让队首、队尾都指向这个无效节点
pQueue->pRear = (PNODE)malloc(sizeof(Node));
if (nullptr == pQueue->pRear)
{
std::cout << "申请内存失败" << std::endl;
exit(-1);
}
pQueue->pRear->pNext = nullptr;
//队首指向队尾
pQueue->pFront = pQueue->pRear;
}
//入队
void push_queue(PQUEUE pQueue, const int& nValue)
{
//插入需要从队尾插入
PNODE pNewNode = (PNODE)malloc(sizeof(Node));
if (nullptr == pQueue->pRear)
{
std::cout << "申请内存失败" << std::endl;
exit(-1);
}
pNewNode->pNext = nullptr;
//由于队尾永远指向一个无效的节点,所以这里直接把数据存储到队尾节点即可
pQueue->pRear->nData = nValue;
//然后把申请好的无效节点与队尾连接起来,避免丢失节点
pQueue->pRear->pNext = pNewNode;
//让队尾指向新加的无效节点,就等于rear + 1
pQueue->pRear = pNewNode;
}
//出队
void pop_queue(PQUEUE pQueue)
{
if (isEmpty_queue(pQueue))
{
return;
}
//出队从队首弹出
//先记录队首的节点
PNODE pTempNode = pQueue->pFront;
//队首指向队首的下一个节点,相当于front + 1
pQueue->pFront = pQueue->pFront->pNext;
std::cout << "弹出的元素为:" << pTempNode->nData << std::endl;
//释放内存
free(pTempNode);
}
//输出队列内容
void show_queue(const PQUEUE pQueue)
{
PNODE pNode = pQueue->pFront;
while (pNode != pQueue->pRear)
{
std::cout << pNode->nData << "t";
pNode = pNode->pNext;
}
//输出完以后换个行
std::cout << "n";
}
//队列是否为空
bool isEmpty_queue(const PQUEUE pQueue)
{
if (pQueue->pFront == pQueue->pRear)
{
return true;
}
return false;
}
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 在Linux上如何检查用户所属组详解
- Linux中移除(删除)符号链接的命令
- Linux定时备份数据库到指定邮箱的方法
- 详解nohup /dev/null 2>&1 含义的使用
- centOS7安装jdk1.8的方法
- 你知道一台Linux服务器可以负载多少个连接吗
- Linux环境下安装Nginx及其使用
- CentOS8中的nmcli使用详解
- 在Linux中使用history命令的方法
- Linux服务器部署JavaWeb项目完整教程
- centos 6 安装vsftpd与PAM虚拟用户的方法
- CentOS6.8中/英文环境切换教程图解
- centos7.6 安装Tomcat-8.5.39的方法
- ubuntu14.04安装jdk1.8的教程
- Linux nohup实现后台运行程序及查看(nohup与&)