C++实现:创建、插入与删除学号姓名单链表

需积分: 18 11 下载量 49 浏览量 更新于2024-09-23 2 收藏 28KB DOC 举报
"创建单链表并进行插入与删除操作的C++实现" 在这个程序中,主要涉及了几个关键的C++编程概念,主要是围绕单链表数据结构进行的。单链表是一种线性数据结构,其中每个节点包含数据以及指向下一个节点的指针。 首先,我们定义了一个结构体`struct node`,它表示链表中的节点。每个节点有以下三个部分: 1. `int num`: 用来存储学号。 2. `char str[20]`: 用来存储姓名,这里假设姓名不超过20个字符。 3. `struct node* next`: 是一个指针,指向链表中的下一个节点。 接下来,程序通过`main()`函数来组织整个流程。`main()`函数中声明了几个辅助函数,它们分别用于: - `creat()`: 创建链表,按照学号顺序插入节点,直到输入的姓名为空为止。 - `insert()`: 在链表中插入一个新节点,根据给定的学号和姓名。 - `delet()`: 删除链表中具有给定姓名的节点。 - `print()`: 打印链表的所有节点。 `main()`函数首先调用`creat()`函数创建链表,然后调用`print()`打印链表,接着用户可以输入要插入的学号和姓名,程序调用`insert()`插入节点后再打印链表。最后,用户输入要删除的姓名,调用`delet()`删除相应节点,并再次打印链表。 `creat()`函数是通过循环读取用户输入的学号和姓名来构建链表的,当用户输入两次回车时退出。每次读取到有效的学号和姓名,就创建一个新的节点,并将这个新节点添加到链表的末尾。 `insert()`函数负责在已有的链表中找到合适的位置插入新节点。它需要根据给定的学号找到正确的位置,如果新学号小于当前节点的学号,就在当前节点之前插入新节点;否则,继续遍历链表。 `delet()`函数则需要找到具有给定姓名的节点,然后修改它的前一个节点的`next`指针,使其指向被删除节点的下一个节点,从而完成删除操作。 `print()`函数遍历整个链表,打印每个节点的学号和姓名。 需要注意的是,这段代码中没有包含错误处理和边界检查,实际应用中应当增加这些功能以提高程序的健壮性。此外,使用`gets()`函数在C++中是不安全的,因为可能存在缓冲区溢出的风险,建议使用更安全的`std::getline()`或者`std::cin`进行输入。
2009-11-16 上传
一、建立以下五个表: 教师表:Teacher,学生表:Student, 课程表:Course,选课表:SC,授课表:TC 二、完成以下查询: 1.查询成绩在80-90之间的记录。 2.查询至少4个同学选修的课程名。 3.查询其他系中比“信息系”所有学生年龄都大的学生名单及年龄,并按年龄降序输出: 4.查询与学生张建国同岁的所有学生的学号。姓名和系别。 5.查询选修了2门以上课程的学生名单。 6.查询至少有一门与“张建国”选课相同的学生的姓名,课程号,系别 7.查询成绩比该课程平均成绩高的学生的成绩表。 8.查询选课号为01001课程且成绩高于课程01002学生的姓名,此两门课的课程名和成绩。 9.查询所有没选修01001号课程的学生名单 10、查询每个同学各门课程的平均成绩和最高成绩,按降序输出姓名、平均成绩、最高成绩; 11、查询所有学生都选修了的课程号和课程名; 12、查询选修了991102号学生选修了的课程的学生学号和姓名。 三、使用SQL创建视图,修改记录 1.创建成绩视图SCORE_VIEW,包含学号sno,姓名sn,课程名cn,成绩score; 2.创建一个计算机系学生名单视图S_VIEW,包含学号sno,姓名sn,性别sex; 3.通过上面的视图,修改学号为991102,课程号01001的成绩记录; 4,创建一个视图,计算机系学生的成绩单score_view_CDEPT,包含学号sno,姓名sn,课程名cn,成绩score