#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define T 1;
#define F -1;
struct address
{
int id;
char name[20];
char number[20];
char address[20];
struct address* next;
};
typedef struct address* node;
int init(node* head); //头节点
int insert(node head, int i); //添加用户
void delete_id(node head); //按id删除
void delete_name(node head); // 按名删除
void delete_number(node head); //按号码删除
void update_id(node head); //按id修改
void update_name(node head); //按名修改
void update_number(node head); //按号码修改
void query_id(node head); //按id查找
void query_name(node head); //按名查找
void query_number(node head); //按号码查找
void print_name(node head); //显示所有用户(按名)(冒泡排序(交换节点))
void print_number(node head); //显示所有用户(按号码)(插入排序)
void interface();
int main()
{
int n, i = 1, back = 1;
int nd, idd;
char named[20], numberd[20];
node head = NULL;
init(&head);
while (back)
{
interface();
scanf("%d", &n);
printf("\n");
switch (n)
{
case 1: insert(head, i++);break;
case 2: printf("\n\t\t\tdelete according to?\n\t\t\t1.id 2.name 3.number :");
int de;
scanf("%d", &de);
switch (de)
{
case 1: delete_id(head);break;
case 2: delete_name(head);break;
case 3: delete_number(head);break;
default: printf("\t\t\twrong number\n");break;
}
break;
case 3: printf("\n\t\t\tupdate according to?\n\t\t\t1.id 2.name 3.number :");
int up;
scanf("%d", &up);
switch (up)
{
case 1: update_id(head);break;
case 2: update_name(head);break;
case 3: update_number(head);break;
default: printf("\t\t\twrong number\n");break;
}
break;
case 4: printf("\n\t\t\tquery according to?\n\t\t\t1.id 2.name 3.number :");
int qu;
scanf("%d", &qu);
switch (qu)
{
case 1: query_id(head);break;
case 2: query_name(head);break;
case 3: query_number(head);break;
default: printf("\t\t\twrong number\n");break;
}
break;
case 5: printf("\n\t\t\tprintf according to?\n\t\t\t1.name 2.number :");
int pr;
scanf("%d", &pr);
switch (pr)
{
case 1: print_name(head);break;
case 2: print_number(head);break;
default: printf("\t\t\twrong number\n");break;
}
break;
case 6: back = 0;break;
default: printf("\t\t\twrong number\n");break;
}
}
return 0;
}
int init(node* head)
{
node newnode = (node)malloc(sizeof(struct address));
if (NULL == newnode)
{
return F;
}
newnode->next = NULL;
*head = newnode;
}
int insert(node head, int i)
{
node newnode = (node)malloc(sizeof(struct address));
if (NULL == newnode)
{
return F;
}
newnode->id = i;
printf("\t\t\tPlesae input name: ");
scanf("%s", newnode->name);
printf("\t\t\tPlesae input number: ");
scanf("%s", newnode->number);
printf("\t\t\tPlesae input address: ");
scanf("%s", newnode->address);
newnode->next = head->next;
head->next = newnode;
}
void delete_id(node head)
{
int i;
printf("\t\t\tWho do you want to deleta?\n\t\t\tid:");
scanf("%d", &i);
while (head->next->id != i)
{
head = head->next;
}
node temp = head->next->next;
free(head->next);
head->next = temp;
}
void delete_name(node head)
{
char name1[20];
printf("\t\t\tWho do you want to deleta?\n\t\t\tname:");
scanf("%s", name1);
while (strcmp(head->next->name,name1) != 0)
{
head = head->next;
}
node temp = head->next->next;
free(head->next);
head->next = temp;
}
void delete_number(node head)
{
char number1[20];
printf("\t\t\tWho do you want to deleta?\n\t\t\tnumber:");
scanf("%s", number1);
while (strcmp(head->next->number,number1) != 0)
{
head = head->next;
}
node temp = head->next->next;
free(head->next);
head->next = temp;
}
void update_id(node head)
{
int i;
printf("\t\t\tWho do you want to update?\n\t\t\tid:");
scanf("%d", &i);
while (head->next->id != i)
{
head = head->next;
}
printf("\t\t\tPlease input new name:");
scanf("%s", head->next->name);
printf("\t\t\tPlease input new number:");
scanf("%s", head->next->number);
printf("\t\t\tPlease input new address:");
scanf("%s", head->next->address);
}
void update_name(node head)
{
char name1[20];
printf("\t\t\tWho do you want to update?\n\t\t\tname:");
scanf("%s", name1);
while (strcmp(head->next->name,name1) != 0)
{
head = head->next;
}
printf("\t\t\tPlease input new name:");
scanf("%s", head->next->name);
printf("\t\t\tPlease input new number:");
scanf("%s", head->next->number);
printf("\t\t\tPlease input new address:");
scanf("%s", head->next->address);
}
void update_number(node head)
{
char number1[20];
printf("\t\t\tWho do you want to update?\n\t\t\tnumber:");
scanf("%s", number1);
while (strcmp(head->next->number,number1) != 0)
{
head = head->next;
}
printf("\t\t\tPlease input new name:");
scanf("%s", head->next->name);
printf("\t\t\tPlease input new number:");
scanf("%s", head->next->number);
printf("\t\t\tPlease input new address:");
scanf("%s", head->next->address);
}
void query_id(node head)
{
int i;
printf("\t\t\tWho do you want to query?\n\t\t\tid:");
scanf("%d", &i);
while (head->next->id != i)
{
head = head->next;
}
printf("\t\t\tid:%d\tname:%s\tnumber:%s\taddress:%s\n",
head->next->id, head->next->name, head->next->number, head->next->address);
}
void query_name(node head)
{
char name1[20];
printf("\t\t\tWho do you want to query?\n\t\t\tname:");
scanf("%s", name1);
while (strcmp(head->next->name,name1) != 0)
{
head = head->next;
}
printf("\t\t\tid:%d\tname:%s\tnumber:%s\taddress:%s\n",
head->next->id, head->next->name, head->next->number, head->next->address);
}
void query_number(node head)
{
char number1[20];
printf("\t\t\tWho do you want to query?\n\t\t\tnumber:");
scanf("%s", number1);
while (strcmp(head->next->number,number1) != 0)
{
head = head->next;
}
printf("\t\t\tid:%d\tname:%s\tnumber:%s\taddress:%s\n",
head->next->id, head->next->name, head->next->number, head->next->address);
}
void print_name(node head)
{
int i, j, count = 0;
node temp = head;
while (temp->next != NULL)
{
count++;
temp = temp->next;
}
for (i = 0; i < count - 1; i++)
{
node temp0 = head->next;
node pre = head;
for (j = count -1; j > i; j--)
{
if (strcmp(temp0->name,temp0->next->name) > 0)
{
pre->next = temp0->next;
temp0->next = temp0->next->next;
pre->next->next = temp0;
temp0 = pre->next;
}
temp0 = temp0->next;
pre = pre->next;
}
}
while (head->next != NULL)
{
printf("\t\t\tid::%d\tname:%s\tnumber:%s\taddress:%s\n",
head->next->id, head->next->name, head->next->number, head->next->address);
head = head->next;
}
}
void print_number(node head)
{
node p1 = head->next->next, pp1 = head->next;
while (p1 != NULL)
{
node temp = p1;
node p2 = head->next;
node pp2 = head;
while (p2 != p1)
{
if(strcmp(p2->number,p1->number) > 0)
{
p1 = p1->next;
pp1->next = temp->next;
pp2->next = temp;
temp->next = p2;
break;
}
p2 = p2->next;
pp2 = pp2->next;
}
p1 = p1->next;
pp1 = pp1->next;
}
while (head->next != NULL)
{
printf("\t\t\tid::%d\tname:%s\tnumber:%s\taddress:%s\n",
head->next->id, head->next->name, head->next->number, head->next->address);
head = head->next;
}
}
void interface()
{
printf("\n\t\t\tPlease select number:\n");
printf("\n\t\t\t****************************\n");
printf("\t\t\t* 1.insert 2.delete *\n");
printf("\t\t\t* 3.update 4.query *\n");
printf("\t\t\t* 5.print 6.quit *\n");
printf("\t\t\t****************************\n\n");
printf("\t\t\tYour choice is:");
}
1.节点的排序
2. 数组可用scanf()
录入