#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++ 数据结构链式队列的定义与实现的更多相关文章

  1. C语言数据结构-链式队列的实现-初始化、销毁、清空、长度、队列头元素、插入、删除、显示操作

    1.数据结构-链式队列的实现-C语言 typedef struct QNode { int data; struct QNode *next; }QNode,*QueuePtr; typedef st ...

  2. 数据结构-链式队列-C++

    用链表搭建的栈与队列相对简单,队列的特点是先进先出,不啰嗦了,由于代码比较简单,相信光顾的人不会太多,下面直接贴代码. 头文件 #ifndef QUEUELI_H #define QUEUELI_H ...

  3. 利用链式队列(带头节点)解决银行业务队列简单模拟问题(c++)-- 数据结构

    题目: 7-1 银行业务队列简单模拟 (30 分)   设某银行有A.B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 —— 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客 ...

  4. 数据结构Java实现07----队列:顺序队列&顺序循环队列、链式队列、顺序优先队列

    一.队列的概念: 队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在其一端进行插入操作在其 ...

  5. 数据结构----队列:顺序队列&顺序循环队列、链式队列、顺序优先队列

    一.队列的概念: 队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在其一端进行插入操作在其 ...

  6. C ~ 链式队列与循环队列

          此处的链式与循环队列可以应用于BFS和树的层序遍历.下面是对其结构和基本操作的程序描述. 1.循环队列 解决循环队列的队空和队满的方法: [1].增加一个参数count,用来记录数组中当前 ...

  7. C++数据结构之链式队列(Linked Queue)

    C++数据结构之链式队列,实现的基本思想和链式栈的实现差不多,比较不同的一点也是需要注意的一点是,链式队列的指向指针有两个,一个是队头指针(front),一个是队尾指针(rear),注意指针的指向是从 ...

  8. C语言链表全操作(增,删,改,查,逆序,递增排序,递减排序,链式队列,链式栈)

    一,数据结构——链表全操作: 链表形式: 其中,每个节点(Node)是一个结构体,这个结构体包含数据域,指针域,数据域用来存放数据,指针域则用来指向下一个节点: 特别说明:对于单链表,每个节点(Nod ...

  9. c++实验5 顺序/链式队列

    链式队列及循环队列 1.循环队列的实现(请采用模板类及模板函数实现) [实现提示] 同时可参见教材p65-p67页的ADT描述及算法实现及ppt)函数.类名称等可自定义,部分变量请加上学号后3位.也可 ...

  10. java实现链式队列

    java实现链式队列...比较简单 package datastruct; public class QueueLink implements Queue { // 定义一个节点内部类 class N ...

随机推荐

  1. msyql查询各部门性别人数,如果某个部门没有男生或女生则用0代替

    根据部门或者班级查询男女各多少人,可以直接使用: select org_code as orgCode, sex, count(*) as totalCount from blade_student ...

  2. 全国分乡镇第六次人口普查数据shp数据库省市区县街道

    全国分乡镇第六次人口普查数据shp数据库省市区县街道 ==名称:全国第六次人口普查任意十个乡镇的乡镇界地图==数据说明:精确到乡镇级别.==数据:面数据,属性列表(乡镇名.乡镇代码,第六次人口普查分乡 ...

  3. vue3.0使用富文本编辑器VueQuill

    1. npm install @vueup/vue-quill@alpha --save 2. 在main.js中全局引入 import { QuillEditor } from '@vueup/vu ...

  4. SAP 内外交货单过账

    * 交货单过账  DATA:  LS_HEADER_DATA           TYPE BAPIIBDLVHDRCON,              LS_HEADER_CONTROL   TYPE ...

  5. sqlserver存储过程学习

    存储过程学习  一.定义变量 --简单赋值  declare @a int set @a=5  print @a     --使用select语句赋值  declare @user1 nvarchar ...

  6. 整数中出现1的次数(从1到n整数中1出现的次数)

    offer_31 概要:整数中出现1的次数(从1到n整数中1出现的次数) 题目描述 求出113的整数中1出现的次数,并算出1001300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有 ...

  7. 尝试在Ubuntu中安装Emacs遇到的问题

    出现具体问题 今日学习安装emacs在Ubuntu19.04当中 安装详见下方帖子: 链接: 如何在Ubuntu中安装Emacs. 安装遇到问题,即 sudo add-apt-repository p ...

  8. Rsync等传统文件同步方式已过时 如何寻找替代产品?

    Rsync原本是在Linux系统下面的一个文件同步协议,随着技术的发展,它也有其它版本的,如Windows和AIX.HPUX下面都有相应的版本可以支持的.它有很多版本都是免费的,配置也不复杂,所以很多 ...

  9. Linux环境使用Docker安装MySql

    系统环境: CentOS 7.6 64位(同样适用于Ubuntu) 安装步骤: 1.创建文件夹 /home/docker/mysql/config /home/docker/mysql/data 2. ...

  10. 生产者消费者demo

    using System; using System.Collections.Generic; using System.Threading; namespace 生产者消费者 { class Pro ...