插入删除遍历查询释放逆序排序
#include "link.h"
enum command {link_clear, link_insert, link_delete, link_print, link_search, link_free, link_rever, link_sort, link_quit};
void link_print_menu(void)
{
system("cls");
printf("---------------MENU--------------------\n");
printf("#clear :清除屏幕信息\n");
printf("#insert :添加学生信息\n");
printf("#delete :删除学生信息\n");
printf("#print :遍历学生信息\n");
printf("#search :查询学生信息\n");
printf("#free :释放学生信息\n");
printf("#rever :逆置学生信息\n");
printf("#sort :排序学生信息\n");
printf("#quit :推出学生系统\n");
printf("----------------ENDL-------------------\n");
}
STU* link_create_head(void)
{
STU* head = (STU*)(calloc(1, sizeof(STU)));
head->next = NULL;
return head;
}
int get_which_command(void)
{
char get_command[16] = "";
char* link_command[10] = { "clear", "insert", "delete", "print", "search", "free", "rever", "sort", "quit"};
printf("请输入指令:");
scanf("%s", get_command);
if (strcmp(link_command[link_clear], get_command) == 0)
return link_clear;
else if (strcmp(link_command[link_insert], get_command) == 0)
return link_insert;
else if (strcmp(link_command[link_delete], get_command) == 0)
return link_delete;
else if (strcmp(link_command[link_print], get_command) == 0)
return link_print;
else if (strcmp(link_command[link_search], get_command) == 0)
return link_search;
else if (strcmp(link_command[link_free], get_command) == 0)
return link_free;
else if (strcmp(link_command[link_rever], get_command) == 0)
return link_rever;
else if (strcmp(link_command[link_sort], get_command) == 0)
return link_sort;
else if (strcmp(link_command[link_quit], get_command) == 0)
return link_quit;
else
return -1;
}
void x_shell(STU* head)
{
int which_command = -1;
which_command = get_which_command();
switch (which_command)
{
case link_clear:
link_print_menu();
break;
case link_insert:
link_head_insert(head);
break;
case link_delete:
link_stu_delete(head);
break;
case link_print:
link_stu_print(head);
break;
case link_search:
link_stu_search(head);
break;
case link_free:
link_stu_free(head);
break;
case link_rever:
link_stu_rever(head);
break;
case link_sort:
link_stu_sort(head);
break;
case link_quit:
link_stu_quit(head);
break;
default:
printf("Command not found!\n");
break;
}
}
void link_head_insert(STU* head)
{
STU* pInsert = (STU*)calloc(1, sizeof(STU));
if (pInsert == NULL)
{
perror("collac");
}
printf("请输入学生姓名、年龄、学号:");
scanf("%s%d%d", pInsert->name, &pInsert->age, &pInsert->id);
pInsert->next = head->next;
head->next = pInsert;
}
void link_tail_insert(STU* head)
{
STU* pCurrent = head;
STU* pInsert = (STU*)calloc(1, sizeof(STU));
if (pInsert == NULL)
{
perror("collac");
}
printf("请输入学生姓名、年龄、学号:");
scanf("%s%d%d", pInsert->name, &pInsert->age, &pInsert->id);
while (pCurrent->next != NULL)
pCurrent = pCurrent->next;
pCurrent->next = pInsert;
pInsert->next = NULL;
}
void link_sort_insert(STU* head)
{
STU* pPre = head;
STU* pCurrent = head->next;
STU* pInsert = (STU*)calloc(1, sizeof(STU));
if (pInsert == NULL)
{
perror("calloc");
return;
}
printf("请输入学生姓名、年龄、学号:");
scanf("%s%d%d", pInsert->name, &pInsert->age, &pInsert->id);
while (pCurrent != NULL)
{
if (pInsert->id <= pCurrent->id)
break;
pPre = pCurrent;
pCurrent = pCurrent->next;
}
pPre->next = pInsert;
pInsert->next = pCurrent;
}
void link_stu_print(STU* head)
{
STU* pCurrent = head->next;
if (pCurrent == NULL)
{
printf("没有学生信息!\n");
}
else
{
while (pCurrent != NULL)
{
printf("姓名:%-10s年龄:%-5d学号:%-5d\n", pCurrent->name, pCurrent->age, pCurrent->id);
pCurrent = pCurrent->next;
}
}
}
void link_stu_search(STU* head)
{
STU* pCurrent = head->next;
char name[32] = "";
printf("请输入要查找的学生的姓名:");
scanf("%s", name);
while (pCurrent != NULL)
{
if (strcmp(name, pCurrent->name) == 0)
{
printf("姓名:%-10s年龄:%-5d学号:%-5d\n", pCurrent->name, pCurrent->age, pCurrent->id);
return;
}
pCurrent = pCurrent->next;
}
printf("查无此人!\n");
}
void link_stu_delete(STU* head)
{
STU* pCurrent = head->next;
STU* pPre = head;
char name[32] = "";
printf("请输入要查找的学生的姓名:");
scanf("%s", name);
while (pCurrent != NULL)
{
if (strcmp(name, pCurrent->name) == 0)
{
pPre->next = pCurrent->next;
free(pCurrent);
printf("查找成功,删除成功!\n");
return;
}
pPre = pCurrent;
pCurrent = pCurrent->next;
}
printf("删除失败,查无此人!\n");
}
void link_stu_free(STU* head)
{
STU* pCurrent = head->next;
while (pCurrent != NULL)
{
head->next = pCurrent->next;
free(pCurrent);
pCurrent = head->next;
}
printf("释放成功!\n");
}
void link_stu_rever(STU* head)
{
STU* pPre = head->next;
STU* pCurrent = pPre->next;
STU* temp = NULL;
if (head->next == NULL || head->next->next == NULL)
return;
while (pCurrent != NULL)
{
temp = pCurrent->next;
pCurrent->next = pPre;
pPre = pCurrent;
pCurrent = temp;
}
head->next->next = NULL;
head->next = pPre;
printf("逆序成功!\n");
}
void link_stu_sort(STU *head)
{
STU* pPre = NULL;
STU* pCurrent = NULL;
for (pPre = head->next; pPre->next != NULL; pPre = pPre->next)
{
for (pCurrent = pPre->next; pCurrent != NULL; pCurrent = pCurrent->next)
{
if (pPre->id > pCurrent->id)
{
STU temp;
temp = *pCurrent;
*pCurrent = *pPre;
*pPre = temp;
temp.next = pCurrent->next;
pCurrent->next = pPre->next;
pPre->next = temp.next;
}
}
}
}
void link_stu_sort2(STU* head)
{
STU* pPre = NULL;
STU* pCurrent = NULL;
STU* pMin = NULL;
for (pPre = head->next; pPre->next != NULL; pPre = pPre->next)
{
for (pMin = pPre, pCurrent = pMin->next; pCurrent != NULL; pCurrent = pCurrent->next)
{
if (pPre->id > pCurrent->id)
{
STU temp;
temp = *pCurrent;
*pCurrent = *pPre;
*pPre = temp;
temp.next = pCurrent->next;
pCurrent->next = pPre->next;
pPre->next = temp.next;
}
}
}
}
void link_stu_quit(STU* head)
{
link_stu_free(head);
exit(0);
}