C/C++ 数据结构链式队列的定义与实现
#include <iostream>
#include <Windows.h>
using namespace std;
typedef struct _QNode{
int data;
struct _QNode* next;
}QNode;
typedef struct {
QNode* front;
QNode* rear;
int count;
}LinkQueue;
//初始化队列
void InitQueue(LinkQueue& Q) {
Q.rear = Q.front = new QNode;
Q.front->next = NULL;
Q.count = 0;
}
//入队
bool EntQueue(LinkQueue& Q,int e) {
QNode* q = new QNode;
if (!q)return false;
q->data = e;
q->next = NULL;
Q.rear->next = q;
Q.rear = q;
Q.count++;
return true;
}
//出队
bool DeleteQueue(LinkQueue& Q,int &e) {
if (Q.front == Q.rear) {
cout << "队列为空,无法出队" << endl;
return false;
}
QNode* q = Q.front->next;
e = q->data;
Q.front->next = q->next;
if (Q.rear == q) {
Q.rear = Q.front;
}
delete q;
Q.count--;
q = NULL;
return true;
}
//获取头结点
int getHead(LinkQueue& Q) {
if (Q.front == Q.rear) {
cout << "队列为空,无法获取头结点" << endl;
exit(-1);
}
return Q.front->next->data;
}
//获取尾结点
int getBack(LinkQueue& Q) {
if (Q.front == Q.rear) {
cout << "队列为空,无法获取尾结点" << endl;
exit(-1);
}
return Q.rear->data;
}
//获取队列长度
int getLength(LinkQueue& Q) {
return Q.count;
}
//打印队列
void PrintQueue(LinkQueue& Q) {
QNode* q = Q.front->next;
if (!q) return;
cout << "队列的元素为:" ;
while (q) {
cout << q->data << " ";
q = q->next;
}
cout << endl;
}
void showMenu() {
cout << "******************************\n";
cout << " 欢迎来到链队列系统\n";
cout << "------1.入队--------------\n";
cout << "------2.出队--------------\n";
cout << "------3.获取头结点--------\n";
cout << "------4.获取尾结点--------\n";
cout << "------5.获取队列长度------\n";
cout << "------6.打印队列----------\n";
cout << "------7.退出--------------\n" << endl;
}
void Destroy(LinkQueue& Q){
if (Q.front) {
delete Q.front;
Q.front = NULL;
}
if (Q.rear) {
delete Q.rear;
Q.rear = NULL;
}
Q.count = 0;
}
int main() {
LinkQueue Q;
InitQueue(Q);
bool flag = -1;
int e1 = 0;//要入队的元素
int e2 = 0;
int n = -1;
while (flag) {
showMenu();
cout << "请选择:";
cin >> n;
switch (n)
{
case 1:
cout << "请输入要入队的元素:";
cin >> e1;
if (EntQueue(Q, e1)) {
cout << "元素 " << e1 << " 入队成功!" << endl;
break;
PrintQueue(Q);
}
else {
cout << "元素 " << e1 << " 入队失败!" << endl;
break;
}
case 2:
if (DeleteQueue(Q, e2)) {
cout << "元素 " << e2 << " 出队成功!" << endl;
break;
}
else {
cout << "元素 " << e2 << " 出队失败!" << endl;
break;
}
case 3:
cout << "头结点为:" << getHead(Q) << endl;
break;
case 4:
cout << "尾结点为:" << getBack(Q) << endl;
break;
case 5:
cout << "队列的长度为:" << getLength(Q) << endl;
break;
case 6:
PrintQueue(Q);
break;
case 7:
default:
flag = 0;
Destroy(Q);
cout << "退出系统!\n";
}
} system("pause");
return 0;
}

