队列queue(1) 结构体实现队列
前言
首先,我们先来做一道解密题:一串数列 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) 结构体实现队列的更多相关文章
- Windows消息队列(优先队列,结构体中放比较函数)
Windows消息队列 消息队列是Windows系统的基础.对于每个进程,系统维护一个消息队列.如果在进程中有特定事件发生,如点击鼠标.文字改变等,系统将把这个消息加到队列当中.同时,如果队列不是空的 ...
- c 结构体的队列
头文件 lsg_queue.h #pragma once #include<stdbool.h> /* 链式栈接口的定义头文件 */ #define true 1 #define fals ...
- 队列queue(2):链表实现队列
基本概念 队列是只允许在一端进行插入操作,另一端进行删除操作的线性表. 我们规定,允许删除的叫做队首"head",允许插入的叫做队尾"tail". 基本操作 我 ...
- 队列Queue:任务间的消息读写,安排起来~
摘要:本文通过分析鸿蒙轻内核队列模块的源码,掌握队列使用上的差异. 本文分享自华为云社区<鸿蒙轻内核M核源码分析系列十三 消息队列Queue>,作者:zhushy . 队列(Queue)是 ...
- STL中的单向队列queue
转载自:http://blog.csdn.net/morewindows/article/details/6950917 stl中的queue指单向队列,使用时,包含头文件<queue>. ...
- Tornado使用-队列Queue
1.tornado队列的特点 和python标准队列queue相比,tornado的队列Queue支持异步 2.Queue常用方法 Queue.get() 会暂停,直到queue中有元素 Queue. ...
- Python 单向队列Queue模块详解
Python 单向队列Queue模块详解 单向队列Queue,先进先出 '''A multi-producer, multi-consumer queue.''' try: import thread ...
- [数据结构]——链表(list)、队列(queue)和栈(stack)
在前面几篇博文中曾经提到链表(list).队列(queue)和(stack),为了更加系统化,这里统一介绍着三种数据结构及相应实现. 1)链表 首先回想一下基本的数据类型,当需要存储多个相同类型的数据 ...
- [ACM训练] 算法初级 之 数据结构 之 栈stack+队列queue (基础+进阶+POJ 1338+2442+1442)
再次面对像栈和队列这样的相当基础的数据结构的学习,应该从多个方面,多维度去学习. 首先,这两个数据结构都是比较常用的,在标准库中都有对应的结构能够直接使用,所以第一个阶段应该是先学习直接来使用,下一个 ...
随机推荐
- PHP截取带有汉字的字符串,将汉字按两个字节计算
<?php header("Content-type:text/html;charset=utf-8"); /** *截取字符串,汉字占两个字节,字母占一个字节 *页面编码必 ...
- keras 修仙笔记一
对于牛逼的程序员,人家都喜欢叫他大神:因为大神很牛逼,人家需要一个小时完成的技术问题,他就20分钟就搞定.Keras框架是一个高度集成的框架,学好它,就犹如掌握一个法宝,可以呼风唤雨.所以学keras ...
- 如何用while循环 输出一个九九乘法表
方法一 i = 1 while i < 10: k = 1 while k <= i: print('%d*%d=%2d '% (i,k,i*k),end='') #end='' 表示不换 ...
- 流式处理的新贵 Kafka Stream - Kafka设计解析(七)
原创文章,转载请务必将下面这段话置于文章开头处. 本文转发自技术世界,原文链接 http://www.jasongj.com/kafka/kafka_stream/ Kafka Stream背景 Ka ...
- 基于 nodejs 的 webSockt (socket.io)
基于 nodejs 的 webSockt (socket.io) 理解 本文的业务基础是在基于 nodejs 的 socket.io 的直播间聊天室(IM)应用来的. 项目中具体的 框架如下 expr ...
- 开源API测试工具 Hitchhiker v0.5更新 - 完善细节
Hitchhiker 是一款开源的支持多人协作的 Restful Api 测试工具,支持Schedule, 数据对比,压力测试,支持上传脚本定制请求,可以轻松部署到本地,和你的team成员一起管理Ap ...
- [阿里云部署] Ubuntu+Flask+Nginx+uWSGI+Mysql搭建阿里云Web服务器
部署地址:123.56.7.181 Ubuntu+Flask+Nginx+uWSGI+Mysql搭建阿里云Web服务器 这个标题就比之前的"ECS服务器配置Web环境的全过程及参考资料&qu ...
- Python入门 - 生成随机数
生成随机数是编程中经常用到的功能,下面讲几种常用的随机函数randint,uniform, randrange: 一.生成随机整数 randint import random a = random. ...
- (高级篇)php结合redis实现高并发下的抢购、秒杀功能
抢购.秒杀是如今很常见的一个应用场景,主要需要解决的问题有两个:1 高并发对数据库产生的压力2 竞争状态下如何解决库存的正确减少("超卖"问题)对于第一个问题,已经很容易想到用缓存 ...
- day1 python基础知识
一:python发展 python2.6与python3.0区别: 源码不标准,混乱,重复代码过多 二:python所属类型 (1)编译型:一次性将程序全部编译成二进制 优点:运行速度快 缺点:不能跨 ...