#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. 想通过anconda来创建一个虚拟环境,结果发现一直报错。An unexpected error has occurred. Conda has prepared the above report.

    本来想要通过conda create -n drf-admin python==3.8 来创建一个虚拟环境,结果一直报错. An unexpected error has occurred. Cond ...

  2. hierarchical-clustering

    https://ww2.mathworks.cn/help/stats/hierarchical-clustering.html https://ww2.mathworks.cn/help/stats ...

  3. SQL预编译

    1.数据库预编译起源 (1)数据库SQL语句编译特性: 数据库接受到sql语句之后,需要词法和语义解析,优化sql语句,制定执行计划.这需要花费一些时间.但是很多情况,我们的一条sql语句可能会反复执 ...

  4. Java语言程序设计课后小结

    运行结果:Size s = Size.SMALL;此时,s = SMALL.Size t = Size.LARGE:此时t = LARGE. System.out.println(s==t).由于s和 ...

  5. The `.update()` method does not support writable nestedfields by default. Write an explicit `.update()` method for serializer `...`, or set `read_only=True` on nested serializer fields.解决办法

    原因 Serializers中,外表的字段如source="group.title"不能进行写入操作 解决办法 将外表字段设置为read_only=True,此时可能有人就会问了: ...

  6. BBS 项目分析

    项目开发流程 # 1.核心 文章的增删改查 # 2.表关系分析 确定表的数量,确定表的基础字段,最后确定表的外键字段 # 3.表 1.用户表 2.个人站点表 3.文章表 4.文章分类表 5.文章标签表 ...

  7. js 时间 日期

    date.getYear(); // 获取当前年份(2 位) date.getFullYear(); // 获取完整的年份(4 位, 1970-????) date.getMonth(); // 获取 ...

  8. python中利用openpyxl、xlsxwriter库操作Excel

    删除Excel指定行或列 使用openpyxl库操作Excel,可以删除指定的列 import openpyxl def excel_delete(fp): wb = openpyxl.load_wo ...

  9. Navicat连接Oracle时报错ORA-28547:完美解决

    1. 先用你的IDEA或者别人的连接到oracle数据库(为了查询版本) 1.1 查询版本SQL:select * from v$version; 2. 引入对应的oci.dll文件 链接:https ...

  10. SecPoint Port Scanner v4.0

    SecPoint Port Scanner v4.0 Usage: portscanner <IP> or <hostname> [options] 选项: -p <st ...