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 ...
随机推荐
- tfidf与bm25
https://www.cnblogs.com/johnnyzen/p/11298273.html 前言 本文主要是对TF-IDF和BM25在公式推演.发展沿革方面的演述,全文思路.图片基本来源于此篇 ...
- webpack-dev-middleware改造成koa中件间
const webpackDev = require('webpack-dev-middleware'); function applyMiddleware(middleware, req, res) ...
- Python学习笔记文件读写之遍历目录树
随笔记录方便自己和同路人查阅. #------------------------------------------------我是可耻的分割线--------------------------- ...
- WPFprism框架
1. Prism 简介Prism 是一个用于构建松耦合.可维护和可测试的 XAML 应用的框架,它支持所有还活着的基于 XAML 的平台,包括 WPF.Xamarin Forms.WinUI 和 ~~ ...
- js给ul下面所有的li追加类名
- 前端之JavaScript(Js)基础
JavaScript,简称Js HTML三把利剑之一,浏览器可解析Js,看着和Java像,实则和Java并无关系,和Python.Go.C++等都是一门独立的语言. 一种轻量级的编程语言. 可插入 H ...
- 【JVM】学习JVM垃圾回收理论
参考链接:https://www.cnblogs.com/aspirant/p/8662690.html 一,垃圾回收算法 JVM内存结构:程序计数器.虚拟机栈.本地方法栈.堆区.方法区 1,引用计数 ...
- react 学习笔记更新2.0
1.性能优化 1.shouldComponentUpdate 在render调用之前会调用shouldComponentUpdate,不建议在 shouldComponentUpdate() 中进行深 ...
- google api 后端打点上报
https://developers.google.com/analytics/devguides/collection/protocol/ga4/sending-events?client_type ...
- 招新题流程简介(WS2812)
22物电科协软件招新题学习流程 有错误或者不当的地方请在评论区指出 题目简介 使用stm32驱动单一ws2812b灯珠实现呼吸灯效果,驱动及实现方法不限 演示效果 快速入门,在stm32核心板上点灯 ...