C/C++ 数据结构链式队列的定义与实现的更多相关文章
- C语言数据结构-链式队列的实现-初始化、销毁、清空、长度、队列头元素、插入、删除、显示操作
1.数据结构-链式队列的实现-C语言 typedef struct QNode { int data; struct QNode *next; }QNode,*QueuePtr; typedef st ...
- 数据结构-链式队列-C++
用链表搭建的栈与队列相对简单,队列的特点是先进先出,不啰嗦了,由于代码比较简单,相信光顾的人不会太多,下面直接贴代码. 头文件 #ifndef QUEUELI_H #define QUEUELI_H ...
- 利用链式队列(带头节点)解决银行业务队列简单模拟问题(c++)-- 数据结构
题目: 7-1 银行业务队列简单模拟 (30 分) 设某银行有A.B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 —— 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客 ...
- 数据结构Java实现07----队列:顺序队列&顺序循环队列、链式队列、顺序优先队列
一.队列的概念: 队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在其一端进行插入操作在其 ...
- 数据结构----队列:顺序队列&顺序循环队列、链式队列、顺序优先队列
一.队列的概念: 队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在其一端进行插入操作在其 ...
- C ~ 链式队列与循环队列
此处的链式与循环队列可以应用于BFS和树的层序遍历.下面是对其结构和基本操作的程序描述. 1.循环队列 解决循环队列的队空和队满的方法: [1].增加一个参数count,用来记录数组中当前 ...
- C++数据结构之链式队列(Linked Queue)
C++数据结构之链式队列,实现的基本思想和链式栈的实现差不多,比较不同的一点也是需要注意的一点是,链式队列的指向指针有两个,一个是队头指针(front),一个是队尾指针(rear),注意指针的指向是从 ...
- C语言链表全操作(增,删,改,查,逆序,递增排序,递减排序,链式队列,链式栈)
一,数据结构——链表全操作: 链表形式: 其中,每个节点(Node)是一个结构体,这个结构体包含数据域,指针域,数据域用来存放数据,指针域则用来指向下一个节点: 特别说明:对于单链表,每个节点(Nod ...
- c++实验5 顺序/链式队列
链式队列及循环队列 1.循环队列的实现(请采用模板类及模板函数实现) [实现提示] 同时可参见教材p65-p67页的ADT描述及算法实现及ppt)函数.类名称等可自定义,部分变量请加上学号后3位.也可 ...
- java实现链式队列
java实现链式队列...比较简单 package datastruct; public class QueueLink implements Queue { // 定义一个节点内部类 class N ...
随机推荐
- Ubuntu网络重置
Ubuntu网络重置 >重置网络 sudo service network-manager stop sudo rm /var/lib/NetworkManager/NetworkManager ...
- gym102586C Sum Modulo
题意: 给你 \(n,m,k\) 以及\(p_i(1\le i\le n)\) ,保证 \(\sum p_i=1\) 你有一个数 \(X\),一开始 \(X=0\) 每次你会生成一个随机数 \(A\) ...
- xlwings.copy两种用法和匹配超链接
第一种复制整个sheet页,不能覆盖同名sheet,需先删除.name新sheet也名称 after复制后的位置wb.sheets('增量机会-体外刷新导入').copy(name='快照版本(勿动) ...
- vs2010 项目属性窗口
配置一些项目编译输出的类型(比如是编库还是编demo).编译输出结果的名字.编译输出结果的路径等等 Configuration Properties->General 配置在编译工程所需要的头文 ...
- 2022-04-13内部群每日三题-清辉PMP
1项目经理正在执行一个资源有限,期限严格的引人注目的项目.该项目目前落后于进度,对资源平衡的审查显示,一些资源被过度分配.请问项目经理应该怎么办? A.重新分配来自另一个项目不必要的资源 B.为延迟的 ...
- kiaba启动报 FATAL ResponseError: access_control_exception,ES报:java.lang.SecurityException: access denied ("java.io.FilePermission"“文件地址”)
查了许多博客,找的头都大了还是没有发现问题的根源,之前以为是插件包文件名改了之后还是一样,当我差点放弃的时候 一位博主的瞬间把我点醒https://www.cnblogs.com/personblog ...
- 某个灰产远程调用的script源码
访问一个老域名,可能是释放了被所灰产的的注册了,跳转简单扒下他们的源码. 主要是三段script代码,第一段是百度自动推送代码,第二段是站长统计代码,第三段则是远程调用断码. <html xml ...
- 杭电oj 蟠桃记
Problem Description 喜欢西游记的同学肯定都知道悟空偷吃蟠桃的故事,你们一定都觉得这猴子太闹腾了,其实你们是有所不知:悟空是在研究一个数学问题!什么问题?他研究的问题是蟠桃一共有多少 ...
- 手写JS深拷贝
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Feign熔断
在Feign中使用 @EnableFeignClients中已经默认打开了断路器功能,所以这里的启动类上不需要再加@EnableCircuitBreaker注解 只需要在@FeignClient中为f ...