目录

1.根据学生信息储存结构,定义结点类型如下:

2.根据单链表定义和学生成绩信息的节点类型,单链表类型可定义如下:

3.单链表的建立

4.单链表的输出

5.单链表结点的插入

6.链表结点的删除

7.单链表的销毁


单链表的定义:

单链表是由若干数据元素(结点)按一定原则连接。原则是前一个结点“指向”下一个结点,只能通过前一个结点才能找到下一个结点。链表通常有一个“头指针变量”,他存放了一个地址,该地址是链表的第一个元素的地址。链表是一种常见的数据结构。下面利用学生信息来简单介绍链表。

1.根据学生信息储存结构,定义结点类型如下:

typedef struct StuNode
{int snum;char sname[20];float score;struct Student *next;
}Student, *StuPtr;

2.根据单链表定义和学生成绩信息的节点类型,单链表类型可定义如下:

class Student{private :StuPtr head;  //定义头结点指针 StuPtr tail;  //为方便,定义指向尾结点的指针 int count;public:StuListLink(){};   //构造函数 void CreateStuList();void CreateStuList(int h); void PrintStuList();void InsertStuList();void DeleteStu();void DestroyStuList();
};

(只声明了一个struct Student 类型,并没有分配储存空间)

以下皆为带头结点的链表的代码

优点:(1)在任何结点之前插入结点或删除表中的任何结点,都是修改前一结点的指针域。

(2)头指针是指向头结点的非空指针,所以空表和飞空表处理方式一样。

3.单链表的建立

void StuListLink::CreateStuList(int h) {StuPtr p;      //定义p结点cout<<"输入学生总数:"<<endl;cin>>conut;if(count<0) {cout<<"输入有误."<<endl;return;}head=new Student;     //为头结点开辟内存空间/*头结点为空*/head->snum=0;         head->sname[0]='\0';head->score=0;head->next=NULL;      //head指向空定义域tail=head;            //表为空时,表头即为表位for(i=0;i<count;i++){p=new Student;cout<<"请输入学生学号 姓名 成绩:"<<endl;cin>>p->snum>>p->sname>>p->score;p->next=NULL;     //p指向空定义域tail->next=p;     //将p接到表尾tail=p;           //结点p为新的表尾}cout<<"链表创建成功,一共"<<count<<"个学生."<<endl;
}

4.单链表的输出

void StuListLink::PrintStuList()
{StuPtr p;p=head->next;  //head为空指针if(p==NULL){cout<<"链表为空!"<<endl;return;}while (p!=NULL){cout<<"学生信息:学号"<<p->snum<<",姓名"<<p->sname<<",成绩"<<p->score<<";"<<endl;p=p->next;}
}

5.单链表结点的插入

尾插法图解:

中间插入图解: 

void StuListLink::InsertStu()
{StuPtr p,pre;StuPtr pNode;     //创建新结点,存放新插入学生信息int sno;cout<<"请输入要在哪个学号之后插入学生信息:"<<endl;cin>>sno;pNode=new Student;    //为新结点开辟内存空间cout<<"请输入学生的学号 姓名 成绩:"<<endl;cin>>pNode->snum>>pNode->sname>>p->score;p=head->next;     //因为头指针定义为空结点,所以p为头指针的下一个结点  pre=head;         //将pre定义为头结点while(p!=NULL)      {pre=p;if(p->snum==sno)     //遍历链表直到末尾找到指定学号,跳出循环{break;}p=p->next;}
/*若未找到指定学号,则pre指向尾结点;反之指向指定学号结点*/
/*所以p始终插入到pre结点之后.*/pNode->next=pre->next;pre->next=pNode;
}

6.链表结点的删除

