队列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)
再次面对像栈和队列这样的相当基础的数据结构的学习,应该从多个方面,多维度去学习. 首先,这两个数据结构都是比较常用的,在标准库中都有对应的结构能够直接使用,所以第一个阶段应该是先学习直接来使用,下一个 ...
随机推荐
- Struts2-052验证脚本
下面分享一下Struts2-052验证的python脚本 #-*- coding:utf-8 -*- import requests url_list_path ="/home/d0ll4r ...
- FreeRTOS 移植到WIN10
背景 标题表述的不准确,大意是移植到WIN10的PC机,Intel I5. 最近因为项目接触了FreeRTOS 实时操作系统,想对这个操作系统有一个更深入的了解,所以决定下载源码看看,下面这个链接的随 ...
- Anaconda+linux +opencv+dlib安装
准备文件Anaconda: https://www.anaconda.com/download/ 我下载的时最新的 64-Bit (x86) Installer (524 MB) 然后在下载的anac ...
- lua luaconf解读
定义了一些跟平台相关的宏,明确指出一些不推荐使用的函数,如lua_cpcall.lua_strlen
- 二叉树、栈、队列、链表的Java代码实现
这是我的学习总结. 如有文章存在谬误,欢迎指出,有其他意见或者建议,也欢迎留言 二叉树链表 前序遍历:先访问根节点,然后访问左子树.右子树 中序遍历:先访问左子树,然后访问根节点.右子树 后序遍历:先 ...
- 已有模板与tp框架结合
具体实现步骤: ①复制模板文件到view指定文件目录: ②复制css.js.img到view指定文件目录: ③把静态资源(css.js.img)文件的路径设置为“常量”信息(在index.php入口文 ...
- daemon 启动system V init 和 systemd 配置
先试着写一个udpserver的daemon #include <stdio.h> #include <sys/socket.h> #include <sys/types ...
- Unity3d的模型自动导入帧数表
开发中经常需要,对美术模型进行一些处理.(以fbx为例) 例如,需要把动作的名字.start和end加入animations的clips. 如果手动操作,就是在模型的Inspector窗口,一个动作点 ...
- Spring Boot应用 打包与部署指南
Spring Boot的打包与部署有何特点? Java Web应用在Spring Boot之前,通常是打包成war(Web application ARchive)包,结合Tomcat来完成部署. 对 ...
- HDU3790-最短路径问题
最短路径问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...