前言


  

首先,我们先来做一道解密题:一串数列 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. Struts2-046验证脚本

    下面分享一下Struts2-046验证的python脚本 #encoding:utf-8 import urllib2 from poster.encode import multipart_enco ...

  2. [转] 深刻理解Python中的元类(metaclass)

    非常详细的一篇深入讲解Python中metaclass的文章,感谢伯乐在线-bigship翻译及作者,转载收藏. 本文由 伯乐在线 - bigship 翻译.未经许可,禁止转载!英文出处:stacko ...

  3. IBM的websphere MQ的c#使用

    1.关于websphere MQ的常用名词(针对Websphere MQ7.5版本) 队列管理器:为应用程序提供消息传递服务的程序.使用消息队列接口(MQI)的应用程序可以将消息放置到队列并可从队列中 ...

  4. ssh密钥登录

    一.生成密钥对(两种方式)并配置 方式1:使用ssh-keygen(1)生成并配置 (1)生成密钥对 [root@iZwz9catu2mrq92b07d1d0Z ~]# ssh-keygen -t r ...

  5. lua API函数大全

    Lua5.1中的API函数 lua_State* luaL_newstate()Lua脚本的编译执行是相互独立的,在不同的线程上执行.通过luaL_newstate()函数可以申请一个虚拟机,返回指针 ...

  6. Less的转义字符

    Less的转义字符 有时候,当需要引入无效的CSS语法或Less不能识别的字符,就需要使用转义字符.此时,就可以在字符串前面加一个 ~,并将需要转义的字符串放在 "" 中.格式为: ...

  7. mysql的复杂查询,连接数据库

    1.MySQL的工具:Navicat 优点:方便2.数据库的导入 mysqldump -u用户名 -p密码 数据库名称 > 导出文集路径 #结构+数据 mysqldump -u用户名 -p密码 ...

  8. [LeetCode] N皇后问题

    LeetCode上面关于N皇后有两道题目:51 N-Queens:https://leetcode.com/problems/n-queens/description/ 52 N-Queens II: ...

  9. 快速上手使用Maven

    maven的相关命令 mvn archetype:create :创建 Maven 项目 mvn compile :编译源代码(编译到target文件夹中) mvn test-compile :编译测 ...

  10. ChatterBot之使用mongodb 03

    上一篇我们已经搭建好了mongodb环境,本篇为简单示例. 废话不多说先上代码然后开始讲解; !!!别忘了打开你的mongdb服务!!!,如果没有mongodb请看上篇如何安装mongodb; # - ...