void StuListLink::DeleteStu()
{StuPtr p,pre;cout<<"请输入要删除的学号:"<<endl;cin>>sno;pre=head,p=head->next;    //p为当前遍历到的结点,pre为其前趋结点while(p!=NULL){if(p->snum==sno)  //找到指定节点{pre->next=p->next;   //将前趋结点的指针域指向待删结点的后趋结点delete p;            //释放结点p=NULL;              //将释放的结点定义为空cout<<"删除成功!";return;}pre=p;p=p->next;}cout<<"未找到该结点,删除失败!"<<endl; } 

链表删除结点的图解 :

7.单链表的销毁

void StuListLink::DestroyStuList()
{StuPtr p,ptr;p=head;while(p!=NULL){ptr=p;p=p->next;delete p;}head=NULL;    //确保头指针为空,不指向其他结点 cout<<"学生链表已销毁."<<endl;} 

实现程序具体操作可见第一篇博客:C++(类与对象)虚函数实现多态求长方体和圆柱体的体积_Ly0.的博客-CSDN博客

c++链表(学生信息)相关推荐

  1. c语言饭卡管理系统链表文件,C语言《学生信息管理系统》链表+文件操作

    今天带来的是一个链表版本的<学生信息管理系统>,功能包括:添加.显示.查询.删除.保存.读取,等功能模块,链表是C语言的进阶内容,希望大家好好学习,这里的代码可能会有一些瑕疵,希望大家提供 ...

  2. 使用C语言链表创建学生信息并且将信息打印输出

    C语言文章更新目录 C/C++学习资源(百度云盘链接) 计算机二级资料(过级专用) C语言学习路线(从入门到实战) 编写C语言程序的7个步骤和编程机制 C语言基础-第一个C程序 C语言基础-简单程序分 ...

  3. 双链表嵌套的简单学生信息管理系统

    参考:实现双链表嵌套的简单学生信息管理 作者:三速何时sub20 发布时间: 2020-07-20 10:44:40 网址:https://blog.csdn.net/weixin_44234294/ ...

  4. c读取txt文件内容并建立一个链表_C++链表实现学生信息管理系统

    可以增删查改,使用链表存储,支持排序以及文件存储及数据读取,基本可以应付期末大作业(狗头) 界面为 源代码为一个main.cpp和三个头文件,具体为 main.cpp #include <ios ...

  5. c语言文件读写_学生信息管理系统(C语言\单向链表\文件读写)

    最近在复习数据结构,早上刚复习完链表,就想到了学生信息管理系统这个经典的大作业,然后呢,花了一早上加一中午的功夫给重新实现了一遍,里面可能会有写的不好的地方,但也代表了我实现的一些想法,在这里我将分享 ...

  6. PTA: 6-4建立学生信息链表(20分)

    大一下半期数据结构 数据结构题目集 pta:建立学生信息链表 本题要求实现一个将输入的学生成绩组织成单向链表的简单函数. 函数接口定义: void input(); 该函数利用scanf从输入中获取学 ...

  7. 使用单链表数据结构存储结构化的学生信息

    使用单链表数据结构存储结构化的学生信息 一.题目描述 定义一个学生结构体,包含有:学号,姓名,成绩.输入N个学生的信息,并进行基本的链表操作.(更好的阅读体验,请在我的博客网站上阅读此文:使用单链表数 ...

  8. c语言链表成绩管理系统排序,【C项目】 文件,结构体,链表,排序, 学生信息管理系统...

    1.密码登录: 2.通过键盘输入学生信息,包括学生学号.姓名.成绩: 3.将输入的信息保存到指定文件中: 4.从文件中读取学生信息: 5.显示全部学生信息: 6.按学生总分进行降序排序: 7.删除学生 ...

  9. 链表实现学生信息管理系统

    用链表来实现学生成绩管理 目标/功能:链表A,每个节点存放一个新的链表B1,B2,B3,B4,B5的头结点. 场景:一个年级,相当链表A 该年级5个班,每个班5个人,相当于链表B1–B5 做一个学生成 ...

最新文章

  1. OpenCVSharp_保存浮点型Mat数据
  2. 简单JS实现走马灯效果的文字(无需jQuery)
  3. falsk-sqlalchemy 连接数据库出现 No module named ‘MySQLdb‘(笔记自用)
  4. BC:带你温习并解读《中国区块链技术和应用发展白皮书》—区块链发展生态
  5. python绘制指数函数图像及性质_指数函数图像及其性质正式版
  6. 在UltraEdit的查找和替换中使用正则表达式 (转)
  7. libmesh 实现 流程
  8. 初涉IPC,了解AIDL的工作原理及用法
  9. 面向开发者的最佳 Android 库列表
  10. 小莫微信影视机器人-自定义对接影视教程
  11. Windows下测试算法在FDDB数据库的性能
  12. 计算机管理员怎么开通,管理员权限怎么设置
  13. 关闭或者开启Windows defender防火墙
  14. 基于Python的人脸识别(68个识别点)和焦点人物检测
  15. less-用法:简介、变量、混合、嵌套、运算、转义、函数、映射、作用域、注释、导入、继承、条件判断
  16. 七.面向对象编程(中)
  17. 2018-11-5-win10-uwp-异步转同步
  18. Merged region A1 must contain 2 or more cells
  19. 低分怎么上计算机专科学校,低分“首选”这四个专业,不仅给全家能争光,专科也能进国企...
  20. 遥感影像目标检测:从CNN(Faster-RCNN)到Transformer(DETR)

热门文章

  1. 积分电路和微分电路的工作原理
  2. php文件上传代码dsn,数据源名称无效-使用php、PDO和DSN连接到MySQL
  3. 嵌入式100题(81):波特率是什么,为什么双方波特率要相同,高低波特率有什么区别;...
  4. BAPI_INCOMINGINVOICE_CREATE 发票校验
  5. 【笔记】Spring Security Oauth2-请求方式无法获取token
  6. 数字图像直方图处理涉及的数学知识介绍
  7. android tv盒子哪个好用,2020什么电视盒子最好?超良心的三大实用选购技巧
  8. 7 层 OSI 模型
  9. sap exceptions处理
  10. python元组读取到列表_Python 学习笔记(1)Python容器:列表、元组、字典与集合...