习题3.25 链表和数组对队列例程实现

//链表做队列
/* assume a header */
struct Node;
struct Queue;
typedef struct Node * PtrToNode;
typedef struct Queue * PtrToQ;

struct Node{
    ElementType ele;
    PtrToNode Next;
};

struct Queue{
    PtrToNode rear;
    PtrToNode front;
};

PtrToQ
CreateQ( void )
{
    PtrToQ Q;
    Q = malloc( sizeof( struct Queue ) );
    Q->rear = Q->front = malloc( sizeof( struct Node ) );
    Q->rear->next = NULL;
}

void
AddQ( ElementType X, PtrToQ Q )
{
    PtrToNode TmpCell;
    Tmpcell = malloc( sizeof( struct Node ) );
    TmpCell->ele = X;
    TmpCell->Next = NULL;
    Q->rear->Next = TmpCell;
    Q->rear = TmpCell;
}

Elementtype
DeleteQ( PtrToQ Q )
{
    ElementType res;
    PtrToNode TmpCell;
    TmpCell = Q->front->Next;
    Q->front->Next = TmpCell->Next;
    res = Tmpcell->ele;
    free( TmpCell );
    return res;
}

以上使用链表做的

以下是用数组做的

//循环数组
#define MaxSize 100
struct Queue;
typedef struct Queue * PtrToQ;

struct Queue{
    ElementType *Array;
    int front;
    int rear;
};

PtrToQ
CreateQ( int Size )
{
    PtrToQ Q;
    Q = malloc( sizeof( struct Queue ) );
    Q->Array = malloc( sizeof( ElementType ) * Size );
    Q->front = Q->rear = 0;
    return Q;
}

int
IsFull( PtrToQ Q )
{
    return ( Q->rear + 1 ) % MaxSize == Q->front;
}

void
AddQ( ElementType X, PtrToQ Q )
{
    if( !IsFull( Q ) ){
    Q->rear = ( Q->rear + 1 ) % MaxSize;
    Q->Array[ Q->rear ] = X;
    }
    else
        Error("full")
}

int
IsEmpty( PtrToQ Q )
{
    return Q->rear == Q->front;
}

ElementType
DeleteQ( PtrToQ Q )
{
    if( !IsEmpty( Q ) )
    {
        Q->front = ( Q->front + 1 ) % MaxSize;
        return Q->front->ele;
    }
    else
        Error();
}

在循环数组这一栏,实际上front所指向的地方实际上是没有意义但要保留的,为空

时间: 2025-01-10 04:05:04

习题3.25 链表和数组对队列例程实现的相关文章

【Weiss】【第03章】练习3.25:数组模拟队列

[练习3.25] 编写实现队列的例程,使用 a.链表 b.数组 Answer: 在这章一开头就已经写了个链表的队列例程了,所以实际上只要做b小题就可以. 数组模拟队列和链表的两点小不同是: ①.数组空间有限,入队需要检测数组是否已经满 ②.数组经过几次操作后,rear可能绕回front前面,所以许多操作都要用模来实现. 测试代码: 1 #include <iostream> 2 #include "queue.h" 3 using namespace std; 4 usin

FIFO 队列的链表和数组实现

FIFO (First-in, First-out,先进先出)队列:当执行delete操作时删除那些呆在队列中时间最长的元素. FIFO 队列是这样一个ADT,包含两个基本操作:插入(put)一个新的项.删除(get)一个最早插入的项. 一.FIFO队列的链表实现 FIFO 队列和下堆栈的区别在于新项的插入是在尾部,而不是在头部.因此实现程序要保存一个指向链表最后一个节点的尾指针tail ,因此当Put操作时,将tail 指针指向的next 指向新节点,然后更新tail指针,让它指向那个新的节点

数据结构 数组,链表,栈,队列理解

