假设以带头结点的循环链表(看清楚了是链表,不是循环队列,小编一开始就看错了,浪费了挺多时间)表示队列,并且只设一个指针指向队尾元素结点(注意:不设头指针),试编写相应的置空队列、判断队列是否为空、入队和出队等算法。

#include<iostream>
using namespace std;
//定义队列的链式存储结构
typedef struct QNode{int data;struct QNode *next;
}QNode, *QueuePtr;
//只设一个指向队尾元素的指针
typedef struct {QueuePtr rear;//记录链表长度int s;
}LinkQueue;
//交互页面
void ShowMenu() {cout << "**************循环链表表示队列***************" << endl;cout << "******************0.入队*********************" << endl;cout << "******************1.出队*********************" << endl;cout << "******************2.置空队列*****************" << endl;cout << "******************3.打印队列*****************" << endl;cout << "*************本试验仅可进行一次**************" << endl;}
//置空队列
void InitQueue(LinkQueue &Q) {Q.s = 0;Q.rear = Q.rear->next;while (Q.rear != Q.rear->next) {QueuePtr s= Q.rear->next;Q.rear->next = s->next;delete s;}system("pause");system("cls");
}
//判断队是否为空,空返回1,否则返回0
bool EmptyQueue(LinkQueue Q) {return Q.rear->next->next == Q.rear->next;
}
//入队
void EnQueue(LinkQueue &Q) {int m;cout << "请输入您需要插入元素的个数" << endl;cin >> m;Q.s += m;cout << "请依次输入您需要添加的元素" << endl;for (int i = 0;i < m;i++) {//局部变量初始化QueuePtr p=new QNode;cout << "请输入第"<<(i+1)<<"个元素" << endl;cin >> p->data;p->next = Q.rear->next;Q.rear->next = p;Q.rear = p;}system("pause");system("cls");
}
//出队
void DelQueue(LinkQueue &Q) {int n;cout << "请输入您需要删除元素的个数" << endl;cin >> n;for (int i = 0;i < n;i++) {if (Q.rear->next->next == Q.rear->next) {cout << "队列已空,无法继续删除元素" << endl;break;}QueuePtr p = Q.rear->next->next;//队列中只有一个结点if (p == Q.rear) {Q.rear = Q.rear->next;Q.rear->next = p->next;Q.s--;}else {Q.rear->next->next = p->next;Q.s--;}}system("pause");system("cls");
}
//打印队列的所有元素,打印后就退出系统
void PrintQueue(LinkQueue &Q) {//判断队列是否为空if (EmptyQueue(Q))cout << "队列为空,无法打印" << endl;else {QueuePtr q = Q.rear->next->next;for(int i=0;i<Q.s;i++) {cout << q->data;cout << "\t";q = q->next;}}system("pause");exit(0);
}
int main() {LinkQueue Q;Q.rear = new QNode();Q.s = 0;Q.rear->next = Q.rear;int i;while (1) {ShowMenu();cout << "请输入您的操作" << endl;cin >> i;switch (i){case 0: {EnQueue(Q);break;}case 1:{DelQueue(Q);break;}case 2: {InitQueue(Q);break;}case 3:{PrintQueue(Q);break;}default:break;}}
}






这里做个解释,为什么这次和上次的系统都只能做一次就必须退出系统呢,因为两个系统都没有做交互式的文件存储删除,每次的数据无法做保留,在页面多做几次试验也是无意义的!

以带头结点的循环链表为队列,并且只设一个指针指向队尾元素相关推荐

  1. 假设以带头结点的循环链表表示队列_[leetcode链表系列]2 删除链表中的节点

    复习链表的插入 链表的一个节点是由数据域和指针域构成,指针域的地址值为下个元素的地址.那么我们需要插入或者删除一个元素怎么处理呢? 先查看原始链表结构,准备将结点x插入链表中. 此时我们需要先保存n节 ...

  2. 假设以带头结点的循环链表表示队列_真香!20张图揭开「队列」的迷雾,一目了然...

    https://mp.weixin.qq.com/s/GYQrxBOasKpvF4uZsMdOSw​mp.weixin.qq.com 队列的概念 首先我们联想一下链表,在单链表中,我们只能对他的链表表 ...

  3. 假设以带头结点的循环链表表示队列_数据结构·链表(C实现)

    1.前言 <数据结构>是每个程序猿都应该掌握的"必修课",是一门研究"计算机如何存储.数组数据方式"的学科.它虽不及其他招式花哨.但却总能在关键时刻 ...

  4. 假设以带头结点的循环链表表示队列_关于反转链表,看这一篇就够了!

    本期例题:LeetCode 206 - Reverse Linked List[1](Easy) 反转一个单链表. 示例: 输入: 1->2->3->4->5->NULL ...

  5. 假设以带头结点的循环链表表示队列_JavaScript数据结构之链表--设计

    上一篇文章中介绍了几种常见链表的含义,今天介绍下如何写出正确的链表代码. 如何表示链表 我们一般设计的链表有两个类.Node 类用来表示节点,LinkedList 类提供了一些辅助方法,比如说结点的增 ...

  6. 1.回文是指正读和反读均相同的字符序列,如“abba”和“abdba”均是回文,但“good”不是回文。试写一个算法判定给定的字符向量是否为回文。(提示:将一半字符入栈。)2.假设以带头结点的循环链

    typedef struct StackNode {char date;struct StackNode* next; }*LinkStack,StackNode; //初始化链栈 void Init ...

  7. 一个链表不知道头结点,有一个指针指向其中一个结点,请问如何删除这个指针指向的结点

    将这个节点复制成下一个节点的值,然后删除下一个节点 node *p; // 当前节点 node *q; q = p -> next; p.data = q.data; // 复制q节点到p p ...

  8. 头插法建立单链表(带头结点和不带头结点)

    头插法建立单链表(带头结点) #include <stdio.h> #include <stdlib.h> typedef struct LNode{        //定义单 ...

  9. 队列练习之Example005-Q 是一个队列,S 是一个空栈,实现将队列中的元素逆置的算法

    Example005 题目 Q 是一个队列,S 是一个空栈,实现将队列中的元素逆置的算法. 分析 主要考查对队列和栈的特性与操作.由于对队列的一系列操作不可能将其中的元素全部逆置,而栈可以将入栈的元素 ...

  10. 栈顶指针和队尾指针指向当前位置和指向下一个位置的区别?——轻松搞懂栈和队列指针的指向问题

    我们先看一下队列的队尾指针指向队尾元素的当前位置的入队操作: 可以看到,当队尾指针指向的是队尾元素时,我想加入一个新的元素,这时直接放在队尾指向的位置是不可以的,因为这个位置已经有元素了,所以先要对队 ...

最新文章

  1. android Button背景高度被拉伸问题--解决方案
  2. WCF:如何将net.tcp协议寄宿到IIS
  3. vs中列表分页符代码_电脑办公技巧Excel中Ctrl+K的使用技巧(十二)/Word2016中快速删除分页符与空白页的方法...
  4. python含金量最高的考试_中国最难的五大考试,第二个含金量最高,考过年薪30万起!...
  5. C语言学习:snprintf()函数
  6. 程序员面试金典 - 面试题 04.02. 最小高度树(二叉搜索树中序遍历)
  7. 中国信通院专家当选ITU-T分布式账本焦点组副主席
  8. iOS原生地图开发进阶——使用导航和附近兴趣点检索
  9. 使用QtXlsx读写Excel文件
  10. 74.android 简单的跳转到小米安全中心首页和小米安全中心的权限管理
  11. 网页动态背景:随鼠标线条变动
  12. gflags简明使用指南
  13. Python之GUI编程 实现界面化的词云图生成器.exe
  14. Java经验者的面经
  15. 好斌c语言教程,C语言学习大纲__斌(讲解).doc.doc
  16. hihoCoder #1498 : Diligent Robots【数学】
  17. python函数求导 不使用模块_Python sympy 模块常用功能(二)
  18. 独立站如何做好社媒营销
  19. 如何快速画出霍夫曼树
  20. AVR单片机与C语言的一些入门简要概述

热门文章

  1. 课题学习(一)----静态测量
  2. 数值计算/数值分析 python实践
  3. 帅地训练营——Java SE 基础知识整理
  4. 软件测试-软件缺陷有哪些,一文贯彻到底
  5. 计算机求职英语作文,[计算机专业英语求职信]计算机求职信英语作文3篇
  6. 设置iTerm2为默认终端
  7. Python入门实例验证及结果之实例3 天天向上的力量 ## 数字类型及操作
  8. 性价比最高的护眼台灯有哪些?平价护眼台灯推荐
  9. Web前端前景可期,未来4大发展趋势分析!
  10. Web3 招聘 | Bitget、MyShell、imToken、Arweave 多项目招聘中