前言


  

首先,我们先来做一道解密题:一串数列 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. Linux 性能搜集【linux_reports-cpu/memory/disks/network】

    为方便问题发生后,问题原因的分析排查,我们可以在服务器中事先部署如下脚本,方便故障发生后,问题原因的分析排查 脚本部署方法: 1.将脚本[linux_reports.sh]上传到服务器 2.登陆虚拟机 ...

  2. python paramiko模块 用密钥传输

    VM_129_78_suse:/home/remote_paramiko # cat remote.py #!/usr/bin/env python import paramiko linux_cmd ...

  3. 5)C语言函数(C自考学习)

    函数的概念 在一个程序中,如果在不同地点多次执行某项操作,就可以把完成这项操作的程序段从程序中独立出来,定义成函数,而原来程序中凡需要进行这个操作的程序段可以只用"函数调用"来替代 ...

  4. [贪心][高精]P1080 国王游戏(整合)

    题目描述 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排成一排,国王站在队伍的最 ...

  5. 《java.util.concurrent 包源码阅读》02 关于java.util.concurrent.atomic包

    Aomic数据类型有四种类型:AomicBoolean, AomicInteger, AomicLong, 和AomicReferrence(针对Object的)以及它们的数组类型, 还有一个特殊的A ...

  6. Nvidia TX2 Robot 环境配置记录

    p.p1 { margin: 0.0px 0.0px 2.0px 0.0px; font: 14.0px "Helvetica Neue"; color: #454545 } p. ...

  7. BST 解析 (一)

    这篇博文主要初步介绍Binary Search Tree(BST)的一些基本功能以及应用场景,由于BST的相关知识比较多,下一节会接着补充BST的一些功能.这一节主要分为以下三个要素: BST 的定义 ...

  8. 02-线性结构3 Reversing Linked List

    题目 Sample Input: 00100 6 4 00000 4 99999 00100 1 12309 68237 6 -1 33218 3 00000 99999 5 68237 12309 ...

  9. Spring+SpringMVC+MyBatis+easyUI整合进阶篇(十一)redis密码设置、安全设置

    警惕 前一篇文章<Spring+SpringMVC+MyBatis+easyUI整合进阶篇(九)Linux下安装redis及redis的常用命令和操作>主要是一个简单的介绍,针对redis ...

  10. Android 7.0 中 ContentProvider 实现原理

    欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 作者:汪毅雄 导语: 本文描述了ContentProvider发布者和调用者这两在Framework层是如何实现的. 作为Android的四大 ...