精华内容
下载资源
问答
  • 一.简介 在哔哩哔哩看视频学,赫斌老师数据结构入门内容-b站搜索:av6159200(P47),通过学习循环队列,能独立把赫斌老师...队列与栈有一个相同点就是那就是一开始都有顶部(top)底部(bottom),但是为了与栈产生区别,...

    一.简介

    哔哩哔哩看视频学的,赫斌老师数据结构入门的内容-b站搜索:av6159200(P47),通过学习循环队列,能独立把赫斌老师教的敲出来,并且自己摸索着实现链式队列.

    第三部分最后面有我链式队列的ppt图解下载

    二.什么是队列

    队列与栈有一个明显的区别就是,栈是先进后出,而队列是先进先出.

    队列与栈有一个相同点就是那就是一开始都有顶部(top)底部(bottom),但是为了与栈产生区别,我们队列用前部(front)后部(rear).

    数组的队列为什么要是循环队列呢?

    因为数组刚开始的长度是确定的,如果每次出队之后不循环的话,就造成空间浪费,并且越用越少.

    如图:
    5个数组插入了4个4个已插入数值的元素删了三个

    通过图可以看出,如果数组不是循环的话,0,1,2这3个数组以后都用不了了,所以数组队列需要循环

    至于链表,他就没有要循环的要求,它在内存充足的情况下,可以一直无限增加…

    先进先出图解:
    在这里插入图片描述在这里插入图片描述

    从图可以看出,只要是第一个进的就是第一个出的,队列就是要满足这样的要求. 就跟我们车站排队买票一样.

    三.循环队列的图解

    在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
    一定在移动的时候要用这个 前部 = (前部+1)%数组长度. . . . . 后部 = (后部+1)%数组长度 的循环公式

    不过我个人觉得如果用判断语句应该也行, 就是如果前部或者后部等于数组长度 前部或者后部就重新变成0, 但是这样过于麻烦了而且感觉程序会变慢.所以还是建议用上面的公式吧.

    循环队列其它过程:百度网盘

    链式队列的图解:百度网盘

    四.函数功能实现的源码

    void init(QUEUE *);                                 //初始化
    

    在这里插入图片描述

    void lnput_queue(QUEUE *, int );             	//入队 输入
    

    在这里插入图片描述

    int full_queue(QUEUE *);	                        	//判断是否满
    

    在这里插入图片描述

    void traversing_queue(QUEUE *);	                        	//遍历输出
    

    在这里插入图片描述

    int air_queue(QUEUE *);				//判断是否为空
    

    在这里插入图片描述

    int out(QUEUE *, int *);	                        	//出队
    

    在这里插入图片描述

    五.源码分享(可复现)

    循环队列(数组):百度网盘

    链式队列(链表):百度网盘

    六.队列的应用

    一切与时间相关的都与队列有联系.

    展开全文
  • ==================================== <1>队列与栈相似与不同 不同点: 1)栈是限定仅在表尾进行插入操作删除操作...相同点: 都可以用线性表顺序存储结构链式存储结构来实现,但都存在弊端 =======

    ====================================

    <1>队列与栈的相似与不同

    不同点:
    1)栈是限定仅在表尾进行插入操作和删除操作的线性表而队列是只允许在一端插入,在另一端进行删除操作的线性表
    2)对应栈,如果是两个相同数据类型的栈,则可以用数组两端作为栈底的方法共享数据,最大程度地利用空间。而对应队列,可以引用循环的方式使得队头队尾可以循环变化,减少时间损耗,时间复杂度为o(1)。
    相同点:
    都可以用线性表的顺序存储结构和链式存储结构来实现,但都存在弊端

    =====================================

    <2> 顺序表与链表的不同之处

    1)顺序表基本结构是由指针域和数据域构成,其中数据域是数组,因此数据存储在连续的数组空间中链表基本结构也是一样的,但数据域是单独的,因此数据存储在不一定连续的空间中
    2)顺序表适用于已知元素数量的情况,而链表适用于未知元素数量的情况,以此来减少内存空间上的浪费。

    =====================================

    <3>它们在对数据增、删、查、改时的优缺点:(以下为简述)

    对于增加,删除数据越频繁的操作,链表的效率优势就越明显,因为链表不需要移动大量的数据为目标数据(删除的数据或增加的数据)腾出或占入空间,即不需要重新移动,只需要移动指针连接即可,但顺序表则需要移动大量元素。
    对于 查改数据 越频繁的操作,顺序表的效率优势更胜一筹,因为顺序表在已知数据元素个数的前提下,可以将数据存储在数组空间中,这样就不需要通过遍历及其他手段获得目标元素的位置,只需要知道索引即可,但链表则需要如此。
    展开全文
  • 循环链表的最后一个结点指针不为空,而是指向头结点。结点的插入删除单链表非常相似,就不再示范了。 <p><strong>双链表 <img alt="" src=...
  • 面试题37:两个链表的第一个公共结点:首先依次遍历两个链表,记录两个链表的长度mn,如果 m > n,那么我们就先让长度为m的链表走m-n个结点,然后两个链表同时遍历,当遍历到相同的结点的时候停止即可。对于 m ...
  • 线性表是一种在实际中广泛使用数据结构,常见线性表:顺序表、链表、栈、队列、字符串… 线性表在逻辑上是一种线性结构,线性表在物理存储时,通常以数组链式结构形式存储 二、背景介绍 生成一副54张...

    一、认识顺序表和线性表

    线性表是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串…

    线性表在逻辑上是一种线性的结构,线性表在物理的存储时,通常以数组和链式结构形式存储在这里插入图片描述
    在这里插入图片描述
    二、背景介绍
    生成一副54张的扑克牌,有三名玩家,会在扑克牌抽取15张牌,再按照顺序依次给三名玩家发牌,每名玩家会拿到5张牌,最终会将抽取到的15张牌,和三名玩家的手牌,打印显示在控制台中。

    知识点:循环结构 顺序表 方法

    三、解决思路
    编写一个card类和一个PokerGame类,给予Card花色和大小的属性,将card存入顺序表中,抽牌之前利用随机数编写函数对牌进行乱序,将三位玩家也作为元素存入链表中,最后通过循环输出三位玩家的手牌。

    四、代码解析
    1.Card类

    package List;
    
    public class Card {
        public String suit;//花色
        public String rank;//牌面大小
    
        public Card(String suit,String rank)
        {
            this.suit=suit;
            this.rank=rank;
    
        }
        @Override
        public String toString(){
            return "("+this.suit+this.rank+")";//重载了打印函数
        }
    }
    
    

    2.PokerGame类

    package List;
    
    import java.util.*;
    
    public class PokerGame {
        public static final String[] suits={"♥","♠","♣","♦"};//创建一个含有四种花色的数组
    
        private static List<Card> buyPoker(){
            ArrayList<Card> poker=new ArrayList<>();//新建一个顺序表,表中的内容需要是Card对象
            for(int i=0;i<4;i++){//外循环对应四种花色
                for(int j=2;j<10;j++){//内循环对应数字2-8
                    poker.add(new Card(suits[i],""+j));
                }
                poker.add(new Card(suits[i],"J"));
                poker.add(new Card(suits[i],"Q"));
                poker.add(new Card(suits[i],"K"));
                poker.add(new Card(suits[i],"A"));//四种特殊的数字
            }
            poker.add(new Card("","big joker"));
            poker.add(new Card("","small joker"));//添加大小王
            return  poker;//返回的是一个顺序表
        }
    
        private static void shuffle(List<Card> poker)
        {
            Random random=new Random();
            for(int i=poker.size()-1;i>0;i--)
            {
                int pos=random.nextInt(i);//生成0-i之间的一个随机数
                swap(poker,i,pos);
            }
        }
    
    
        private static void swap(List<Card> poker,int i,int j)
        {
            Card tmp=poker.get(i);//调取poker中的第i个card赋给temp
            poker.set(i,poker.get(j));
            poker.set(j,tmp);//进行顺序的调换
        }
    
        public static void main(String[] args){
            List<Card> poker=buyPoker();//1.创建一副扑克牌
            Collections.shuffle(poker);//2.洗牌
            System.out.println(poker);
            List<List<Card>> players=new ArrayList<>();//新建一个ArrayList,中放置的是,List<Card>
            players.add(new ArrayList<>());
            players.add(new ArrayList<>());
            players.add(new ArrayList<>());//放置三名玩家至新的List中
            for(int i=0;i<5;i++)
            {
                for(int j=0;j<3;j++)
                {
                    Card top=poker.remove(0);//从牌堆中取牌,也就是取poker中的第一个Card
                    List<Card> player=players.get(j);
                    player.add(top);
    
                }
    
            }
            //4.展示最终拿到的手牌
            for(int i=0;i<players.size();i++)
            {
                List<Card> player=players.get(i);
                System.out.println("玩家"+i+"的手牌是:"+player);
    
            }
        }
    }
    
    

    在这里插入图片描述

    4.程序中含有的部分方法解释

    java Random.nextInt()方法 lic int nextInt(int n)

    该方法的作用是生成一个随机的int值,该值介于[0,n)的区间,也就是0到n之间的随机int值,包含0而不包含n。

    元素类型 get(int index);
    /**
     * 用新的元素 e 替换 index 位置的元素,并返回 index 位置的原来的元素
     * index 的可选范围是 0 <= index < size()
     * @参数 index 待替换元素的位置(下标)
     * @参数 e 要替换的新元素
     * @返回值 index 位置的老元素
     */
    元素类型 set(int index, 元素类型 e);
    /**
     * 通过遍历的方式,判断与元素 e 相等(equals)的元素是否存在于线性表中
     * @参数 e 待查找元素
     * @返回 true:包含;false:不包含
     */
    

    5.运行截图
    在这里插入图片描述

    展开全文
  • STL提供了几种类容器(包括数组、队列链表、集合映 射)模板表示。它还提供了高效通用算法库,这些算法可用于STL容器,也可用于常规数组。模板类 valarray为数值数组提供了支持。 第17章:输入、输出...
  • STL提供了几种类容器(包括数组、队列链表、集合映 射)模板表示。它还提供了高效通用算法库,这些算法可用于STL容器,也可用于常规数组。模板类 valarray为数值数组提供了支持。 第17章:输入、输出...
  • STL提供了几种类容器(包括数组、队列链表、集合映 射)模板表示。它还提供了高效通用算法库,这些算法可用于STL容器,也可用于常规数组。模板类 valarray为数值数组提供了支持。 第17章:输入、输出...
  • STL提供了几种类容器(包括数组、队列链表、集合映 射)模板表示。它还提供了高效通用算法库,这些算法可用于STL容器,也可用于常规数组。模板类 valarray为数值数组提供了支持。 第17章:输入、输出...
  • (52) 栈和队列的共同是(C) 注:这一共同点和线性表不一样 A. 都是先进后出 B. 都是先进先出 C. 只允许在端点处插入删除元素 D. 没有共同 (53) 已知二叉树后序遍历序列是dabec,中序遍历序列是debac,它前序...
  • 《数据结构 1800题》

    热门讨论 2012-12-27 16:52:03
    循环队列 B. 链表 C. 哈希表 D. 栈 9.以下数据结构中,哪一个是线性结构(D)?【北方交通大学 2001 一、1(2分)】 A.广义表 B. 二叉树 C. 稀疏矩阵 D. 串 10.以下那一个术语与数据存储结构无关?(A )...
  • 6.2 循环链表和头节点 6.3 双向链表 6.4 链表用到词汇表 6.5 应用 6.5.1 箱子排序 6.5.2 基数排序 6.5.3 凸包 6.5.4 并查集 第7章 数组矩阵 7.1 数组 7.1.1 抽象数据类型 7.1.2 C++数组索引 7.1.3 行主映射...
  • 3.2.5 求单向局部循环链表的环入口? 3.2.6 IP地址如何在数据库中存储? 3.2.7 new/deletemalloc/free的底层实现? 3.2.8 overload、override、overwrite的介绍? 3.2.9 小端/大端机器? 3.3.0 守护进程 3.3.1 多...
  • 算法是一切程序设计基础灵魂,更是一位程序员编程水平高低集中体现。 涵盖广泛:精炼理论讲述嵌入经典算法示例,学习查询兼而有之。 阐述到位:算法思想、算法实现经典面试题合理搭配,相辅相成。 实例...
  • 算法笔记 胡凡 曾磊

    2018-10-16 17:38:13
    234 6.9.5 fill() 235 6.9.6 sort() 235 6.9.7 lower_bound()upper_bound() 242 第7章 提高篇(1)——数据结构专题(1) 245 7.1 栈的应用 245 7.2 队列的应用 251 7.3 链表处理 253 7.3.1 链表的概念 ...
  • 7.3.3 链表的基本操作 256 7.3.4 静态链表 260 第8章 提高篇(2)——搜索专题 269 8.1 深度优先搜索(DFS) 269 8.2 广度优先搜索(BFS) 274 第9章 提高篇(3)——数据结构专题(2) 283 9.1 树与二叉树 283 ...
  • 数据结构(C++)有关练习题

    热门讨论 2008-01-02 11:27:18
    -------8 习题3 栈和队列------------------------------------------------------------------------------11 习题4 串----------------------------------------------------------------------------------...
  • 程序员面试宝典高清

    2012-03-16 16:28:17
    13.1 单链表 167 13.2 双链表 173 13.3 循环链表 176 13.4 队列 177 13.5 堆栈 180 13.6 树 185 13.7 排序 185 第14章 字符串 203 14.1 整数字符串转化 203 14.2 字符数组strcpy 205 14.3 数组越界 210 14.4 数字...
  • 数据结构题

    2012-09-10 14:48:39
    39.设顺序循环队列Q[0:M-1]头指针尾指针分别为FR,头指针F总是指向队头元素前一位置,尾指针R总是指向队尾元素当前位置,则该循环队列元素个数为(C )。 (A) R-F (B) F-R (C) (R-F+M)%M (D) (F-R...
  • 实例089 创建循环链表 117 实例090 双链表逆置 118 实例091 双链表逆序输出 120 实例092 约瑟夫环 122 实例093 创建顺序表并插入元素 123 实例094 向链表中插入结点 125 实例095 从链表中删除结点 126...
  • 使用顺序、选择重复(循环)三种基本控制结构表示程序控制逻辑 B. 模块只有一个入口,可以有多个出口 C. 注重提高程序执行效率 D. 不使用goto语句 (5) 下面概念中,不属于面向对象方法是______。(D) A. ...
  • 生产者维护着一个循环队列,会往线程池中添加任务填充缓存,消费者有一个定时器,间隔一定时间就会向生产者取数据,并将数据RTP打包再传输 内存管理 内存管理分为前后端,前端使用类模板,灵活处理各种类型对象...
  • c语言经典案例

    2014-10-30 08:06:57
    实例200 创建循环链表 287 实例201 使用头插入法建立单链表 289 实例202 双链表逆序输出 291 实例203 约瑟夫环 293 实例204 创建顺序表并插入元素 294 实例205 合并两个链表 296 实例206 单链表节点逆置 298 实例207...
  • 19、队列和栈有什么区别? 答: 队列先进先出;栈后进先出。 20、数组和链表的区别? 答: 数组:数据顺序存储,固定大小; 链表:数据可以随机存储,大小可动态改变; 21、为什么数组名作为参数,会改变数组的内容,...
  • 循环链表,用取余操作做 3.不能做switch()参数类型是: switch参数不能为实型。 華為 1、局部变量能否全局变量重名? 答:能,局部会屏蔽全局。要用全局变量,需要使用"::" 局部变量可以与全局变量同名,在...
  • 飞鸽传书(IPMessenger) 源码

    热门讨论 2010-06-29 14:10:51
     [1]文件传送链表由专门线程维护,这样,线程1就可以专心进行处理文件传输队列就可以了,线程1始终查询这个链表,如果表头为NULL,就说明没有要传输文件,表头非空,就开始发送报文,获得正确应答后,就可以...
  • C++MFC教程

    热门讨论 2013-05-21 13:37:15
    系统会在队列中取出每一条消息,根据消息接收句柄而将该消息发送给拥有该窗口程序消息循环。每一个运行程序都有自己消息循环,在循环中得到属于自己消息并根据接收窗口句柄调用相应窗口过程。而在...

空空如也

空空如也

1 2
收藏数 33
精华内容 13
关键字:

循环队列和循环链表的相同点