问题描述:
输入n个10以内的数,每输入i,就把它插入到第i号队列中。最后把10个队列中非空队列,按列号从小到大的顺序串成一条链,并输出该链的所有元素。
代码:
#include <iostream>
#include <malloc.h>
using namespace std;
typedef struct node
{
int data;
struct node *next;
}QNode;
typedef struct
{
QNode *front;
QNode *rear;
}LiQueue;
void Insert(LiQueue *qu[],int x)
{
QNode *p;
p=(QNode*)malloc(sizeof(QNode));
p->data=x;
p->next=NULL;
if(qu[x]->rear==NULL)
qu[x]->front=qu[x]->rear=p;
else
{
qu[x]->rear->next=p;
qu[x]->rear=p;
}
}
void Link(LiQueue *qu[],LiQueue *&p)
{
int first=1;
for(int i=0;i<10;i++)
{
if(qu[i]->front!=NULL&&first==1)
{
p->front=qu[i]->front;
p->rear=qu[i]->rear;
first=0;
}
if(qu[i]->front!=NULL&&first==0)
{
p->rear->next=qu[i]->front;
p->rear=qu[i]->rear;
}
}
}
void Distroy(LiQueue *&q)
{
QNode *p=q->front,*r;
if(p!=NULL)
{
r=p->next;
while(r!=NULL)
{
free(p);
p=r;
r=r->next;
}
}
free(p);
free(q);
}
int main()
{
LiQueue *qu[10];
for(int i=0;i<10;i++)
{
qu[i]=(LiQueue*)malloc(sizeof(LiQueue));
qu[i]->front=qu[i]->rear=NULL;
}
cout<<"n:";
int x,n,i;
cin>>n;
for(i=0;i<n;i++)
{
do
{
cout<<"第"<<i+1<<"个数:";
cin>>x;
}while(x<0||x>9);
Insert(qu,x);
}
LiQueue *p;
Link(qu,p);
cout<<"所有元素:";
QNode *h=p->front;
while(h!=NULL)
{
cout<<h->data<<" ";
h=h->next;
}
Distroy(p);
return 0;
}
运行结果:
最后想说:
这个程序有bug,在最后执行完最后一步的时候,会弹窗提示已停止工作。
目前脑子已经完全混乱,待日后修补。
求高人指点。