#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Node
{
char num[10]; /*定义结构体内容*/
char name[20];
int vip;
struct Node *next; /*结构体链表*/
}ListNode,*LinkList; /*定义结构体指针*/
typedef struct
{
ListNode data[10]; /*定义队列内容为结构体对象数组*/
int front;
int rear;
}SqQueue;
int Srand(int *i) /*随机数函数,提供vip等级*/
{
*i = rand()%5; /*5为随机数范围*/
return *i;
}
int CreateListCar(LinkList *head) /*创建车辆信息*/
{
int i = 2;
LinkList r,p1;
(*head) = (LinkList)malloc(sizeof(ListNode));
(*head) -> next = NULL; /*头结点为空*/
r = *head;
p1 = (LinkList)malloc(sizeof(ListNode)); /*申请动态内存*/
printf("请输入第1辆车的信息: \n");
printf("请输入车牌号: ");
scanf("%s",p1 -> num);
printf("请输入车主姓名: ");
scanf("%s",p1 -> name);
p1 -> vip = Srand(&(p1 -> vip)); /*使用随机数函数给vip赋值*/
while(strcmp(p1 -> num ,"0")) /*输入结束标志*/
{
p1 -> next = r -> next; /*尾插法插入结点*/
r -> next = p1;
r = p1; /*每次将r移到最后一个结点*/
p1 = (LinkList)malloc(sizeof(ListNode));
printf("请输入第%d辆车的信息: \n",i);
printf("请输入车牌号: ");
scanf("%s",p1 -> num);
printf("请输入车主姓名: ");
scanf("%s",p1 -> name);
p1 -> vip = Srand(&(p1 -> vip));
i ++;
}
}
int InitQueue(SqQueue *Q) /*初始化队列函数*/
{
Q -> front = 0;
Q -> rear = 0;
return 1;
}
int PushQueueCar(SqQueue *Q,LinkList head) /*将链表导入队列*/
{
LinkList p;
p = head -> next;
while(p)
{
strcpy(Q -> data[Q -> rear].num,p -> num);/*将链表结点信息传入队列*/
strcpy(Q -> data[Q -> rear].name,p -> name);
Q -> data[Q -> rear].vip = p -> vip;
p = p -> next;
Q -> rear ++; /*每次导入一个结点,将rear+1*/
} /*这里应该将rear-1,但要改下面的,懒得改*/
printf("入队成功\n");
}
int PopQueueCar(SqQueue *Q) /*车辆信息出队列函数*/
{
while(Q -> front < Q -> rear)
{
printf("从停车场出来的的车牌号为: %s , 车主为: %s , vip等级为: %d\n",Q -> data[Q -> front].num,Q -> data[Q -> front].name,Q -> data[Q -> front].vip);
Q -> front ++; /*队列从一端输出*/
}
Q -> front = 0; /*出完队列后将front置零,便于下次出对*/
return 0;
}
int SelectSortListCar(LinkList head) /*选择排序,数组存放结构体指针*/
{
LinkList s[11],p; /*结构体链表数组,存放指针,分别指向每个结点*/
int i,j,min;
p = head -> next;
for(i = 1;i < 11 && p != NULL;i++) /*元素个数等于结点个数*/
{
s[i] = p; /*存放指针,即结点所在地址*/
p = p -> next;
}
s[i] = NULL; /*第i个为空,不然会出错*/
for(i = 1;i < 10 && s[i] != NULL;i++) /*选择排序*/
{
min = i;
for(j = i+1;j <= 10 && s[j] != NULL;j++)
{
if(s[min] -> vip < s[j] -> vip) /*比较vip等级*/
min = j; /*交换下标*/
}
if(i != min) /*如果if成立,则i不是当前最大的*/
{
s[0] = s[i];
s[i] = s[min];
s[min] = s[0]; /*交换的是结点的指针*/
} /*最后数组存放的是排序好的地址指针*/
}
for(i = 1;i < 11 && s[i] != NULL;i++)
{
printf("第%d辆出来的的车牌号为: %s , 车主为: %s , vip等级为: %d\n",i,s[i] -> num,s[i] -> name,s[i] -> vip);
}
}
int BubbleSortListCar(LinkList head) /*初级冒泡排序*/
{
int t;
LinkList p,p1,p2,p3,p4;
p1 = head -> next; /*p1用来遍历*/
p2 = head; /*p2更着遍历,但要标志p1的前一位*/
p = p2; /*p用作尾指针插入标志*/
while(p -> next != NULL)
{
p3 = p1; /*每次循环要将p3,p4归位*/
p4 = p2;
t = p1 -> vip; /*t用来存放最大的vip的值*/
while(p1 != NULL)
{
if(p1 -> vip > t) /*比较出更大的vip*/
{
t = p1 -> vip;
p3 = p1; /*将此时的p1,p2所在位置用p3,p4标志*/
p4 = p2;
}
p1 = p1 -> next; /*每次p1,p2要遍历一遍*/
p2 = p2 -> next;
}
p4 -> next = p3 -> next; /*将p3所在结点断链*/
p3 -> next = p -> next; /*将p3结点接到p后面,使用尾接法*/
p -> next = p3;
p = p -> next; /*将p移到下一个,确保p始终是尾*/
p1 = p -> next; /*p1再从下一个结点出发,再次找出t*/
p2 = p;
}
p = head -> next;
for(t = 1;t < 11 && p != NULL ; t++)
{
printf("第%d辆出来的的车牌号为: %s , 车主为: %s , vip等级为: %d\n",t,p -> num,p -> name,p -> vip);
p = p -> next;
}
}
int SearchListCar(LinkList head)
{
char num[10];
LinkList p;
p = head -> next;
printf("请输入你想查询的车牌号:\t");
scanf("%s",num);
while(p) /*遍历到NULL*/
{
if(!strcmp(p -> num , num)) /*车牌号相等进入条件*/
{
printf("查询到的车牌号为:%s \n",p -> num);
printf("查询到的车车主为:%s \n",p -> name);
printf("查询到的车vip等级为:%d \n",p -> vip);
}
p = p -> next;
}
}
int DeleteListCar(SqQueue *Q,LinkList head)
{
int m = 0 ;
char num[10];
LinkList p;
p = head -> next;
printf("请输入你想删除的车辆的车牌号:");
scanf("%s",num);
while(!strcmp(Q -> data[m].num,num) && m < Q -> rear) /*找到所在的结点*/
{
m ++;
}
strcpy(Q -> data[m].num , "0"); /*将数据归零*/
strcpy(Q -> data[m].name,"0");
Q -> data[m].vip = 0;
m = 0; /*m归零,便于下次删除*/
while(p)
{
if(!strcmp(p -> num, num)) /*将链表数据同时归零*/
{
strcpy(p -> num , "0");
strcpy(p -> name,"0");
p -> vip = 0;
}
p = p -> next;
}
printf("删除成功\n");
}
int main()
{
int ch;
LinkList head;
SqQueue Q;
InitQueue(&Q);
printf("************录入车辆信息 ,请输入1**************\n");
printf("************由选择排序入场,请输入2**************\n");
printf("************由冒泡排序入场,请输入3**************\n");
printf("************由链表进入队列,请输入4**************\n");
printf("************由队列出停车场,请输入5**************\n");
printf("************查询车辆信息 ,请输入6**************\n");
printf("************删除车辆信息 ,请输入7**************\n");
printf("************退出功能 : 请输入#号键**************\n");
printf("请输入你想实现的功能:");
scanf("%d",&ch);
while(ch != 0)
{
switch(ch)
{
case 1 : CreateListCar(&head) ; break;
case 2 : PushQueueCar(&Q,head) ; break;
case 3 : PopQueueCar(&Q) ; break;
case 4 : SelectSortListCar(head); break;
case 5 : BubbleSortListCar(head); break;
case 6 : SearchListCar(head) ; break;
case 7 : DeleteListCar(&Q,head) ; break;
default : printf("输入有误\n") ; break;
}
printf("请输入你想继续实现的功能:");
scanf("%d",&ch);
}
return 0;
}
#include <stdlib.h>
#include <string.h>
typedef struct Node
{
char num[10]; /*定义结构体内容*/
char name[20];
int vip;
struct Node *next; /*结构体链表*/
}ListNode,*LinkList; /*定义结构体指针*/
typedef struct
{
ListNode data[10]; /*定义队列内容为结构体对象数组*/
int front;
int rear;
}SqQueue;
int Srand(int *i) /*随机数函数,提供vip等级*/
{
*i = rand()%5; /*5为随机数范围*/
return *i;
}
int CreateListCar(LinkList *head) /*创建车辆信息*/
{
int i = 2;
LinkList r,p1;
(*head) = (LinkList)malloc(sizeof(ListNode));
(*head) -> next = NULL; /*头结点为空*/
r = *head;
p1 = (LinkList)malloc(sizeof(ListNode)); /*申请动态内存*/
printf("请输入第1辆车的信息: \n");
printf("请输入车牌号: ");
scanf("%s",p1 -> num);
printf("请输入车主姓名: ");
scanf("%s",p1 -> name);
p1 -> vip = Srand(&(p1 -> vip)); /*使用随机数函数给vip赋值*/
while(strcmp(p1 -> num ,"0")) /*输入结束标志*/
{
p1 -> next = r -> next; /*尾插法插入结点*/
r -> next = p1;
r = p1; /*每次将r移到最后一个结点*/
p1 = (LinkList)malloc(sizeof(ListNode));
printf("请输入第%d辆车的信息: \n",i);
printf("请输入车牌号: ");
scanf("%s",p1 -> num);
printf("请输入车主姓名: ");
scanf("%s",p1 -> name);
p1 -> vip = Srand(&(p1 -> vip));
i ++;
}
}
int InitQueue(SqQueue *Q) /*初始化队列函数*/
{
Q -> front = 0;
Q -> rear = 0;
return 1;
}
int PushQueueCar(SqQueue *Q,LinkList head) /*将链表导入队列*/
{
LinkList p;
p = head -> next;
while(p)
{
strcpy(Q -> data[Q -> rear].num,p -> num);/*将链表结点信息传入队列*/
strcpy(Q -> data[Q -> rear].name,p -> name);
Q -> data[Q -> rear].vip = p -> vip;
p = p -> next;
Q -> rear ++; /*每次导入一个结点,将rear+1*/
} /*这里应该将rear-1,但要改下面的,懒得改*/
printf("入队成功\n");
}
int PopQueueCar(SqQueue *Q) /*车辆信息出队列函数*/
{
while(Q -> front < Q -> rear)
{
printf("从停车场出来的的车牌号为: %s , 车主为: %s , vip等级为: %d\n",Q -> data[Q -> front].num,Q -> data[Q -> front].name,Q -> data[Q -> front].vip);
Q -> front ++; /*队列从一端输出*/
}
Q -> front = 0; /*出完队列后将front置零,便于下次出对*/
return 0;
}
int SelectSortListCar(LinkList head) /*选择排序,数组存放结构体指针*/
{
LinkList s[11],p; /*结构体链表数组,存放指针,分别指向每个结点*/
int i,j,min;
p = head -> next;
for(i = 1;i < 11 && p != NULL;i++) /*元素个数等于结点个数*/
{
s[i] = p; /*存放指针,即结点所在地址*/
p = p -> next;
}
s[i] = NULL; /*第i个为空,不然会出错*/
for(i = 1;i < 10 && s[i] != NULL;i++) /*选择排序*/
{
min = i;
for(j = i+1;j <= 10 && s[j] != NULL;j++)
{
if(s[min] -> vip < s[j] -> vip) /*比较vip等级*/
min = j; /*交换下标*/
}
if(i != min) /*如果if成立,则i不是当前最大的*/
{
s[0] = s[i];
s[i] = s[min];
s[min] = s[0]; /*交换的是结点的指针*/
} /*最后数组存放的是排序好的地址指针*/
}
for(i = 1;i < 11 && s[i] != NULL;i++)
{
printf("第%d辆出来的的车牌号为: %s , 车主为: %s , vip等级为: %d\n",i,s[i] -> num,s[i] -> name,s[i] -> vip);
}
}
int BubbleSortListCar(LinkList head) /*初级冒泡排序*/
{
int t;
LinkList p,p1,p2,p3,p4;
p1 = head -> next; /*p1用来遍历*/
p2 = head; /*p2更着遍历,但要标志p1的前一位*/
p = p2; /*p用作尾指针插入标志*/
while(p -> next != NULL)
{
p3 = p1; /*每次循环要将p3,p4归位*/
p4 = p2;
t = p1 -> vip; /*t用来存放最大的vip的值*/
while(p1 != NULL)
{
if(p1 -> vip > t) /*比较出更大的vip*/
{
t = p1 -> vip;
p3 = p1; /*将此时的p1,p2所在位置用p3,p4标志*/
p4 = p2;
}
p1 = p1 -> next; /*每次p1,p2要遍历一遍*/
p2 = p2 -> next;
}
p4 -> next = p3 -> next; /*将p3所在结点断链*/
p3 -> next = p -> next; /*将p3结点接到p后面,使用尾接法*/
p -> next = p3;
p = p -> next; /*将p移到下一个,确保p始终是尾*/
p1 = p -> next; /*p1再从下一个结点出发,再次找出t*/
p2 = p;
}
p = head -> next;
for(t = 1;t < 11 && p != NULL ; t++)
{
printf("第%d辆出来的的车牌号为: %s , 车主为: %s , vip等级为: %d\n",t,p -> num,p -> name,p -> vip);
p = p -> next;
}
}
int SearchListCar(LinkList head)
{
char num[10];
LinkList p;
p = head -> next;
printf("请输入你想查询的车牌号:\t");
scanf("%s",num);
while(p) /*遍历到NULL*/
{
if(!strcmp(p -> num , num)) /*车牌号相等进入条件*/
{
printf("查询到的车牌号为:%s \n",p -> num);
printf("查询到的车车主为:%s \n",p -> name);
printf("查询到的车vip等级为:%d \n",p -> vip);
}
p = p -> next;
}
}
int DeleteListCar(SqQueue *Q,LinkList head)
{
int m = 0 ;
char num[10];
LinkList p;
p = head -> next;
printf("请输入你想删除的车辆的车牌号:");
scanf("%s",num);
while(!strcmp(Q -> data[m].num,num) && m < Q -> rear) /*找到所在的结点*/
{
m ++;
}
strcpy(Q -> data[m].num , "0"); /*将数据归零*/
strcpy(Q -> data[m].name,"0");
Q -> data[m].vip = 0;
m = 0; /*m归零,便于下次删除*/
while(p)
{
if(!strcmp(p -> num, num)) /*将链表数据同时归零*/
{
strcpy(p -> num , "0");
strcpy(p -> name,"0");
p -> vip = 0;
}
p = p -> next;
}
printf("删除成功\n");
}
int main()
{
int ch;
LinkList head;
SqQueue Q;
InitQueue(&Q);
printf("************录入车辆信息 ,请输入1**************\n");
printf("************由选择排序入场,请输入2**************\n");
printf("************由冒泡排序入场,请输入3**************\n");
printf("************由链表进入队列,请输入4**************\n");
printf("************由队列出停车场,请输入5**************\n");
printf("************查询车辆信息 ,请输入6**************\n");
printf("************删除车辆信息 ,请输入7**************\n");
printf("************退出功能 : 请输入#号键**************\n");
printf("请输入你想实现的功能:");
scanf("%d",&ch);
while(ch != 0)
{
switch(ch)
{
case 1 : CreateListCar(&head) ; break;
case 2 : PushQueueCar(&Q,head) ; break;
case 3 : PopQueueCar(&Q) ; break;
case 4 : SelectSortListCar(head); break;
case 5 : BubbleSortListCar(head); break;
case 6 : SearchListCar(head) ; break;
case 7 : DeleteListCar(&Q,head) ; break;
default : printf("输入有误\n") ; break;
}
printf("请输入你想继续实现的功能:");
scanf("%d",&ch);
}
return 0;
}