前言
没想到吧,我皮某人又回来了。
经过这么久的偷懒,哦不,沉淀,于2021年1月18号回归写博客的日子。回想那段日子,仿佛就这昨天
别bb了,快上点东西吧
最近会定期更新数据结构方面的内容以及相应的算法题,等到后期会更新JavaWeb,以及框架方面的知识,作为一只刚飞的菜鸟,需要各路大神为我的博客提出改正,一定第一时间修改,三克油~~
就这?
gogogo整活
提示:以下是本篇文章正文内容,下面案例可供参考
一、队列是什么?
队列是一种特殊的线性表…
线性表又是啥
线性表是最基本、最简单、也是最常用的一种数据结构。线性表(linear list)是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列。
有限序列是什么?
有限序列是指序列中的元素个数是有限的,即序列的长度是有限的。在数学上,序列是被排成一列的对象(或事件);这样每个元素不是在其他元素之前,就是在其他元素之后。序列可以是有限的,有限序列包含空序列( ),它没有元素。序列中的元素也称为项,项的个数称为序列的长度。
听不懂…
就是一堆数排成一列!别说了,这不是重点。
二、队列里面要知道的概念
1.出列
齐步走,121,121,1234
停停停,什么玩意。
这里的出列是在队列的首部删除。
说白了就是把你刚才那一堆数的第一个数给删了,这个数就出列了。
2.入列
入列的意思就和出列的意思相反,
在队列的尾部进行插入操作就叫做入列
3.空队列
空队列就是没有元素没有元素就没有元素呗,还搞个空队列。
好听不行?杠精出门左拐
上例题
可能纯概念大家理解不是很好,那我们来玩一个解密游戏。规则是这样的:首先将第一个数删除,紧接着将第二个数放到这串数的末尾,在将第三个数删除并将第四个放到这串数的末尾。以此类推,将最后一个数也删除。按照删除的顺序,把这些顺序连在一起就是密码。(来自**《啊哈!算法》**) 是不是很懵逼,那这样,应该就好看一些了
原数字串8 5 4 6 3 6 4 2 6 9
首先将第一个数删除,紧接着将第二个数放到这串数的末尾
4 6 3 6 4 2 6 9 5 删8退5
3 6 4 2 6 9 5 6 删4退6
4 2 6 9 5 6 6 删3退6
6 9 5 6 6 2 删4退2
5 6 6 2 9 删6退9
6 2 9 6 删5退6
9 6 2 删6退2
2 6 删9退6
6 删2退6
删6
输出:8 4 3 4 6 5 6 9 2 6
这么看是不是理解规则了?那还不码起来???
先给出C语言的部分代码
while(head < tail)
{
//输出队首
printf("%d\t",a[head]);
//出列
head++;
//将新对首入列
a[tail] = a[head];
tail++;
//在将队首出列
head++;
}
这样一看是不是顿时就明白了???
什么?不明白?
不明白好好琢磨琢磨
Java/C代码
C语言代码
#include <stdio.h>
struct queue{
int a[101];
int head;
int tail;
};
int main()
{
struct queue q;
int i;
q.head = 1;
q.tail = 1;
//初始化队列
for(i = 1;i<=10;i++)
{
scanf("%d",&q.a[q.tail]);
q.tail++;
}
while(q.head < q.tail)
{
printf("%d\t",q.a[q.head]);
q.head++;
q.a[q.tail] = q.a[q.head];
q.tail++;
q.head++;
}
}
Java代码
package queue;
import java.util.Scanner;
public class test01 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int [] a = new int[101];
/**
* head:指向队首
* tail:指向队尾
*/
int head = 1,tail = 1;
for (int i = 1; i <= 10; i++) {
a[tail] = scanner.nextInt();
tail++;
}
while (head < tail){
System.out.println(a[head] + " ");
head++;
a[tail] = a[head];
tail++;
head++;
}
}
}
完美收官