第七周项目4-队列数组

来源:互联网 发布:做耳环的材料淘宝店铺 编辑:程序博客网 时间:2024/06/04 23:23

问题及代码:

/*copyright (t) 2016,烟台大学计算机学院*All rights reserved.*文件名称:1.cpp*作者:常锐*完成日期:2016年10月13日*版本号:v1.0*问题描述:创建10个队列,分别编号为0-9(处理为队列数组,编号即下标)。输入若干个正整数,以数字0作为结束。设输入的值为x,其个位数字的大小为i,则将x插入到编号为i的队列中。最后输出所有的非空队列。    要求将队列处理成链式队列,使用链式队列算法库中定义的数据类型及算法,程序中只包括一个函数(main函数),入队和出队等操作直接在main函数中调用即可。 *输入描述:若干正整数*程序输出:整理后的队列*/

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;}

运行结果:


知识点总结:

       链队的应用

心得体会:

       通过此项目,加深了对链队基本算法的认知与理解,同时接触了“链队指针”的新概念,增强了综合运用所学解决实际问题的能力。

0 0
原创粉丝点击