数据结构上机实践第七周项目4 - 队列数组

简介: 数据结构上机实践第七周项目4 - 队列数组
/*  
copyright (t) 2017,烟台大学计算机学院  
*All rights reserved.  
*文件名称:1.cpp  
*作者:田长航 
*完成日期:2016年10月14日  
*版本号:v1.0  
*问题描述:创建10个队列,分别编号为0-9(处理为队列数组,编号即下标)。输入若干个正整数,以数字0作为结束。设输入的值为x,其个位数字的大小为i,则将x插入到编号为i的队列中。最后输出所有的非空队列。   
   要求将队列处理成链式队列,使用链式队列算法库中定义的数据类型及算法,程序中只包括一个函数(main函数),入队和出队等操作直接在main函数中调用即可。   
*输入描述:若干正整数  
*程序输出:整理后的队列  
*/    
<pre name="code" class="cpp">//liqueue.h  
typedef int ElemType;                       //自定义整型数据类型    
typedef struct qnode                        //链队中数据节点的类型    
{    
    ElemType data;    
    struct qnode *next;    
} QNode;    
typedef struct                              //链队节点的类型    
{    
    QNode *front;    
    QNode *rear;    
} LiQueue;    
void InitQueue(LiQueue *&q);                //初始化链队    
void DestroyQueue(LiQueue *&q);             //销毁链队    
bool QueueEmpty(LiQueue *q);                //判断链队是否为空    
int QueueLength(LiQueue *q);                //返回链队中元素个数,也称队列长度    
void enQueue(LiQueue *&q,ElemType e);       //进队    
bool deQueue(LiQueue *&q,ElemType &e);      //出队    
//liqueue.cpp  
#include <malloc.h>    
#include "liqueue.h"    
void InitQueue(LiQueue *&q)                 //初始化链队    
{    
    q=(LiQueue *)malloc(sizeof(LiQueue));    
    q->front=q->rear=NULL;    
}    
void DestroyQueue(LiQueue *&q)              //销毁链队    
{    
    QNode *p=q->front,*r;    
    if(p!=NULL)    
    {    
        r=p->next;    
        while(r!=NULL)    
        {    
            free(p);    
            p=r;    
            r=p->next;    
        }    
    }    
    free(p);    
    free(q);    
}    
bool QueueEmpty(LiQueue *q)                 //判断链队是否为空    
{    
    return (q->rear==NULL);    
}    
int QueueLength(LiQueue *q)                 //返回链队中元素个数,也称队列长度    
{    
    QNode *p=q->front;    
    int length=0;                           //设计数变量,记录表长    
    while(p!=NULL)    
    {    
        length++;    
        p=p->next;    
    }    
    return length;    
}    
void enQueue(LiQueue *&q,ElemType e)        //进队    
{    
    QNode *p;    
    p=(QNode *)malloc(sizeof(QNode));    
    p->data=e;    
    p->next=NULL;                           //创建data域为e、指针域为NULL的数据节点*p    
    if(q->rear==NULL)    
        q->front=q->rear=p;    
    else    
    {    
        q->rear->next=p;    
        q->rear=p;    
    }    
}    
bool deQueue(LiQueue *&q,ElemType &e)       //出队 需考虑队列为空的情况,故设置函数类型为bool型    
{    
    QNode *t;    
    if(q->rear==NULL)    
        return false;    
    t=q->front;    
    if(q->front==q->rear)    
        q->front=q->rear=NULL;    
    else    
        q->front=q->front->next;    
    e=t->data;    
    free(t);    
    return true;    
}    
//main.cpp  
#include <stdio.h>    
#include <malloc.h>    
#include "liqueue.h"    
int main()    
{    
    LiQueue *qu[10];             //qu数组存指向LiQueue类型的指针    
    ElemType e;    
    int i,x;                     //x为输入的正整数,i为个位数字    
    while(1)    
    {    
        for(i=0;i<10;i++)    
            InitQueue(qu[i]);    
        printf("输入若干正整数,以0结束:\n");    
        while(scanf("%d",&x)!=EOF && x!=0)    
        {    
            if(x>0)    
            {    
                i=x%10;          //对x除以10取余得个位数字    
                enQueue(qu[i],x);//x进队    
            }    
        }    
        printf("按个位数整理到各个队列中后,各队列出队的结果是:\n");    
        for(i=0;i<10;i++)    
        {    
            printf("qu[%d]:",i);    
            while(!QueueEmpty(qu[i]))    
            {    
                deQueue(qu[i],e);    
                printf("%d ",e);    
            }    
            printf("\n");    
        }    
        for(i=0;i<10;i++)    
            DestroyQueue(qu[i]);    
    }    
    return 0;    
}   

