基数排序 二分查找 车牌号

来源:互联网 发布:数据库批处理 编辑:程序博客网 时间:2024/06/05 20:49

 

 

//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);
 
}

原创粉丝点击