数据结构实践——队列数组

本文是针对数据结构基础系列网络课程(3):栈和队列的实践项目。

【项目 - 队列数组】
  创建10个队列,分别编号为0-9(处理为队列数组,编号即下标)。输入若干个正整数,以数字0作为结束。设输入的值为x,其个位数字的大小为i,则将x插入到编号为i的队列中。最后输出所有的非空队列。
  要求将队列处理成链式队列,使用链式队列算法库中定义的数据类型及算法,程序中只包括一个函数(main函数),入队和出队等操作直接在main函数中调用即可。
  设程序运行时输入:70 59 90 72 67 88 80 64 29 97 18 83 40 13 0
  输出结果如下图:
  

提示:
- 指向单个链队的指针如下定义:
 LiQueue *qu;
- 本项目中使用的队列数组,实际上需要将十个链队的指针,顺序存储到一个数组中即可,如下定义:
LiQueue *qu[10]; //qu是数组,数组中存储指针,存储的是指向LiQueue类型的指针

[参考解答] (本文所用的链式队列的算法库(liqueue.h),请点击链接…)

#include <stdio.h>
#include <malloc.h>
#include "liqueue.h"
#define N 10

int main()
{
    int i, a;
    LiQueue *qu[N]; //定义队列指针数组
    for (i=0; i<N; i++)
        InitQueue(qu[i]);       //初始化队列

    //为队列中加入值
    printf("输入若干正整数,以0结束: ");
    scanf("%d", &a);
    while(a)
    {
        enQueue(qu[a%10], a);
        scanf("%d", &a);
    }

    //输出各个队列
    printf("按个位数整理到各个队列中后,各队列出队的结果是: \n");
    for (i=0; i<N; i++)
    {
        printf("qu[%d]: ", i);
        while(!QueueEmpty(qu[i]))
        {
            deQueue(qu[i], a);
            printf("%d ", a);
        }
        printf("\n");
    }

    //销毁各个队列
    for (i=0; i<N; i++)
        DestroyQueue(qu[i]);
    return 0;
}

特别提示:原liqueue.h(请点击链接…)中的typedef char ElemType;需改为typedef int ElemType;

时间: 2024-07-30 12:07:06

数据结构实践——队列数组的相关文章

数据结构实践项目——数组和广义表

本文针对 [数据结构基础系列网络课程(5):数组和广义表] 1. 数组的基本概念与存储结构 2. 特殊矩阵的压缩存储 3. 稀疏矩阵的三元组表示 4. 稀疏矩阵的十字链表表示 5. 广义表 6. 广义表的存储结构及基本运算的实现 [项目1 - 猴子选大王(数组版)] 一群猴子,编号是1,2,3 -m,这群猴子(m个)按照1-m的顺序围坐一圈.从第1只开始数,每数到第n个,该猴子就要离开此圈,这样依次下来,最后一只出圈的猴子为大王.输入m和n,输出猴子离开圈子的顺序,从中也可以看出最后为大王是几号

数据结构实践项目——队列