image.png

相关文章
|
1月前
|
C语言
【数据结构】栈和队列(c语言实现)(附源码)
本文介绍了栈和队列两种数据结构。栈是一种只能在一端进行插入和删除操作的线性表,遵循“先进后出”原则;队列则在一端插入、另一端删除,遵循“先进先出”原则。文章详细讲解了栈和队列的结构定义、方法声明及实现,并提供了完整的代码示例。栈和队列在实际应用中非常广泛,如二叉树的层序遍历和快速排序的非递归实现等。
181 9
|
2月前
|
存储 算法 C语言
通义灵码在考研C语言和数据结构中的应用实践 1-5
通义灵码在考研C语言和数据结构中的应用实践,体验通义灵码的强大思路。《趣学C语言和数据结构100例》精选了五个经典问题及其解决方案,包括求最大公约数和最小公倍数、统计字符类型、求特殊数列和、计算阶乘和双阶乘、以及求斐波那契数列的前20项和。通过这些实例,帮助读者掌握C语言的基本语法和常用算法,提升编程能力。
88 4
|
23天前
|
存储 缓存 算法
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式,强调了合理选择数据结构的重要性,并通过案例分析展示了其在实际项目中的应用,旨在帮助读者提升编程能力。
44 5
|
1月前
|
存储 人工智能 算法
数据结构实验之C 语言的函数数组指针结构体知识
本实验旨在复习C语言中的函数、数组、指针、结构体与共用体等核心概念,并通过具体编程任务加深理解。任务包括输出100以内所有素数、逆序排列一维数组、查找二维数组中的鞍点、利用指针输出二维数组元素,以及使用结构体和共用体处理教师与学生信息。每个任务不仅强化了基本语法的应用,还涉及到了算法逻辑的设计与优化。实验结果显示,学生能够有效掌握并运用这些知识完成指定任务。
51 4
|
1月前
|
算法 安全 NoSQL
2024重生之回溯数据结构与算法系列学习之栈和队列精题汇总(10)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第3章之IKUN和I原达人之数据结构与算法系列学习栈与队列精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
2月前
【数据结构】-- 栈和队列
【数据结构】-- 栈和队列
21 0
|
2月前
探索数据结构:队列的的实现与应用
探索数据结构:队列的的实现与应用
|
1月前
|
存储 算法
非递归实现后序遍历时,如何避免栈溢出?
后序遍历的递归实现和非递归实现各有优缺点,在实际应用中需要根据具体的问题需求、二叉树的特点以及性能和空间的限制等因素来选择合适的实现方式。
32 1
|
1月前
|
存储 算法 Java
数据结构的栈
栈作为一种简单而高效的数据结构,在计算机科学和软件开发中有着广泛的应用。通过合理地使用栈,可以有效地解决许多与数据存储和操作相关的问题。
|
1月前
|
存储 JavaScript 前端开发
执行上下文和执行栈
执行上下文是JavaScript运行代码时的环境,每个执行上下文都有自己的变量对象、作用域链和this值。执行栈用于管理函数调用,每当调用一个函数,就会在栈中添加一个新的执行上下文。