c++数组队列的应用问题,大家来帮我看看啊,我没招了(新手提问)
数组队列的应用问题,我写的虽然无错误,但运行不出来,请大家帮我改改,最好改成能比较任意数的,而不只限于两位数,在有错的地方帮我注明下,我多给分啊,呵呵
题目要求:
初始表:91 46 85 15 92 35 31 22
第一遍,将初始表按照个位数分散到10个箱子
按照0~9的顺序从10个箱子中回收卡片(先进先出)
回收后的表为:91 31 92 22 85 15 35 46
第二遍,将第一遍回收后的表按十位数分散到10个箱子
然后按照0~9的顺序从10个箱子回收数据,回收后的顺序为15 22 31 35 46 85 91 92为已经有序的序列
第一遍保证所有个数位小的卡片在个数位大的卡片的前面
第二遍,如果两卡片的值分别为3s和3t,且s<t,他们进入箱子3的顺序为3s后跟3t
由于箱子有序,卡片从箱子3中以FIFO的顺序取出。
经过两遍后,卡片排序完毕。
#include <iostream.h>
#include <stdio.h>
#include <string.h>
typedef char DataType;
const int MaxQSize = 50;
class Queue
{
private:
// queue array and its parameters
int front,rear,count;
DataType qlist[MaxQSize];
public:
Queue(void):front(0),rear(0),count(0){} // initialize integer
//data members
// queue modification operations
void QInsert(const DataType &item)
{
if (QFull()) return;
qlist[rear++]=item;
rear%=MaxQSize;
++count;
}
DataType QDelete(void)
{
DataType t;
if(QEmpty()) return 0;
t=qlist[front++];
front%=MaxQSize;
--count;
return t;
}
void ClearQueue(void)
{
front=rear=count=0;
}
void Show()
{
for (int i=0;i<count;i++)
cout<<qlist[(front+i)%MaxQSize];
cout<<endl;
}
// queue access
DataType QFront(void)
{return qlist[front++];}
// queue test methods
int QLength(void) const{return count;}
int QEmpty(void) const{return count==0;}
int QFull(void) const{return count==MaxQSize;}
};
/*class weishu
{
public:
int quweishu(int *c,int d);
void paixu(int *f,int *e);
private:
int f[MaxQSize];
};*/
/*void quweishu(int *c,int d,int *f)
{
int i;
for(i=0;i<d;i++)
f[i]=c[i]%10;
}
void paixu(int *f,int *e,int h)
{
int t;int i;
for(i=0;i<h;i++)
for(j=h-1;j>i;j--)
if(f[i]>f[j])
{
t=e[i];e[i]=e[j];e[j]=t;
}
for(i=0;i<h;i++)
cout<<e[i]<<" ";
}
*/
void main()
{
Queue Q[10];
// weishu W;
int g[MaxQSize];
int i;int b;int j;int k;
char a[MaxQSize];
int c[MaxQSize];
for(i=0;i<10;i++)
Q[i].ClearQueue();
//Queue *p=new Queue[10];
cout<<"请输入要进行比较的数字个数:"<<endl;
cin>>b;
cout<<"请输入要进行比较的数字:"<<endl;
for(i=0;i<b;i++)
cin>>a[i];
for(i=0;i<b;i++)
if(a[i]%10==j)
Q[j].QInsert(a[i]);
cout<<"按个位数排序后的顺序为:"<<endl;
for(i=0;i<10;i++)
Q[i].Show();
for(i=0;i<b;i++)
if(a[i]%100==j)
Q[j].QInsert(a[i]);
for(i=0;i<b;i++)
for(k=b-1;k>0;k++)
{
if(a[i]/10==a[k]/10==j&&i<k)
{
Q[j].QInsert(a[i]);
Q[j].QInsert(a[k]);
}
if(a[i]%100==a[k]%100==j&&i>k)
{
Q[j].QInsert(a[k]);
Q[j].QInsert(a[k]);
}
}
cout<<"按十位数排序后的顺序为:"<<endl;
for(i=0;i<10;i++)
Q[i].Show();
delete []p;
}