21xrx.com
2024-12-22 22:21:10 Sunday
登录
文章检索 我的文章 写文章
使用尾插法创建学生信息链表,并实现增删改查(C++)
2023-07-07 21:43:41 深夜i     --     --
学生信息 链表 尾插法 增删改查 C++

链表是计算机科学中常用的一种数据结构,它可以存储任意类型的数据,并且灵活的扩展和删除数据。在学生信息管理系统中,链表可以作为一个非常好的数据结构,用来存储所有学生的信息,并实现增删改查的操作。本文将介绍如何使用尾插法创建学生信息链表,并实现增删改查的操作。

一、创建链表

创建链表需要定义一个结构体,并定义一个链表指针,作为链表的头指针,如下所示:


struct Student

{

  int id;

  string name;

  int age;

  Student *next;

};

Student *head = NULL;

结构体Student定义了要存储的学生信息,其中next是一个指向下一个学生信息的指针。链表指针head初始化为NULL,表示链表为空。

使用尾插法创建链表需要先定义一个新的节点,然后将这个新节点放置到链表的末端,即将新节点的指针赋值给上一个节点的指针域next。如下所示:


Student *newNode = new Student;

newNode->id = 101;

newNode->name = "张三";

newNode->age = 18;

newNode->next = NULL;

if(head == NULL)

  head = newNode;

else

{

  Student *temp = head;

  while(temp->next != NULL)

  

    temp = temp->next;

  

  temp->next = newNode;

}

上述代码中,如果链表为空,将新节点作为第一个节点;否则,从头节点开始,找到最后一个节点,将新节点插入到最后一个节点的后面。

二、增加学生信息

在创建链表的基础上,可以实现对学生信息的增加。增加学生信息需要创建一个新的节点,将学生信息存放到节点中,并将节点插入到链表的末端。如下所示:


void addStudent()

{

  Student *newNode = new Student;

  cout << "请输入学生ID:" << endl;

  cin >> newNode->id;

  cout << "请输入学生姓名:" << endl;

  cin >> newNode->name;

  cout << "请输入学生年龄:" << endl;

  cin >> newNode->age;

  newNode->next = NULL;

  if(head == NULL)

  

    head = newNode;

  

  else

  {

    Student *temp = head;

    while(temp->next != NULL)

    

      temp = temp->next;

    

    temp->next = newNode;

  }

  cout << "添加成功!" << endl;

}

上述函数中,先创建一个新节点,将从键盘中输入的学生信息存储到节点中。然后将节点插入到链表的末尾,并输出添加成功的提示信息。

三、删除学生信息

删除学生信息需要首先找到要删除的学生节点,然后将该节点从链表中删除。如下所示:


void deleteStudent()

{

  if(head == NULL)

  无法删除!" << endl;

    return;

  

  int id;

  cout << "请输入要删除的学生ID:" << endl;

  cin >> id;

  if(head->id == id)

  

    head = head->next;

    cout << "删除成功!" << endl;

    return;

  

  Student *temp = head->next;

  Student *prev = head;

  while(temp != NULL && temp->id != id)

  

    prev = temp;

    temp = temp->next;

  

  if(temp == NULL)

  

    cout << "没有找到要删除的学生ID!" << endl;

    return;

  

  prev->next = temp->next;

  cout << "删除成功!" << endl;

}

上述函数中,如果链表为空,输出无法删除的提示信息;否则,从键盘中输入要删除的学生ID,如果该ID是头节点,则将头指针指向下一个节点;如果不是头节点,则从第二个节点开始遍历整个链表,找到要删除的节点并将它从链表中删除。

四、修改学生信息

修改学生信息需要首先找到要修改的学生节点,然后将新的学生信息更新到该节点中。如下所示:


void modifyStudent()

{

  if(head == NULL)

  

    cout << "链表为空

  int id;

  cout << "请输入要修改的学生ID:" << endl;

  cin >> id;

  Student *temp = head;

  while(temp != NULL && temp->id != id)

  

    temp = temp->next;

  

  if(temp == NULL)

  

    cout << "没有找到要修改的学生ID!" << endl;

    return;

  

  cout << "请输入新的学生姓名:" << endl;

  cin >> temp->name;

  cout << "请输入新的学生年龄:" << endl;

  cin >> temp->age;

  cout << "修改成功!" << endl;

}

上述函数中,如果链表为空,输出无法修改的提示信息;否则,从键盘中输入要修改的学生ID,如果该ID存在,则将新的学生信息更新到该节点中。

五、查找学生信息

查找学生信息需要首先从键盘中输入要查找的学生ID,然后遍历整个链表,找到对应的学生信息。如下所示:


void findStudent()

{

  if(head == NULL)

  

    cout << "链表为空

  int id;

  cout << "请输入要查找的学生ID:" << endl;

  cin >> id;

  Student *temp = head;

  while(temp != NULL && temp->id != id)

  

    temp = temp->next;

  

  if(temp == NULL)

  

    cout << "没有找到要查找的学生ID!" << endl;

    return;

  

  cout << "学生ID:" << temp->id << ",姓名:" << temp->name << ",年龄:" << temp->age << endl;

}

上述函数中,如果链表为空,输出无法查找的提示信息;否则,从键盘中输入要查找的学生ID,遍历整个链表,找到对应的学生信息并输出。

综上所述,以上就是使用尾插法创建学生信息链表,并实现增删改查的操作的详细介绍。这些操作在学生信息管理系统中非常重要,熟练掌握这些操作会对提高开发效率和准确性有很大的帮助。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复