本组项目针对<数据结构基础系列(3):栈和队列>中的7-12课: 7.队列的定义 8. 顺序队的存储及基本操作 9. 环形队列的存储及基本操作 10. 队列的链式存储结构及其基本运算的实现 11. 队列的应用-迷宫问题 12. 双端队列 [项目1 - 建立顺序环形队列算法库] 定义顺序环形队列存储结构,实现其基本运算,并完成测试. 要求: 1.头文件sqqueue.h中定义数据结构并声明用于完成基本运算的函数.对应基本运算的函数包括: void InitQueue(SqQueue *&

求助-数据结构二维数组问题

问题描述 数据结构二维数组问题 设二维数组A[1...m,1...n]按行存储在数组B中,则二维数组元素A[i,j]在一维数组B中的下标为() A.n*(i-1)+j B.n*(i-1)+j-1 C.i*(j-1) D.j*m+i-1 答案是A,想知道具体的做法和计算过程,谢谢了 解决方案 m行n列,每行有n个,下标(i,j),就是第i行从左至右第j个的位置,而从第一到第i-1行每行都有n个,已经有n*(i-1)个,所以再加上第i行的j就是了 解决方案二: 二维数组作为参数传递问题 解决方案三:

数据结构循环队列存储问题

问题描述 数据结构循环队列存储问题 在具有n个存储单元的循环队里中,队满时有n-1个元素,还有一个元素用来存储什么? 解决方案 队列两端需要保留同一个元素,为了循环用 解决方案二: 队列为空时,队头FRONT与队尾REAR相等,作循环队列用时不能将其填满,因为满了的话REAR标志又与队头标志FRONT相等了,与队列为空时的标志一样,冲突了. 解决方案三: 摘一段网上说的,给你 n-1个 因为如果放置n个元素,首尾指针指向同一位置,与空队列无法区别,所以循环队列中认为当尾指针的后一个指针为首指针时

Python之NumPy实践之数组和矢量计算

Python之NumPy实践之数组和矢量计算 1. NumPy(Numerical Python)是高性能科学技术和数据分析的基础包. 2. NumPy的ndarray:一种对位数组对象.NumPy最重要的一个特点是其N维数组对象(即ndarray),该对象是是一个快速而灵活的大数据集容器. 3. 创建ndarray data1 = [1,2.4,4,3,0] arr1 = np.array(data1) 除np.array可以创建新数组之外,zeros和ones分别可以创建指定长度或形状的全0

c语言-数据结构循环队列 为什么执行后的结果是这样,不能正确的输出结果

问题描述 数据结构循环队列 为什么执行后的结果是这样,不能正确的输出结果 #include #include #define OK 1 #define ERROR -1 #define OVERFLOW -2 #define INIT_QUEUE_SIZE 5//当前分配的最大空间 #define QUEUEINCREMENT 10 typedef int Status; typedef float QElemType ; typedef struct { QElemType* base;//初

数据结构实验之数组一:矩阵转置

数据结构实验之数组一:矩阵转置 Time Limit: 1000MS Memory Limit: 65536KB Problem Description 数组--矩阵的转置 给定一个m*n的矩阵(m,n<=100),求该矩阵的转置矩阵并输出.   Input  输入包含多组测试数据,每组测试数据格式如下: 第一行包含两个数m,n 以下m行,每行n个数,分别代表矩阵内的元素. (保证矩阵内的数字在int范围之内)   Output  对于每组输出,输出给定矩阵的转置矩阵.两组输出之间用空行隔开.

数据结构实践——停车场模拟(栈和队列综合)

本文是针对数据结构基础系列网络课程(3):栈和队列的实践项目. 设停车场是一个可停放n辆汽车的狭长死胡同,南边封口,汽车只能从北边进出(这样的停车场世间少有).汽车在停车场内按车辆到达时间的先后顺序,最先到达的第一辆车停放在车场的最南端,依次向北排开.若车场内已停满n辆汽车,则后来的汽车只能在门外的候车场上等候,一旦有车开走,则排在候车场上的第一辆车即可开入.当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路(假定停车场内设有供车辆进出的便道,所有的司机也必须在车内随时待命),待

数据结构实践——猴子选大王(数组版)

本文针对数据结构基础系列网络课程(5): 数组与广义表的实践项目. [项目 - 猴子选大王(数组版)] 一群猴子,编号是1,2,3 -m,这群猴子(m个)按照1-m的顺序围坐一圈.从第1只开始数,每数到第n个,该猴子就要离开此圈,这样依次下来,最后一只出圈的猴子为大王.输入m和n,输出猴子离开圈子的顺序,从中也可以看出最后为大王是几号猴子. 要求采用数组作为存储结构完成. [参考解答1] 在一个数组中,数组中用1表示猴子在圈中,用0表示猴子已经出圈,数组下标对应与猴子编号对应(例如数组元素p[0