C# · 12月 20, 2021

数据结构课程设计—-车牌查询问题

汽车牌照的快速查询    对一组汽车牌照进行排序和查找。 基本要求:    

(1)利用排序算法对汽车牌照进行排序;    

(2)采用折半查找思想完成查找。

测试数据要求:     测试的数据不得少于50个,不得有重复的牌照。车牌号中可以是数字和字符的组合,车牌号可以人工输入,也可以自动生成。  

#include

#include

#include

#include

typedef char Car[10];

typedef struct

{

Car *elem;

int length;

}LinkList;

void Input(LinkList &L)

{

printf(“请输入待排序车辆的数目:n”);

scanf(“%d”,&L.length);

L.elem=(Car*)malloc(L.length*sizeof(Car));

printf(“请依次输入车辆的车牌号:n”);

for(int i=0;i<L.length;i++)

scanf(“%s”,L.elem[i]);

}

void BubbleSort(LinkList &L)

{//对车牌号进行排序

char a[20];

int i,j;

int flag=1;

for(i=0;i<L.length-1 && flag;i++)

{

flag=0;

for(j=0;j<L.length-i-1;j++)

if(strcmp(L.elem[j],L.elem[j+1])>0)

{

strcpy(a,L.elem[j]);

strcpy(L.elem[j],L.elem[j+1]);

strcpy(L.elem[j+1],a);

flag=1;

}

}

}

void Binsrch(LinkList &L,char *a)

{//利用折半查找查找车牌号是否存在

int low,high,mid;

int flag=1;

low=0;

high=L.length-1;

while(low<=high&&flag)

{

mid=(low+high)/2;

if(strcmp(a,L.elem[mid])==0)

{

printf(“查找的该车牌号是第%d个。n”,mid+1);

flag=0;

}

else if(strcmp(a,L.elem[mid])>0)

{

low=mid+1;

mid=(low+high)/2;

}

else

{

high=mid-1;

mid=(low+high)/2;

}

}

if(flag)

printf(“查找的车牌号不存在。n”);

}

void Output(LinkList &L)

{

int i;

for(i=0;i<L.length;i++)

printf(“%sn”,L.elem[i]);

}

int main()

{

int i;

LinkList L;

char car[20];

while(1)

{

printf(“————————请选择操作——————————n”);

printf(“——1.输入信息 2.车牌号排序 3. 车牌号查询 0.退出——n”);

scanf(“%d”,&i);

switch(i)

{

case 1:

Input(L);

break;

case 2:

printf(“车牌号的排序结果为:n”);

BubbleSort(L);

Output(L);

break;

case 3:

printf(“输入要查找的车牌号:n”);

getchar();

gets(car);

Binsrch(L,car);

break;

case 0:

return 0;

}

}

return 0;

}