您的位置:首页 > 其它

基数排序 二分查找 车牌号

2008-01-07 07:19 267 查看
//Car.h文件 汽车类

#include<string.h>

class Car
{
public:
char Data[7];
char Style[7];
Car *Next;

Car(Car *p_Car);
Car(char P_Data[],char p_Style[]);
Car();

void Display();
};

Car::Car()
{
}

Car::Car(Car *p_Car)
{
strcpy(Data,p_Car->Data);
strcpy(Style,p_Car->Style);
Next=p_Car->Next;
}

Car::Car(char P_Data[],char p_Style[])
{
strcpy(Data,P_Data);
strcpy(Style,p_Style);
Next=NULL;
}

void Car::Display()
{
cout<<"车牌号是:";
for(int i=0;i<7;i++)
{
cout<<Data[i];
}
cout<<endl;
cout<<"品牌:";
for(i=0;i<7;i++)
{
cout<<Style[i];
}
cout<<endl;
}

//Queue.h 队列

class Queue
{
public:
Car *Front;
Car *Rear;
int Count;

Queue();

bool Is_Empty();

void Push(Car *p_Car);

Car Pop();

Car GetFront();

void Display();
};

Queue::Queue()
{
Front=Rear=NULL;
Count=0;
}

bool Queue::Is_Empty()
{
if(Count==0)
return true;
else
return false;
}

void Queue::Push(Car *p_Car)
{
Car *NewCar=new Car(p_Car);
if(Is_Empty())
{
Front=Rear=NewCar;
Count++;
}
else
{
Rear->Next=NewCar;
Rear=NewCar;
Count++;
}
}

Car Queue::Pop()
{
Car P(Front),*D;
D=Front;
Front=Front->Next;
if(Rear==Front)
{
Rear=NULL;
}
delete D;
Count--;
return P;
}

Car Queue::GetFront()
{
Car *P=new Car(Front);
return *P;
}

void Queue::Display()
{
Car *p;
p=Front;
while(p!=NULL)
{
p->Display();
p=p->Next;
}
}

Main.cpp文件

#include<iostream.h>
#include"Car.h"
#include"Queue.h"
#include<stdio.h>

Car Car_Array[11];
void D_Sort(Queue *Pack_Queue,int startk,int endk,int car_num)
{
Queue Sep_Queue[10];
for(int i=endk;i>=startk;i--)
{
for(int j=0;j<car_num;j++)
{
Car Cur_Car(Pack_Queue->Pop());
int Cur_Num=Cur_Car.Data[i]-'0';
cout<<"Cur_Num="<<Cur_Num<<endl;
Sep_Queue[Cur_Num].Push(&Cur_Car);
}
for(j=0;j<10;j++)
{
while(!Sep_Queue[j].Is_Empty())
{
Pack_Queue->Push(&Sep_Queue[j].Pop());
cout<<"j="<<j<<endl;
}
}
}
}

void C_Sort(Queue *Pack_Queue,int car_num)
{
Queue Sep_Queue[26];
for(int j=0;j<car_num;j++)
{
Car Cur_Car(Pack_Queue->Pop());
int Cur_Num=Cur_Car.Data[2]-'0'-17;
cout<<"Cur_Num="<<Cur_Num<<endl;
Sep_Queue[Cur_Num].Push(&Cur_Car);
}
for(j=0;j<26;j++)
{
while(!Sep_Queue[j].Is_Empty())
{
Pack_Queue->Push(&Sep_Queue[j].Pop());
cout<<"j="<<j<<endl;
}
}
}

int Compare_Num(char p_data1[],char p_data2[])
{
for(int i=0;i<7;)
{
if(p_data1[i]==p_data2[i])
{
i++;
}
else if(p_data1[i]<p_data2[i])
{
return -1;
}
else if(p_data1[i]>p_data2[i])
{
return 1;
}
}
return 0;
}

void Search_Car(char s_data[],int car_num)
{
char b[7];
strcpy(b,s_data);
int start=0,high=car_num;
while(start<high)
{
int yb=(start+high)/2;
int judge=Compare_Num(b,Car_Array[yb].Data);
if(judge==0)
{
cout<<"你想要的车是:"<<endl;
Car_Array[yb].Display();
return;
}
else if(judge==-1)
{
high=yb-1;
}
else if(judge==1)
{
start=yb+1;
}
cout<<"yb="<<yb<<endl;
cout<<"judge="<<judge<<endl;
cout<<"start="<<start<<endl;
cout<<"high="<<high<<endl;
}
cout<<"对不起,没有你要的车!"<<endl;
}

void main()
{
int car_num;
Queue MainQueue;

cout<<"自动产生数据?y/n";
char a;
cin>>a;
if(a=='y')
{
car_num=11;
for(int k=0;k<11;k++)
{
Car_Array[k]=Car("54A2874","54A2874");
}
for(int i=0;i<car_num;i++)
{
MainQueue.Push(&Car_Array[i]);
}
}
else
{
cout<<"请输入车辆数:"<<endl;
cin>>car_num;
for(int K=0;K<car_num;K++)
{
char num[7],style[7];
cout<<"请输入第"<<K<<"辆车的牌号:"<<endl;
cin>>num;
cout<<"请输入第"<<K<<"辆车的品牌:"<<endl;
cin>>style;
Car New_Car(num,style);
MainQueue.Push(&New_Car);
}
}
D_Sort(&MainQueue,3,6,car_num);
C_Sort(&MainQueue,car_num);
D_Sort(&MainQueue,0,1,car_num);

cout<<"**********"<<MainQueue.Count<<endl;
getchar();
for(int i=0;i<car_num;i++)
{
Car_Array[i]=MainQueue.Pop();
}
char ser[7];
cout<<"请输入你要查找的车牌号:"<<endl;
cin>>ser;
Search_Car(ser,car_num);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: