前言


  

首先,我们先来做一道解密题:一串数列 7  6  8  6  6  7  0  4  1  ,规定一个回收站,把第一个数删除,添加到回收站里,然后把第二个数排到队伍最末尾,把第三个删除,添加到回收站里,然后把第四个数排到队伍最末尾....以此类推。照刚才的顺序,把回收站里被删除的数以及添加到队伍末尾的几个数按顺序串在一起,就实现了一个数列:7 8 6 0 1 6 7 4 6 (友情提示这是一个QQ号),像这样一个允许队列的首部进行删除操作,简称出队,队列的尾部允许添加插入操作的线性结构,我们称之为队列。

过程


  1.进行数的删除。(出队)

    这里我们有两种办法:第一种,后面的数据覆盖前面的数据,实现删除。像排队一样,第一个人买好票了,后面的全部人向前走一步。但是这么做太浪费时间了。为了解决时间浪费问题,所以我们设置两个标志变量,head & tail,一个去记录首位置,一个去记录尾位置。head++,首位置向前进一位,相当于原先的head位置的数据被删除了。这里需要注意的是,若存储的是9位数,则tail=9,把数据的后一位的位置标志为tail,我们规定当首位置与末位置重合时,这个队列为空,当只有一个元素时,tail=2,head=0,这样才能避免无法跳出循环的问题。

  2.进行数的添加插入。(入队)

    同理,tail++的同时进行赋值操作,把head位置的数据的后一位数据赋值给tail位置的数据上。

  3.再出队

    再进行一次head++,这一步很容易忘记。为什么要有这一个步呢?那么只有在while循环中head+2,tail+1,才能实现队列为空,输出队列的目的。

图解(以数列  6 3 1 7 5 8 9 2 4 为例,从a[1]开始储存数据):

  

代码实现



/**********************************************************************
实现一个queue,对下面九个数进行排序
输入: 6 3 7 1 5 8 9 2 4
输出: 6 7 5 9 4 1 2 8 3
**********************************************************************/
#include<stdio.h>
typedef struct queue
{
int data[17];
int head;
int tail;
}q;
int main()
{
q a;
int i;
a.head=0;
a.tail=0;
//input
for(i=0;i<9;i++)
{
scanf("%d",&a.data[i]);
a.tail++;
}
//queue sort
while(a.head!=a.tail)
{
for(i=0;i<9;i++)
{
a.data[a.tail++]=a.data[++a.head];
a.head++;
}
}
//output
for(i=0;i<a.tail;i=i+2)
{
printf("%d ",a.data[i]);
}
printf("\n");
return 0;
}

  

队列queue(1) 结构体实现队列的更多相关文章

  1. Windows消息队列(优先队列,结构体中放比较函数)

    Windows消息队列 消息队列是Windows系统的基础.对于每个进程,系统维护一个消息队列.如果在进程中有特定事件发生,如点击鼠标.文字改变等,系统将把这个消息加到队列当中.同时,如果队列不是空的 ...

  2. c 结构体的队列

    头文件 lsg_queue.h #pragma once #include<stdbool.h> /* 链式栈接口的定义头文件 */ #define true 1 #define fals ...

  3. 队列queue(2):链表实现队列

    基本概念 队列是只允许在一端进行插入操作,另一端进行删除操作的线性表. 我们规定,允许删除的叫做队首"head",允许插入的叫做队尾"tail". 基本操作 我 ...

  4. 队列Queue:任务间的消息读写,安排起来~

    摘要:本文通过分析鸿蒙轻内核队列模块的源码,掌握队列使用上的差异. 本文分享自华为云社区<鸿蒙轻内核M核源码分析系列十三 消息队列Queue>,作者:zhushy . 队列(Queue)是 ...

  5. STL中的单向队列queue

    转载自:http://blog.csdn.net/morewindows/article/details/6950917 stl中的queue指单向队列,使用时,包含头文件<queue>. ...

  6. Tornado使用-队列Queue

    1.tornado队列的特点 和python标准队列queue相比,tornado的队列Queue支持异步 2.Queue常用方法 Queue.get() 会暂停,直到queue中有元素 Queue. ...

  7. Python 单向队列Queue模块详解

    Python 单向队列Queue模块详解 单向队列Queue,先进先出 '''A multi-producer, multi-consumer queue.''' try: import thread ...

  8. [数据结构]——链表(list)、队列(queue)和栈(stack)

    在前面几篇博文中曾经提到链表(list).队列(queue)和(stack),为了更加系统化,这里统一介绍着三种数据结构及相应实现. 1)链表 首先回想一下基本的数据类型,当需要存储多个相同类型的数据 ...

  9. [ACM训练] 算法初级 之 数据结构 之 栈stack+队列queue (基础+进阶+POJ 1338+2442+1442)

    再次面对像栈和队列这样的相当基础的数据结构的学习,应该从多个方面,多维度去学习. 首先,这两个数据结构都是比较常用的,在标准库中都有对应的结构能够直接使用,所以第一个阶段应该是先学习直接来使用,下一个 ...

随机推荐

  1. 使用一个for循环将N*N的二维数组的所有值置1

    <?php // 使用一个for循环将N*N的二维数组的所有值置1 $n = ; $a = []; ;$i<$n*$n;$i++){ $a[$i/$n][$i%$n] = ; } prin ...

  2. bootstrap栅格布局学习历程

    了解一个东西.他叫什么?他由什么组成,能做什么? 现在响应式的网站(在不同分辨率下有不同的布局)很瘦欢迎.优点:1.解决设备之间的差异化展示缺点:a.兼容性代码多,工作量大,加载速度受到影响;b.用户 ...

  3. Failed to call ScheduleShutdown in logind, proceeding with immediate shutdown: Access denied

    装了fedora23后定时关机:sudo shutdown -h +60 弹出如下信息后立刻就关机了: Failed to call ScheduleShutdown in logind, proce ...

  4. eclipse中Maven工程使用Tomcat7以上插件

    Maven中使用tomcat:run命令默认是使用Tomcat6的版本, 现在要用到Tomcat7以上的版本,在eclipse的Maven工程中配置如下 第一步:在项目的pom里面加入如下配置: 官网 ...

  5. TFboy养成记 CNN

    1/先解释下CNN的过程: 首先对一张图片进行卷积,可以有多个卷积核,卷积过后,对每一卷积核对应一个chanel,也就是一张新的图片,图片尺寸可能会变小也可能会不变,然后对这个chanel进行一些po ...

  6. 从a标签传值中文乱码解决

    <% out.print(new String(request.getParameter("a标签的参数").getBytes("iso8859-1"), ...

  7. 《Linux命令行与shell脚本编程大全》第二十二章 gawk进阶

    gawk是一门功能丰富的编程语言,你可以通过它所提供的各种特性来编写好几程序处理数据. 22.1 使用变量 gawk编程语言支持两种不同类型的变量: 内建变量和自定义变量 22.1.1 内建变量 ga ...

  8. Codeforces 890C - Petya and Catacombs 模拟

    C. Petya and Catacombstime limit per test1 secondmemory limit per test256 megabytesinputstandard inp ...

  9. 天梯赛 L3-013 非常弹的球 找规律

    L3-013. 非常弹的球 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 俞勇(上海交通大学) 刚上高一的森森为了学好物理,买了一个 ...

  10. html和css的区别

    html(结构) Hyper Text Markup Language(超文本标记语言)用于定义文档内容结构 1.该语言写的代码通常会被浏览器解析执行 2.超文本:不止包括文本,还有图片.链接.音乐. ...