我在通讯录基础上加了一个冒泡排序,数据存储在链表里的,怎么完成排序功能
#include<stdio.h>
#include<cstdio>
#include<string.h>
#include<vector>
#include<algorithm>
#include<queue>
#include<stack>
#include<math.h>
#include<iomanip>
#include<stdlib.h>
#include<iostream>
#include<list>
using namespace std;
typedef struct //结构定义
{
int number; //联系人序号
char name[50]; //联系人姓名
char phone[50]; //电话号码
char address[50]; //手机号码
char mail[50]; //邮箱
}
Datatype,*Data;
typedef struct node
{
int length;
Datatype data; //结点数据域
struct node *next; //节点的指针域
}Listnode,*Linklist;
Linklist q;
Linklist l = (Linklist)malloc(sizeof(Listnode)); //链表头节点,分配内存
void menu()
{
cout << " ——————————————————" << endl;
cout << " | 欢迎进入通讯录管理系统 |" << endl;
cout << " | |" << endl;
cout << " | |" << endl;
cout << " | 1 录入联系人信息 |" << endl;
cout << " | 2 输出联系人信息 |" << endl;
cout << " | 3 查询联系人信息 |" << endl;
cout << " | 4 修改联系人信息 |" << endl;
cout << " | 5 删除联系人信息 |" << endl;
cout << " | 6 插入联系人信息 |" << endl;
cout << " | 7 退出通讯录管理系统 |" << endl;
cout << " | |" << endl;
cout << " ——————————————————" << endl;
cout << endl;
cout << endl;
cout << "请选择要操作的选项:";
}
void initlist(Linklist &l)//构建一个空的链表
{
Listnode * p;
p = (Listnode *)malloc(sizeof(Listnode));
p->next = NULL;
l = p;
}
void write(Linklist &l)//录入联系人信息
{
int n;
printf("请输入要录入的联系人人数:");
scanf("%d", &n);
l->next = NULL;
l->length = n;
Listnode *rear = l;
for (int i = 1; i <= n; i++)
{
Listnode *p = (Listnode *)malloc(sizeof(Listnode));
p->data.number= i;
printf("第%d位员工的信息:\n", p->data.number);
printf("姓名:");
scanf("%s", p->data.name);
printf("电话号码:");
scanf("%s", p->data.phone);
printf("地址:");
scanf("%s", p->data.address);
printf("电子邮件:");
scanf("%s", p->data.mail);
p->next = NULL;
rear->next = p;
rear = p;
}
}
void Bubblesort(Linklist &l)
{
int j ,exchange,bound,temp;
exchange=l->length-1;
Listnode * p = l->next;
p->data=data[j];
while(exchange!=0)
{
bound=exchange;
exchange=0;
for(j=0;j<bound;j++)
if (strcmp(data[j].name, data[j+1].name)>0)
{
temp=data[j].name;
data[j].name=data[j+1].name;
data[j+1].name=temp;
exchange=j;
}
}
}
void show(Linklist p)//显示一个联系人信息
{
if (p != NULL)
{
cout << "[" << p->data.number << "]";
cout << "姓名:" << std::left << setw(35) << p->data.name;
cout << "电话号码:" << std::left << setw(35) << p->data.phone << endl;
cout << " 地址:" << std::left << setw(35) << p->data.address;
cout << "电子邮件:" << std::left << setw(35) << p->data.mail << endl;
}
}
void display(Linklist l)//输出通讯录
{
Listnode *p = l->next;
int n = 0;
if (l->next == NULL)
{
cout << "当前并此联系人信息!" << endl;
}
else
{
for (int i = 1,temp=0; i <= l->length; i++)
{
cout << "[" << p->data.number << "]";
cout << "姓名:" << std::left << setw(35) << p->data.name;
cout << "电话号码:" << std::left << setw(35) << p->data.phone << endl;
cout << " 地址:" << std::left << setw(35) << p->data.address;
cout << "电子邮件:" << std::left << setw(35) << p->data.mail << endl;
p = p->next;
}
}
}
void find(Linklist l)//按姓名查找联系人信息
{
char id[50];
printf("请输入需要查询的联系人姓名:");
scanf("%s",id);
Listnode * p = l;
if (p->next ==NULL)
{
printf("查询无此联系人信息!\n");
}
else
{
for (int j = 0; p != NULL&&strcmp(p->data.name, id) != 0 && j <= l->length; j++)/*strcmp用来比较两个编号是否相同*/
{
p = p->next;
}
if (p == NULL || (p->next == NULL&&p == l))
{
printf("查询无此联系人信息!\n");
}
else
{
show(p);
}
}
}
void update(Linklist &l)//修改联系人信息
{
char id[50];
printf("\n请输入需要修改的联系人姓名:");
scanf("%s",id);
Listnode * p = l->next;
if (p == NULL)
{
printf("查询无此联系人信息,无法修改!\n");
}
else
{
for (int j = 1; (p != l) && (p->next != NULL) && (strcmp(p->data.name, id) != 0) && (j <= l->length); j++)/*strcmp用来比较两个编号是否相同*/
{
p = p->next;
}
if (p == NULL || (p->next == NULL&&p == l))
{
printf("查询无此联系人信息,无法修改!\n");
}
else
{
show(p);
printf("\n请修改该联系人信息:\n");
printf("姓名:");
scanf("%s", p->data.name);
printf("电话号码:");
scanf("%s", p->data.phone);
printf("地址:");
scanf("%s", p->data.address);
printf("电子邮件:");
scanf("%s", p->data.mail);
printf("\n修改成功!\n");
}
}
}
bool remove(Linklist &l)//删除联系人信息
{
char id[50];
printf("请输入需要删除的联系人姓名:");
scanf("%s",id);
if (l->next == NULL)
{
printf("查询无此联系人信息,无法删除!");
return false;
}
Listnode * p = l->next;
Listnode * s = p;
for (int j = 1; (p != NULL) && (p != l) && (p->next != NULL) && (strcmp(p->data.name, id) != 0) && (j <= l->length); j++)//strcmp用来比较两个序号是否相同
{
s = p;
p = p->next;
}
if (p==l)
{
printf("查询无此联系人信息,无法删除!");
return false;
}
else
{
show(p);
Listnode * q = p->next;
s->next = q;
l->length--;
if (p == l->next&&p->next == NULL)
{
;
}
else
{
for (; p != NULL; p = p->next)
{
p->data.number--;
}
}
free(p);
return true;
}
}
bool insert(Linklist &l)//添加联系人信息
{
Listnode *p = l;
if (l->length == 0)
{
p = l;
}
else
{
while (p->next != NULL)
{
p = p->next;
}
}
if (p==l||p->next == NULL)
{
Listnode * s = (Listnode *)malloc(sizeof(Listnode));
l->length++;
printf("输入新增联系人信息:\n");
s->data.number = l->length;
printf("第%d位联系人的信息:\n", s->data.number);
printf("姓名:");
scanf("%s", s->data.name);
printf("电话号码:");
scanf("%s", s->data.phone);
printf("地址:");
scanf("%s", s->data.address);
printf("电子邮件:");
scanf("%s", s->data.mail);
p->next = s;
s->next = NULL;
return true;
}
else
{
printf("当前信息为空,请执行第一步之后重试!\n");
return false;
}
}
void exit()
{
cout << " —————————————————" <<endl;
cout << " | |"<<endl;
cout << " | 感谢您的使用! |"<<endl;
cout << " | |"<<endl;
cout << " —————————————————" <<endl;
cout << endl;
}
int main()
{
string order;
l->next = NULL;
l->length = 0;
char*end;//末端指针/
menu();
while (cin>>order)
{
int a_order = static_cast<int>(strtol(order.c_str(), &end, 10));//将输入进来的值转化为int类型
switch (a_order + 48)
{
case'1':
{
write(l);//录入联系人信息
system("pause");
system("cls");
menu();
break;
}
case'2':
{
display(l);//输出整个通讯录
system("pause");
system("cls");
menu();
break;
}
case'3':
{
find(l);//查询联系人信息
system("pause");
system("cls");
menu();
break;
}
case'4':
{
update(l);//修改联系人信息
system("pause");
system("cls");
menu();
break;
}
case'5':
{
bool falg5 = remove(l);//删除联系人信息
if (falg5)
{
printf("成功删除联系人信息!\n");
}
else
{
printf("删除联系人信息失败!\n");
}
system("pause");
system("cls");
menu();
break;
}
case'6':
{
bool falg6 = insert(l);//添加联系人信息
if (falg6)
{
printf("添加联系人信息成功!\n");
}
else
{
printf("添加员工信息失败!\n");
}
system("pause");
system("cls");
menu();
break;
}
case'7':
{
system("cls");
exit();
return 0;
break;
}
default:
{
cin.clear();
cin.sync();
cout << "输入错误,重新返回主界面。" << endl;
system("pause");
system("cls");
menu();
break;
}
}
}
return 0;
}
从84行开始