问题及代码:
/*
* Copyright (c) 2016, 烟台大学计算机与控制工程学院
* All rights reserved.
* 文件名称:queue.cpp
* 作 者:单昕昕
* 完成日期:2016年3月31日
* 版 本 号:v1.0
* 问题描述:输入n(由用户输入)个10以内的数,每输入i(0≤i≤9),就把它插入到第i号队列中。
* 最后把10个队中非空队列,按队列号从小到大的顺序串接成一条链,并输出该链的所有元素。
* 程序输入:n(由用户输入)个10以内的数。
* 程序输出:链队。
*/
#include<iostream>
#include<cstring>
#include<cstdio>
#include<malloc.h>
using namespace std;
const int MaxSize=10;
typedef struct node
{
int data;
struct node *next;
} QNode;
void Insert(QNode *hq[],QNode *tq[],int x) //将x插入到相应队列中
{
QNode *s;
s=(QNode *)malloc(sizeof(QNode)); //创建一个节点
s->data=x;
s->next=NULL;
if (hq[x]==NULL) //对应的队列为空队时
{
hq[x]=s;
tq[x]=s;
}
else
{
tq[x]->next=s; //将*s节点链到tq[x]所指节点之后
tq[x]=s; //让tq[x]仍指向尾节点
}
}
void Create(QNode *hq[],QNode *tq[]) //根据用户输入创建队列
{
int n,x,i;
printf("n=");
scanf("%d",&n);
printf("输入 %d 个数(0-9):\n",n);
for (i=0; i<n; i++)
{
scanf("%d",&x);
Insert(hq,tq,x);
}
}
void Link(QNode *hq[],QNode *tq[]) //将非空队列链接起来并输出
{
QNode *head,*tail; //总链表的首节点指针和尾节点指针
int first=1,i;
for (i=0; i<MaxSize; i++)
{
if (hq[i]!=NULL && first==1) //遇到第一个非空队列
{
head=hq[i]; //让head指向第一个数据节点
tail=tq[i];
first=0;
}
if (hq[i]!=NULL && first==0) //遇到其他非空队列
{
tail->next=hq[i];
tail=tq[i];
}
}
printf("\n输出所有元素:");
while (head!=NULL)
{
printf("%d ",head->data);
head=head->next;
}
printf("\n");
}
int main()
{
int i;
QNode *hq[MaxSize],*tq[MaxSize];
//各队列的队头hq和队尾指针tq
for (i=0; i<MaxSize; i++)
hq[i]=tq[i]=NULL; //置初值
Create(hq,tq); //建立队列
Link(hq,tq); //链接各队列并输出
return 0;
}
运行结果:
(⊙o⊙)…这道题。。我做起来挺困难的,然后参考了一下~