21xrx.com
2025-07-03 09:50:12 Thursday
文章检索 我的文章 写文章
使用尾插法创建学生信息链表,并实现增删改查(C++)
2023-07-07 21:43:41 深夜i     10     0
学生信息 链表 尾插法 增删改查 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,遍历整个链表,找到对应的学生信息并输出。

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

  
  

评论区