typedef struct num
{
int ID;
struct num *next;
} SS;
SS *head = NULL;
int count = 0;
void add_node();
void remove_node(int id);
void seek_node();
void revise_node(SS *p);
void print_list();
void sort_list();
void turnoff();
//增加节点
void add_node()
{
SS *temp, *p = (SS*)malloc(sizeof(SS));
p->ID = rand() % 100 + 20;
if (head != NULL)
{
temp = head;
head = p;
p->next = temp;
}
else{
head = p;
p->next = NULL;
}
count++;
print_list();
}
//删除节点
void remove_node(int id)
{
SS *p, *p1;
if (!count)
{
printf("\n当前人数为0,无法进行删除,修改等操作!");
return;
}
if (head->ID == id)
{
p = head;
head = head->next;
free(p);
}
else
{
p = head;
while (head != NULL)
{
if (head->next->ID == id)
{
p1 = head->next->next;
free(head->next);
head->next = p1;
break;
}
head = head->next;
}
head = p;
}
count--;
print_list();
}
//查找节点
void seek_node()
{
int i,choose;
SS *p = head;
printf("请输入您要查找的学号:");
scanf("%d", &i);
getchar();
while (p != NULL)
{
if (p->ID == i)
{
printf("找到----%d-------", p->ID);
printf("\n1,修改 2,删除\n");
scanf("%d", &choose);
getchar();
(choose - 1) ? remove_node(i) : revise_node(p);
return;
}
p = p->next;
}
p ? 0 : printf("\n找不到");
}
//修改节点
void revise_node(SS *p)
{
printf("\n请修改学号:");
scanf("%d", &p->ID);
print_list();
}
//打印链表
void print_list()
{
SS *p = head;
printf("\nhead -> ");
while (p != NULL)
{
printf("%d -> ", p->ID);
p = p->next;
}
printf("NULL\n");
}
//链表排序
void sort_list()
{
SS *p1, *p2, *temp, *start, *p = head;
temp = (SS*)malloc(sizeof(SS));
while (head != NULL)
{
start = head;
while (start->next != NULL)
{
if (head->ID > start->next->ID)
{
p1 = head->next;
p2 = start->next->next;
*temp = *(start->next);
*(start->next) = *head;
*head = *temp;
head->next = p1;
start->next->next = p2;
}
start = start->next;
}
head = head->next;
}
head = p;
free(temp);
print_list();
}
//主函数
void main()
{
int i,choose;
char choose1;
for (i = 0; i < 5; i++)
{
add_node();
}
print_list();
MENU:
printf("\n1,增 2,查 3,排序 4,显示全部 5,退出\n");
scanf("%d", &choose);
getchar();
if (count == 0)
{
printf("\n当前系统人数为0,是否先添加? Y/N\n");
scanf("%c", &choose1);
getchar();
if (choose1 == 'Y' || choose1 == 'y')
{
choose = 1;
}
else
{
goto MENU;
}
}
switch (choose)
{
case 1:
add_node();
break;
case 2:
seek_node();
break;
case 3:
sort_list();
break;
case 4:
print_list();
break;
case 5:
turnoff();
return;
default:
printf("\n输入有误!!\n");
}
goto MENU;
getchar();
}
void turnoff()
{
SS *p = head;
while (head != NULL)
{
p = head;
head = head->next;
free(p);
}
system("color 5e");
printf("\n系统将于3秒后自动退出\n");
Sleep(3000);
}