数据结构 数据结构是指相互之间存在一种或多种特定关系的数据元素的集合.再简单描述一下:数据结构就是描述对象间逻辑关系的学科. 数据存储结构 常用的数据存储方式有两种:顺序存储,非顺序存储.顺序存储就是把数据存储在一块联系的存储介质(硬盘或内存等)中.反之则是非顺序存储. Java中的数组就是典型的顺序存储,链表就是非顺序存储.数组存储数据时会开辟出一块联系内存,按顺序存储.链表先不会开辟出一块内存来,而是只需要知道下一个节点存储的位置,就能把所以的数据连起来了.所以单向链表的最后一个节点是指向N

图解堆算法、链表、栈与队列(Mark)

原文地址: 图解堆算法.链表.栈与队列(多图预警) 堆(heap),是一类特殊的数据结构的统称.它通常被看作一棵树的数组对象.在队列中,调度程序反复提取队列中的第一个作业并运行,因为实际情况中某些时间较短的任务却可能需要等待很长时间才能开始执行,或者某些不短小.但很重要的作业,同样应当拥有优先权.而堆就是为了解决此类问题而设计的数据结构.--

数据结构与算法—稀疏数组和队列

目录 稀疏数组和队列 1.稀疏数组 1.1 解决方法 1.2 代码实现 2. 队列 2.1 数组模拟队列 2.2 数组模拟环形队列 稀疏数组和队列 1.稀疏数组 所谓稀疏数组就是当数组中大部分的内容值都未被使用(或都为零),在数组中仅有少部分的空间使用.因此造成内存空间的浪费,为了节省内存空间,并且不影响数组中原有的内容值,我们可以使用稀疏数组去压缩数据.OK,如果你不明白,那我们来看一个例子. ? 在一个五子棋中,有存盘和续上盘的功能 分析问题:因为该二维数组的很多默认值是 0,因此记录了很多

数组模拟队列

数组模拟队列 队列本身是有序列表,若使用数组的结构来存储队列的数据,则队列数组的声明如下图.其中,maxSize 是该队列的最大容量. 因为队列的输出.输入是分别从前后端来处理,因此需要两个变量 front 及 rear 分别记录队列前后端的下标, front 会随着数据输出而改变,而 rear 则是随着数据输入而改变.如图所示: 当将数据存入队列时称为 “addQueue”,addQueue 的处理需要有两个步骤:思路分析: (1)将尾指针往后移:rear+1,当 front == rear

java 数据结构 用数组实现队列

代码内容 1 package com.structure; 2 3 import java.util.Scanner; 4 5 /** 6 * @auther::9527 7 * @Description: 数组模拟队列 8 * @program: jstl2 9 * @create: 2019-10-05 08:58 10 */ 11 public class ArrayQueueDemo { 12 public static void main(String[] args) { 13 Sca

稀疏数组和队列

一.数据结构的分型 数据结构包括线性结构和非线性结构 线性结构: 1.线性结构是最常见的数据结构,其特点是数据元素之间一对一的线性关系 2.线性结构有两种不同的存储结构(数组)和链式存储结构(链表),顺序存储的线性表称为顺序表,顺序表中存储的元素是连续的 3.链式存储的表称为链表,链表中的存储元素不一定是连续的,元素节点中存放数据元素以及相邻元素的地址信息 4.线性结构常见的有:数组,队列,链表和栈 非线性结构: 包括二维数组,多维数组,广义表,图结构,树结构 二.稀疏数组 当一个数组中大部分元

链表和数组的区别

数组是线性结构,可以直接索引,即要去第i个元素,a[i]即可.链表也是线性结构,要取第i个元素,只需用指针往后遍历i次就可.貌似链表比数组还要麻烦些,而且效率低些. 想到这些相同处中的一些细微的不同处,于是他们的真正不同处渐渐显现了:链表的效率为何比数组低些?先从两者的初始化开始.数组无需初始化,因为数组的元素在内存的栈区,系统自动申请空间.而链表的结点元素在内存的堆区,每个元素须手动申请空间,如malloc.也就是说数组是静态分配内存,而链表是动态分配内存.链表如此麻烦为何还要用链表呢?数组不