数据结构复习_队列、循环对列

类别    数据结构

1、主题

2、学习视频和资料

视频及课件    http://www.icourse163.org/learn/zju-93001?tid=120001#/learn/content?type=detail&id=398005

3、队列的基本操作

  1. 定义队列元素
  2. 建立队列信息(队首和队尾标记,总长度)
  3. 初始化队列
  4. 销毁队列
  5. 插入(只能在尾部,判断是否溢出)(入队)
  6. 删除(只能在头部,判断对列是否为空)(出队)

4、存储(实现结构)

  1. 顺序存储——连续内存,如数组
  2. 链式存储

5、循环对列

插入后指针的移动rear = (rear + 1) mod size;

判断是否为空 (front + 1) mod size == rear

(2)循环对列为什么会出现空、满无法区分?根本原因?

解决方案 :使用额为标记,如size存放的元素个数

最多只放n-1个元素,n-1时即为满(一般采取这种方案)

6、队列的单向链表存储实现的注意点

front 和rear指针与单向链表头尾如和对应?

front做删除操作, rear做插入操作

链表的头做删除和插入操作都方便

单向链表的尾适合做插入操作,不适合做删除操作(不是双向链表,不方便找到前一个),删除后不知道前面一个在哪里。

所以,单向链表的尾只能放rear,相应头放front。

6、代码

7、后记

有问题可邮件[email protected],欢迎讨论!

时间: 2024-10-26 15:31:35

数据结构复习_队列、循环对列的相关文章

数据结构复习_栈和队列,应用_括号匹配&文件目录递归拷贝,

1.主题 2.学习视频和资料 视频    http://study.163.com/course/courseLearn.htm?courseId=555010#/learn/video?lessonId=701019&courseId=555010 http://study.163.com/course/courseLearn.htm?courseId=555010#/learn/video?lessonId=702024&courseId=555010 3.实现 数组或列表实现 4.应

数据结构(08)_队列和栈的相互实现

1. 栈的队列的相互实现 思考:栈和队列在实现上非常相似,能否用相互实现? 1.1. StackToQueue 用栈实现队列等价于用"后进先出"的特性实现"先进先出"的特性.实现思路: 准备两个栈用于实现队列:stack_in和stack_out 入队列:当有新元素入队时,将其压入队列stack_in 出队列:当需要出队时:1.stack_out.size() == 0,将stack_in中的数据逐一弹出并压人stack_out(数据移动)2.stack_out.s

数据结构6_顺序队列(循环队列)

本文实现了顺序队列,与链队列不同的是,顺序队列需要考虑一个问题, 问题情况如下, 解决办法:循环队列,当rear到分配的数组空间末尾时,转到数组头 但是当q.rear==q.front时,又如何区分一种是空队列,一种是满队列的情况呢 这里有两种方案 本次代码实现了第一种方法,同时设置了一个技术变量length,稍加改动便可实现第二个方法 代码如下: #include<iostream>using namespace std;//该顺序队列为循环队列,解决队尾指针达到最大值,队列中有空闲单元,但

数据结构(C实现)------- 顺序队列(循环队列之少用一个存储空间实现) .

上节已经提到有三种方法来实现循环顺序队列,其中第一种设立标识不常用,最常的就是后两种,上一节已经讨论了用计数器来实现循环顺序队列,这节就用第三种方法,也就是少用一个存储空间来实现循环顺序队列,其基本操作和用计数实现类同,下面是具体实现: 顺序队列(循环队列)类型描述: //顺序队列的类型描述 #define MAXSIZE 5 typedef int ElemType; typedef struct{ ElemType *data; int front,rear; }SqQueue; 基本操作:

数据结构(C实现)------- 顺序队列(循环队列之计数器实现)

为了能充分的利用空间,解决顺序队列的"假溢出"问题,可以采用两种方法:一种是将数据向前移动,让空的存储单元留在队尾:另一种是将顺序队列构造成一个环状的空间,即将队列的数据区data[0....MAXSIZE-1]看成头尾相接的循环结构,使得data[0]接在data[MAXSIZE-1]之后,这就是循环队列. 这节就来实现循环顺序队列. 循环队列中的空闲的空间可以被利用,除非数组空间真的被队列元素全部占用,否则不会上溢.因此,队一此简单的应用外,真正实用的顺序队列是循环队列. 入队时,

浅谈算法和数据结构: 五 优先级队列与堆排序

转载自:http://www.cnblogs.com/yangecnu/p/Introduce-Priority-Queue-And-Heap-Sort.html 浅谈算法和数据结构: 五 优先级队列与堆排序 在很多应用中,我们通常需要按照优先级情况对待处理对象进行处理,比如首先处理优先级最高的对象,然后处理次高的对象.最简单的一个例子就是,在手机上玩游戏的时候,如果有来电,那么系统应该优先处理打进来的电话. 在这种情况下,我们的数据结构应该提供两个最基本的操作,一个是返回最高优先级对象,一个是

数据结构——栈和队列相关算法实现

数据结构栈和队列的基本算法实现 限定性线性表--栈 栈的定义 栈作为一种限定性的线性表,是将线性表的插入和删除操作限制为仅在表的一端进行. 基本算法演示 /* 栈的常见操作: 1.初始化栈 2.元素进栈 3.元素出栈 4.栈的遍历 5.判断栈是否为空栈 6.清空整个栈 */ # include <stdio.h> # include <stdlib.h> typedef struct Node { int date; struct Node * pNext; }NODE,* PNO

JavaScript数据结构和算法----队列

前言 队列和栈很像,只是用了不同的原则.队列是遵循先进先出(FIFO)原则的一组有序的的项,队列在尾部添加新元素,从顶部移除元素.最新添加的元素必须必须排队在队列的,末尾.可以想象食堂排队买饭的样子. 一.创建队列 1.创建一种数据结构来保存队列里面的数据,这里选择数组 2.声明一些栈的方法 enqueue(element(s)) : 添加一个或一些元素到队列的末尾 dequeue() : 移除队列第一个的元素(就是排队在最前面的),同时返回被移除的元素. front() : 返回队列第一个的元

数据结构5_链队列

本文用指针形式实现了先进先出的队列,与栈队列类似,需要设计一个队列节点类,一个队列类, 同时队列类为节点类的友元函数:不过与链栈不同的是,链栈仅用单一指针来实现入栈和出栈 而链队列需要有front和rear两个指针(皆为队列节点类指针),front指针负责处理出列,rear处理入列 #include<iostream>using namespace std;class LinkQueue;class QNode   //每个节点的类{    char *data;    //每个节点的数据类型