队列的定义与操作——顺序存储和链式存储

  队列的 存储结构 有 顺序存储 和 链式存储

  1. 队列的顺序存储与操作 (循环队列)

 1 typedef int Position;
 2 struct QNode {
 3     ElementType *Data;     // 存储元素的数组
 4     Position Front, Rear;  // 队列的 头、尾指针
 5     int Cap;               // 队列最大大容量
 6 };
 7 typedef struct QNode *Queue;
 8
 9 // 操作集
10 Queue CreateQueue(int MaxSize);
11 int IsFull(Queue Q);
12 int IsEmpty(Queue Q);
13 void AddQ(Queue Q, ElementType X);
14 ElementType DeleteQ(Queue Q);
15
16 Queue CreateQueue()
17 {
18     Queue Q = (Queue)malloc(sizeof(struct QNode));
19     Q->Data = (ElementType*)malloc(MaxSize * sizeof(ElementType));
20     Q->Front = Q->Rear = 0;
21     Q->Cap= MaxSize;
22
23     return Q;
24 }
25
26 int IsFull(Queue Q)
27 {
28     return (Q->Rear+1)%Q->MaxSize == Q->Front;
29 }
30
31 void AddQ(Queue Q, ElementType X)
32 {
33     if ( IsFull(Q) )
34         return;            // queue is fulled
35     else  {
36         Q->Rear = (Q->Rear+1)%Q->MaxSize;
37         Q->Data[Q->Rear] = X;
38     }
39 }
40
41 int IsEmpty(Queue Q)
42 {
43     return (Q->Front == Q->Rear);
44 }
45
46 ElementType DeleteQ(Queue Q)
47 {
48     if ( IsEmpty(Q) )
49         return NULL; // 这里的返回值应该视具体情况而定(可能返回 NULL,或者返回 ElementType 类型)
50     else {
51         Q->Front = (Q->Front+1)%Q->MaxSize;
52         return Q->Data[Q->Front];
53     }
54 }            

  2.队列的链式存储与操作

 1 typedef struct Node *PtrToNode;
 2 struct Node {    // 队列中的节点
 3     ElementType Data;
 4     PtrToNode Next;
 5 };
 6 typedef PtrToNode Position;
 7
 8 struct QNode {
 9     Position Front, Rear;    // 队列的头、尾指针
10 };
11 typedef struct QNode *Queue;
12
13 // 操作集
14 Queue CreateQueue();
15 int IsEmpty(Queue Q);
16 void AddQ(Queue Q, ElementType X);
17 ElementType DeleteQ(Queue Q);
18
19 Queue CreateQueue()
20 {
21     Queue Q = (Queue)malloc(sizeof(struct QNode));
22     Q->Front = Q->Rear = NULL;
23
24     return Q;
25 }
26
27 int IsEmpty(Queue Q)
28 {
29     return ( Q->Front == NULL );
30 }
31
32 void AddQ(Queue Q, ElementType X)
33 {
34     PtrToNode TmpCell = (struct Node*)malloc(sizeof(struct Node));
35     TmpCell->Next = NULL;
36     TmpCell->Data= X;
37
38     if ( IsEmpty(Q) )    //  队列为空
39         Q->Front = Q->Rear = TmpCell;
40     else {
41         Q->Rear->Next = TmpCell;
42         Q->Rear = TmpCell;
43     }
44 }
45
46 ElementType DeleteQ(Queue Q)
47 {
48     if ( IsEmpty(Q) )    return NULL;  // 这里的返回值应该视具体情况而定(可能返回 NULL,或者返回 ElementType 类型)
49
50     Position FrontCell;
51     ElementType FrontElem;
52     FrontCell = Q->Front;
53
54     if ( Q->Front == Q->Rear )        //  若队列中只有一个元素
55         Q->Front = Q->Rear = NULL;    //  删除后置空
56     else
57         Q->Front = Q->Front->Next;
58
59     FrontElem = FrontCell->Data;
60     free(FrontCell);
61
62     return FrontElem;
63 }

原文地址:https://www.cnblogs.com/wgxi/p/9974513.html

时间: 2024-11-29 09:30:09

队列的定义与操作——顺序存储和链式存储的相关文章

数据结构导论 四 线性表的顺序存储VS链式存储

