-
/*
-
-
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;
-
}
相关文章:
-
2021-07-19
-
2021-12-24
-
2021-11-24
-
2021-05-04
-
2021-11-01
-
2021-04-29
-
2021-09-13
-
2022-12-23
猜你喜欢
-
2021-06-21
-
2021-11-15
-
2021-06-02
-
2021-11-25
-
2021-07-12
-
2021-11-18
-
2021-08-21
相关资源
-
下载
2022-12-26
-
下载
2023-01-07
-
下载
2021-06-23