队列


前言

没想到吧,我皮某人又回来了。
经过这么久的偷懒,哦不,沉淀,于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 58退5
3 6 4 2 6 9 5 64退6
4 2 6 9 5 6 63退6
6 9 5 6 6 24退2
5 6 6 2 96退9
6 2 9 65退6
9 6 26退2
2 69退6
62退66

输出: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++;
        }

    }
}



完美收官

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值