前几章已经介绍到了顺序存储.链式存储 顺序存储:初始化.插入.删除.定位 链式存储:初始化.插入.删除.定位 顺序存储:初始化 strudt student{ int ID://ID char name[30];//姓名 char sex; //性别 int class;//班级 int age;//年龄 } student={"01",“zhangsan”,"m","201","20"}: 链式存储:初始化 //建立一个空链

线性表的顺序存储和链式存储

顺序存储是分配了一块连续的内存,把这块内存平均分为N份,每份存放一个线性表的单元.从内存利用角度讲,顺序存储需要的是一块连续的内存.特点是查找节点容易,插入. 删除节点比较耗时. 链式存储是分配了几个零散的非连续单元,从内存利用角度讲,它能充分利用那些碎片化的内存.特点是查找节点慢,但插入删除节点快. 怎么理解呢? 下文说的酒店均没有客户记录,就是没有登记某个人住在某个房间. 顺序存储就和某个酒店的一层房间,比如在第一层有100个房间,从1号房间按顺序一致排到底100号房间.你去找一个人,打开1

C++栈的顺序存储和链式存储的实现

栈是最常见的数据结构,其特点是后进先出(Last In First Out)也是链表的特殊形式,所以和链表一样,有两种存储方式,第一是顺序存储的栈,方便快速读写数据,但是栈的长度必须先固定:第二种是链式存储的栈,可以不用定义栈的长度,可以大量插入数据,如果不是物理内存使用完的话,可以存储大量的数据. 首先,顺序存储的栈的实现,代码如下: #pragma once #define MAXSIZE 10 template<typename EleType> class OrderStack { p

4、栈的实现:顺序存储和链式存储

Stack的ADT: 1 package ren.laughing.datastructure.base; 2 3 import ren.laughing.datastructure.exception.StackEmptyException; 4 5 /** 6 * Stack 栈:后进先出 7 * 只能在栈顶top进行插入(入栈).删除(出栈)操作 8 * @author Laughing_Lz 9 * @time 2016年4月6日 10 */ 11 public interface St

数据结构学习笔记(二) 线性表的顺序存储和链式存储

线性表:由同类型数据元素构成有序序列的线性结构 -->表中元素的个数称为线性表的长度 -->没有元素时,成为空表 -->表起始位置称表头,表结束位置称表尾 顺序存储: 1 package test; 2 3 /** 4 * 线性表(数组) 5 * 6 */ 7 public class Test { 8 private static int m ; 9 private static int[] a; 10 public static void main(String[] args) {

数据结构之线性表代码实现顺序存储,链式存储,静态链表(选自大话数据结构)

一,线性表顺序存储 #include <stdio.h> #include <string.h> #include <ctype.h> #include <stdlib.h> #include <io.h> #include <math.h> #include <time.h> #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define MAXSI

C 数据结构1——线性表分析(顺序存储、链式存储)

之前是由于学校工作室招新,跟着大伙工作室招新训练营学习数据结构,那个时候,纯碎是小白(至少比现在白很多)那个时候,学习数据结构,真的是一脸茫然,虽然写出来了,但真的不知道在干嘛.调试过程中,各种bug也不懂怎么修改,那个时候,电脑一直被我弄蓝屏,这个寒假,重新学习一遍数据结构,获益良多,整理一下,发布出来,求拍砖,共同进步. 线性表(List),0个或者多个数据元素的有限序列 线性表的顺序存储,即线性表通过数组的方式实现,指用一段地址连续的存储单元一次存储线性表的数据元素.如图: A1 A2 -

3-7-队列的链式存储-栈和队列-第3章-《数据结构》课本源码-严蔚敏吴伟民版

课本源码部分 第3章  栈和队列 - 队列的链式存储 ——<数据结构>-严蔚敏.吴伟民版        源码使用说明  链接??? <数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明        课本源码合辑  链接??? <数据结构>课本源码合辑        习题集全解析  链接??? <数据结构题集>习题解析合辑        本源码引入的文件  链接? Status.h        相关测试数据下载  链接? 无数据    

线性表的链式存储结构——(2)

线性表的存储结构有两种:顺序存储和链式存储 顺序存储:读取数据的时间复杂度为O(1),其实就是数组,但是插入,删除的复杂度略大 链式存储:•用一组任意的存储单元存储线性表的数据元素,这组存储单元可以存在内存中未被占用的任意位置. 数据域:存储数据元素信息的域 指针域:把存储直接后继位置的域 指针或链:指针域中存储的信息 结点(Node):数据域和指针域组成数据元素称为存储映像 单链表:链表的每个结点中只包含一个指针域 •头指针 –头指针是指链表指向第一个结点的指针,若链表有头结点,则是指向头结点