描述

用带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点(不设头指针)。实现该队列的入队出队以及判断队列是否为空操作。

输入

多组数据,每组数据有两行。第一行为两个整数n和m,n表示入队序列A的长度(n个数依次连续入队,中间没有出队的情况),m表示出队序列B的元素数量(m个数依次连续出队,中间没有入队的情况)。第二行为序列A(空格分隔的n个整数)。当n和m都等于0时,输入结束。

输出

对应每组数据输出一行。每行包括m+1个整数,前m个数代表出队序列B的各个整数,最后一个整数表示队列是否为空,队列为空输出0,不为空输出1。整数之间用空格分隔。

输入样例 1

5 3
1 3 5 3 6
4 4
-1 2 3 4
0 0

输出样例 1

1 3 5 1
-1 2 3 4 0

思路:

使用链表,插入时使用尾插法。因为没有头节点,所以实际上用for循环输入链表信息的时候要少一次。并且在插入完毕后,记得让尾节点rear->next=l以实现循环。同时返回尾指针rear,省去下一次遍历的麻烦。

输出时,新建一个头指针,让头指针和尾指针都指向第一个元素,用i控制遍历次数输出。同时,如果出队的次数大于入队的次数,那么队列里的元素一定都输出过一次(”清空“)了,输出0,反之输出1。

代码:

#include<iostream>
using namespace std;
typedef struct LNode
{int data;struct LNode* next;
}*linklist, LNode;
linklist Insert(linklist& l,int n)
{l = new LNode;l->next = NULL;cin >> l->data;linklist rear=l;for (int i = 1; i < n; i++){linklist p = new LNode;cin >> p->data;p->next = NULL;rear->next = p;rear = p;}rear->next = l;return rear;
}
void Show(linklist rear,int n,int m)
{linklist head = rear->next;rear = rear->next;int i = 0;while (i!=m){cout << rear->data << " ";rear = rear->next;i++;}if (m >= n)cout << 0 << endl;elsecout << 1 << endl;
}
int main()
{int m, n;while (cin >> n >> m && m != 0 && n != 0){linklist l;Show(Insert(l, n), n, m);}return 0;
}

2007基于循环链表的队列的基本操作(C++)相关推荐

  1. (C语言版)栈和队列(一)——实现链式栈和链式队列的基本操作以及遇到的问题

    http://blog.csdn.net/fisherwan/article/details/20055179 首先要感谢这位大牛的一篇博客,地址如下:http://blog.csdn.net/hgu ...

  2. 附加判定标志的循环队列的基本操作

    附加判定标志的循环队列的基本操作 描述 假设以数组Q[m]存放循环队列中的元素, 同时设置一个标志tag,以tag== 0和tag == 1来区别在队头指针(front)和队尾指针(rear)相等时, ...

  3. 基于链表实现队列(基于Java实现)

    title: 基于链表实现队列(基于Java实现) tags: 链表 队列 基于链表的队列实现方法的原理: 基于链表的实现,跟前面的基于数组实现一样,同样也需要两个指针:head指针和tail指针.它 ...

  4. 基于数组实现队列(基于Java实现)

    title: 基于数组实现队列(基于Java实现) tags: 数组 队列 基于数组实现队列的原理: 基于数组实现的队列,使用两个指针,一个是head指针 ,指向的是队头:一个是tail指针,指向队尾 ...

  5. 基于linux操作系统Mysql的基本操作(一)

    基于linux操作系统Mysql的基本操作(一) 背景介绍:mysql软连接的建立,ln –s /usr/local/mysql/bin/mysql  /usr/bin 1.本地登录,命令: #mys ...

  6. java栈和队列验证回文串_栈和队列的基本操作及其应用(回文判断)

    实验二栈和队列的基本操作及其应用 一.实验目的 1.掌握栈和队列的顺序存储结构和链式存储结构,以便在实际中灵活应用. 2.掌握栈和队列的特点,即后进先出和先进先出的原则. 3.掌握栈和队列的基本运算, ...

  7. 顺序循环队列的基本操作

    [问题描述] 实现循环队列的基本操作.(循环队列最大长度不超过20) [输入形式] 输入若干个整数(以空格分隔,非整数结束输入),其中0表示做出队操作,不为0的整数为入队元素. [输出形式] 若出队错 ...

  8. 队列的基本操作_算法设计:数据结构-队列

    一.队列 1.队列的概念 队列是一种"先进先出(first in first out)"的数据结构,它是一种有序线性表的抽象数据类型.队列在计算机 领域的应用也相当的广泛,例如计算 ...

  9. 环形队列的输出_循环队列的基本操作详细讲解

    实验学时: 2 实验类型: (设计型) 一.实验目的 1. 理解并掌握队列的逻辑结构和顺序存储结构,了解循环队列的特点: 2. 掌握循环队列中基本操作的相关算法: 3. 编程实现相关算法: 4. 学会 ...

最新文章

  1. Android pms权限管理,Android权限机制
  2. python编程未来就业方向有哪些?
  3. 枚举 + 进制转换 --- hdu 4937 Lucky Number
  4. python游戏代码运行不了_无法使我的tic tac toe游戏在python中正确运行
  5. 一个文件合成器的代码
  6. python123m与n的数学运算_python小白进阶之路三——循环结构入门练习+Random库练习...
  7. apache开源项目--nutch
  8. Ubuntu16.04安装后开发环境配置和常用软件安装
  9. Intellij IDEA 测试scala程序的时候: Test is already defined as object Test
  10. 造轮子:前端模板引擎
  11. nvidia卸载程序失败_Adobe软件卸载与常见问题解决方案
  12. 线性链表头插法,插入,删除操作(完整代码)
  13. 思科CCNP在OSPF中设置LSA的简单命令汇总
  14. 如何高效使用Micropython看你喜欢看的视频?【下】(生成图片帧和WIFI传输播放)
  15. 01背包,完全背包,多重背包
  16. 虚拟路由器冗余协议(VRRP)
  17. 服务器,ping没问题,请求经常超时、时好时坏的解决办法
  18. 常用的web服务器软件整理
  19. 查看lv大小 linux,扩展AIX上的LV大小
  20. Matlab 安装免费提供的 MinGW-w64 C/C++ 编译器

热门文章

  1. 火狐浏览器表单不跳转_表单button的outline在firefox浏览器下的问题
  2. stm32单片机屏幕一直闪_用STM32做一个微型掌上示波器项目——终于鼓起在大牛前献丑的无比勇气...
  3. 用js实现千位分隔符
  4. wangEditor-3.1.1 自己扩展的,增加代码块行号
  5. 小汤学编程之JAVA经典例题——嵌套集合
  6. VC++ HIDAPI实现USB数据读写
  7. 精通SpringBoot---整合RabbitMQ消息队列
  8. Docker应用五:使用Dockerfile部署MongoDB
  9. http之SessionCookie
  10. 值传递,引用传递,指针传递