题目:
代码(用户友好版):
#include#include using namespace std; typedef struct stu { int num; char name[10]; }stu; typedef struct LNode { stu data; struct LNode* next; }LNode,*linkList; void CreateList(linkList& head) {//创建链表 linkList q, rear; rear = head; stu s = { 1 }; cout << "请输入学号:"; cin >> s.num; cout << "请输入姓名:"; cin >> s.name; while (s.num != 0) { q = new LNode; q->data = s; q->next = NULL; rear->next = q; rear = q; rear->next = NULL; cout << "请输入学号:"; cin >> s.num; cout << "请输入姓名:"; cin >> s.name; } rear->next = NULL; } void PrintList(linkList &head) {//打印链表数据 linkList p = head->next; if (p == NULL) { cout << "没有学生信息!"; } else { cout << "Id" << 't' << "name" << endl; while (p) { cout << p->data.num << 't' << p->data.name << endl; p = p->next; } } system("pause"); } void InsertList(linkList& head,linkList &p0) {//按学号大小插入链表 linkList p, pFront; pFront = head; p = head->next; while (p) { if (p0->data.num > p->data.num) { //当要插入的学号大于当前结点 pFront = p; if (p->next == NULL) //当当前结点是最后一个结点,跳出循环 break; else p = p->next; } if (p0->data.num < p->data.num) { //当要插入的结点学号小于当前结点,且当前结点不是 //最后一个结点,跳出循环 break; } if (p0->data.num == p->data.num) { //当要插入的结点的学号已存在 cout << "学号已存在!"; system("pause"); return; } } if (pFront->next == NULL) { //尾插 p0->next = NULL; p->next = p0; } else { p0->next = p; pFront->next = p0; } system("pause"); } void DeleteList(linkList& L, int num) {//删除链表 linkList p, Frontp; Frontp = L; p = L->next; if (L->next == NULL) { cout << "链表为空!无法删除!" << endl; system("pause"); return; } while (p) { if (p->data.num == num) { Frontp->next = p->next; delete p; break; } else { Frontp = p; p = p->next; } } } void DestroyList(linkList& L) {//销毁链表 linkList p; while (L) { p = L; L = L->next; delete p; } } void Menu(linkList &L) { linkList p = new LNode; cout << " *********************" << endl; cout << "| 1.插入学生信息 |" << endl; cout << "| 2.删除学生信息 |" << endl; cout << "| 3.初始学生信息 |" << endl; cout << "| 4.浏览学生信息 |" << endl; cout << "| 5.退出系统 |" << endl; cout << "| (请选择1~6) |" << endl; cout << " *********************" << endl; int choice; int id; int choice_2; cin >> choice; switch (choice) { case 1: cout << "请输入学号:"; cin >> p->data.num; cout << "请输入姓名:"; cin >> p->data.name; InsertList(L,p); break; case 2: cout << "请输入你想删除学生信息的学号:"; cin >> id; DeleteList(L, id); break; case 3: cout << "此操作会丢失所有学生信息,请谨慎操作!" << endl; cout << "输入1继续操作,任意键返回"; cin >> choice_2; if (choice_2 == 1) { DestroyList(L); exit(0); } else return; break; case 4: PrintList(L); break; case 5: exit(0); default: cout << "输入错误!"; break; } } int main() { linkList head = new LNode; head->next = NULL; CreateList(head); system("cls"); while (1) { Menu(head); system("cls"); } }



