c++链表(学生信息)
目录
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++链表(学生信息)相关推荐
- c语言饭卡管理系统链表文件,C语言《学生信息管理系统》链表+文件操作
今天带来的是一个链表版本的<学生信息管理系统>,功能包括:添加.显示.查询.删除.保存.读取,等功能模块,链表是C语言的进阶内容,希望大家好好学习,这里的代码可能会有一些瑕疵,希望大家提供 ...
- 使用C语言链表创建学生信息并且将信息打印输出
C语言文章更新目录 C/C++学习资源(百度云盘链接) 计算机二级资料(过级专用) C语言学习路线(从入门到实战) 编写C语言程序的7个步骤和编程机制 C语言基础-第一个C程序 C语言基础-简单程序分 ...
- 双链表嵌套的简单学生信息管理系统
参考:实现双链表嵌套的简单学生信息管理 作者:三速何时sub20 发布时间: 2020-07-20 10:44:40 网址:https://blog.csdn.net/weixin_44234294/ ...
- c读取txt文件内容并建立一个链表_C++链表实现学生信息管理系统
可以增删查改,使用链表存储,支持排序以及文件存储及数据读取,基本可以应付期末大作业(狗头) 界面为 源代码为一个main.cpp和三个头文件,具体为 main.cpp #include <ios ...
- c语言文件读写_学生信息管理系统(C语言\单向链表\文件读写)
最近在复习数据结构,早上刚复习完链表,就想到了学生信息管理系统这个经典的大作业,然后呢,花了一早上加一中午的功夫给重新实现了一遍,里面可能会有写的不好的地方,但也代表了我实现的一些想法,在这里我将分享 ...
- PTA: 6-4建立学生信息链表(20分)
大一下半期数据结构 数据结构题目集 pta:建立学生信息链表 本题要求实现一个将输入的学生成绩组织成单向链表的简单函数. 函数接口定义: void input(); 该函数利用scanf从输入中获取学 ...
- 使用单链表数据结构存储结构化的学生信息
使用单链表数据结构存储结构化的学生信息 一.题目描述 定义一个学生结构体,包含有:学号,姓名,成绩.输入N个学生的信息,并进行基本的链表操作.(更好的阅读体验,请在我的博客网站上阅读此文:使用单链表数 ...
- c语言链表成绩管理系统排序,【C项目】 文件,结构体,链表,排序, 学生信息管理系统...
1.密码登录: 2.通过键盘输入学生信息,包括学生学号.姓名.成绩: 3.将输入的信息保存到指定文件中: 4.从文件中读取学生信息: 5.显示全部学生信息: 6.按学生总分进行降序排序: 7.删除学生 ...
- 链表实现学生信息管理系统
用链表来实现学生成绩管理 目标/功能:链表A,每个节点存放一个新的链表B1,B2,B3,B4,B5的头结点. 场景:一个年级,相当链表A 该年级5个班,每个班5个人,相当于链表B1–B5 做一个学生成 ...
最新文章
- OpenCVSharp_保存浮点型Mat数据
- 简单JS实现走马灯效果的文字(无需jQuery)
- falsk-sqlalchemy 连接数据库出现 No module named ‘MySQLdb‘(笔记自用)
- BC:带你温习并解读《中国区块链技术和应用发展白皮书》—区块链发展生态
- python绘制指数函数图像及性质_指数函数图像及其性质正式版
- 在UltraEdit的查找和替换中使用正则表达式 (转)
- libmesh 实现 流程
- 初涉IPC,了解AIDL的工作原理及用法
- 面向开发者的最佳 Android 库列表
- 小莫微信影视机器人-自定义对接影视教程
- Windows下测试算法在FDDB数据库的性能
- 计算机管理员怎么开通,管理员权限怎么设置
- 关闭或者开启Windows defender防火墙
- 基于Python的人脸识别(68个识别点)和焦点人物检测
- less-用法:简介、变量、混合、嵌套、运算、转义、函数、映射、作用域、注释、导入、继承、条件判断
- 七.面向对象编程(中)
- 2018-11-5-win10-uwp-异步转同步
- Merged region A1 must contain 2 or more cells
- 低分怎么上计算机专科学校,低分“首选”这四个专业,不仅给全家能争光,专科也能进国企...
- 遥感影像目标检测:从CNN(Faster-RCNN)到Transformer(DETR)
热门文章
- 积分电路和微分电路的工作原理
- php文件上传代码dsn,数据源名称无效-使用php、PDO和DSN连接到MySQL
- 嵌入式100题(81):波特率是什么,为什么双方波特率要相同,高低波特率有什么区别;...
- BAPI_INCOMINGINVOICE_CREATE 发票校验
- 【笔记】Spring Security Oauth2-请求方式无法获取token
- 数字图像直方图处理涉及的数学知识介绍
- android tv盒子哪个好用,2020什么电视盒子最好?超良心的三大实用选购技巧
- 7 层 OSI 模型
- sap exceptions处理
- python元组读取到列表_Python 学习笔记(1)Python容器:列表、元组、字典与集合...