汽车牌照管理系统

排序和查找是在数据处理中使用频度极高的操作,为加快查找的速度需现对数据记录按关键字 排序。在汽车数据的信息模型中,汽车牌照是关键字,而且是具有结构特点的一类关键字,因 为汽车牌照号是数字和字母混编的,例如01B7328,这种记录集合是一个适于利用多关键字进行 排序的典型例子。
[ 基本要求 ]
(1)首先利用链式基数排序方法实现排序,然后利用折半查找方法,实现对汽车记录按关键字进行查找。
(2)汽车记录集合可以人工录入,也可以按自动方式随机生成。

#include<stdio.h>
#include<malloc.h>
#include <string.h>
#include<stdlib.h>
#define KSIZE 7//车牌号位数
#define n 3//车牌号个数
#define r 26//基数
#define xm 3//姓名长度
char a[n][10]; //定义字符数组存放车牌号
char b[n][xm]; //定义字符数组存放车主
typedef struct node
{
   
	char key[KSIZE];//关键字
	char name[xm];//存放车主
	struct node * next;
}NodeType;//结点
void CreateLink(NodeType *&p)
{
   //n为车牌号码个数,采用尾插法创建单链表
	NodeType *s, *t;
	t = s = NULL;//初始化结点
	for (int i = 0; i<n; i++)
	{
   
		s = (NodeType *)malloc(sizeof(NodeType));//对于每个车牌,创建一个结点
		printf("请输入车牌号信息:(例:01B1234 车牌格式为:01(两位数字)+B(大写字母)1234(四位数字))\n");
		scanf("%s", a[i]);//输入车牌号
		getchar();//接受回车键
		printf("请输入车主名:");
		scanf("%s", b[i]);//输入车主姓名
		getchar();//接受回车键
		for (int j = 0; j <= KSIZE - 1; j++)
		{
   
			s->key[j] = a[i][j];//将数组的值赋给关键字
		}
		for (int j = 0; j <= xm - 1; j++)
		{
   
			//将数组的值赋给关键字
			s->name[j] = b[i][j];
		}
		if (i == 0)
		{
   //第一个车牌
			p = s;//p,t指向第一个结点s
			t = s;
		}
		else
		{
   
			t->next = s;//t是队尾指针,将s插入队尾
			t = s;
		}
	}
	t->next = NULL;//最后一个结点的next置为NULL
}
void DispLink(NodeType *p)
{
   //输出链表
	while (p != NULL)
	{
   
		printf("车牌号为:\n");
		for (int i = 0; i<KSIZE; i++)
			printf("%c"
  • 3
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
以下是一个基于链表的汽车牌照管理系统数据结构C语言代码示例: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_LEN 20 // 定义一个车辆结构体 typedef struct Car { char plate_num[MAX_LEN]; // 车牌号码 char owner[MAX_LEN]; // 车主姓名 int year; // 购买年份 struct Car *next; // 指向下一个车辆的指针 } Car; // 插入新车辆记录 void insert_car(Car **head, char *plate_num, char *owner, int year) { // 创建一个新车辆结构体 Car *new_car = (Car *) malloc(sizeof(Car)); strcpy(new_car->plate_num, plate_num); strcpy(new_car->owner, owner); new_car->year = year; new_car->next = NULL; // 如果链表为空,直接将新车辆作为头结点 if (*head == NULL) { *head = new_car; return; } // 找到链表末尾,并将新车辆插入链表尾部 Car *cur = *head; while (cur->next != NULL) { cur = cur->next; } cur->next = new_car; } // 删除指定车辆记录 void delete_car(Car **head, char *plate_num) { // 如果链表为空,则直接返回 if (*head == NULL) { return; } // 如果要删除的车辆是头结点,直接将头结点指向下一个节点 if (strcmp((*head)->plate_num, plate_num) == 0) { Car *temp = *head; *head = (*head)->next; free(temp); return; } // 找到要删除的车辆节点,并将其从链表中删除 Car *cur = *head; while (cur->next != NULL && strcmp(cur->next->plate_num, plate_num) != 0) { cur = cur->next; } if (cur->next != NULL) { Car *temp = cur->next; cur->next = temp->next; free(temp); } } // 修改指定车辆记录 void modify_car(Car *head, char *plate_num, char *new_owner, int new_year) { // 找到要修改的车辆节点,并更新车主姓名和购买年份 Car *cur = head; while (cur != NULL && strcmp(cur->plate_num, plate_num) != 0) { cur = cur->next; } if (cur != NULL) { strcpy(cur->owner, new_owner); cur->year = new_year; } } // 查找指定车辆记录 void find_car(Car *head, char *plate_num) { // 找到要查找的车辆节点,并输出车辆信息 Car *cur = head; while (cur != NULL && strcmp(cur->plate_num, plate_num) != 0) { cur = cur->next; } if (cur != NULL) { printf("车牌号码:%s,车主姓名:%s,购买年份:%d\n", cur->plate_num, cur->owner, cur->year); } else { printf("未找到车牌号码为%s的车辆记录\n", plate_num); } } // 输出所有车辆记录 void print_all_cars(Car *head) { // 遍历链表,并输出每辆车的信息 Car *cur = head; while (cur != NULL) { printf("车牌号码:%s,车主姓名:%s,购买年份:%d\n", cur->plate_num, cur->owner, cur->year); cur = cur->next; } } int main() { Car *head = NULL; // 插入新车辆记录 insert_car(&head, "京A12345", "张三", 2020); insert_car(&head, "京B67890", "李四", 2019); insert_car(&head, "京C24680", "王五", 2018); // 输出所有车辆记录 print_all_cars(head); // 删除一辆车辆记录 delete_car(&head, "京B67890"); // 输出所有车辆记录 print_all_cars(head); // 修改一辆车辆记录 modify_car(head, "京A12345", "赵六", 2021); // 输出所有车辆记录 print_all_cars(head); // 查找一辆车辆记录 find_car(head, "京C24680"); return 0; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值