目录
---------------------------------------------------------------------------------------------------------------------------------

- //链表插入之 按序插入
- STU_NODE *insertLink(STU_NODE *head,STU_NODE tmp){
- //从堆区申请带插入的节点空间
- STU_NODE *pi = new STU_NODE();
- //给空间赋值
- *pi = tmp;
- pi->next = nullptr;
-
- //判断链表这个结点为不为空
- if(nullptr == head){ //不存在
- head = pi;
-
- }else{//链表存在
- //寻找插入点
- STU_NODE *pf=head, *pb = head;
- while((pb->num < pi->num)&& (pb->next != NULL))
- {
- //pf保存pb的位置
- pf = pb;//pb移动到下一个节点
- pb = pb->next;
- }
- //判断插入点的位置
- if(pb->num>=pi->num)//头部、中部插入
- {
- if(pb == head)
- {//头部
- pi->next = head;
- head = pi;
- }
- else{//尾部
- pf->next = pi;
- pi->next = pb;
- }
- }else{//尾部插入
- pb->next = pi;
- }
- }
- return head;
- }


- STU_NODE *searchLink(STU_NODE *head,char *name){
- //判断链表是否存在
- //判断链表这个结点为不为空
- if(nullptr == head){ //不存在
- cout<<"Link is not exist"<
- return nullptr;
- }
- //逐个节点查询
- STU_NODE *pnode = head;
- while((strcpy_s(pnode->name,name) != 0) && (pnode->next != nullptr))
- pnode = pnode->next;
- if(strcpy_s(pnode->name,name) == 0){
- return pnode;
- }else{
- cout<<"未找到相关节点"<
- }
- }
3.搜索功能结果展示测试

3.删除链表
1.图示删除链表的原理



2.函数调用

3.代码实现删除函数
- STU_NODE *deleteLink(STU_NODE *head,int num){
- //判断链表这个结点为不为空
- if(nullptr == head){ //不存在
- cout<<"Link is not exist"<
- return nullptr;
- }
- //逐个节点比较,寻找删除点
- STU_NODE *pf=head, *pb = head;
- while((pb->num != num) && (pb->next != nullptr)){
- pf = pb;
- pb = pb->next;
- }
- //找到删除点
- if(pb->num == num){
- if(pb == head) //头结点删除
- {
- head = head->next;
- }else{//中尾部删除
- pf->next = pb->next;
- }
- delete pb;
- }else{
- cout<<"未找到要删除的节点:"<
- }
- return head;
- }
4.结果展示

4.释放整个链表
1.函数调用

2.释放链表的函数实现
- STU_NODE *freeLink(STU_NODE *head)
- {
- //判断链表这个结点为不为空
- if(nullptr == head){ //不存在
- cout<<"Link is not exist"<
- return nullptr;
- }
- //逐个节点遍历删除
- STU_NODE *pb = head;
- while (pb != nullptr) {
- head = head->next;
- delete pb;
- pb = head;
- }
- return head;
- }
3.结果展示

5.main函数最终所有代码
- #include
- #include "link.h"
- #include
-
- using namespace std;
- STU_NODE *head = nullptr;
- int main()
- {
- helpMessage();
-
- while(1){
- char cmd[64] = "";
- cout<<"请输入操作指令: ";
- cin >> cmd;
-
- if(strcmp(cmd,"help") == 0){
- helpMessage();
- }else if(strcmp(cmd,"insert") == 0){
- cout << "-------insert-------"<
- cout<<"请输入要插入的节点信息(num name):";
- STU_NODE tmp;
- cin>>tmp.num>>tmp.name;
- //往哪个链表插,此时需要一个指向链表的头结点指针
- head = insertLink(head,tmp);
- }else if(strcmp(cmd,"print") == 0){
- //遍历链表
- printLink(head);
- }else if(strcmp(cmd,"search") == 0){
- cout << "-------search-------"<
- cout<<"请输入查询的姓名:";
- char name[32]="";
- cin>>name;
- STU_NODE *ret = nullptr;
- ret = searchLink(head,name);
- if(ret != nullptr){
- cout<<"查询的结构:num="<
num<<", name="<name< - }
- }else if(strcmp(cmd,"delete") == 0){
- cout << "-------delete-------"<
- cout << "请输入要删除的学号num: ";
- int num = 0;
- cin>>num;
- head = deleteLink(head,num);
-
- }else if(strcmp(cmd,"free") == 0){
- cout << "-------free-------"<
- head = freeLink(head);
-
- }else if(strcmp(cmd,"clear") == 0){
- system("cls");
-
- }else if(strcmp(cmd,"quit") == 0){
- head = freeLink(head);
- return 0;
- }
- }
- return 0;
-
- }
-
相关阅读:
Python和Pandas对事件数据的处理:以电动汽车充电数据为例
Python移除指定文件夹中所有文件名称中的特殊字符(数字、特殊字符、空格等)、只保留字母字符
centos7安装部署kvm,照做就行
【精选】发布应用到应用商店的基本介绍
本周内容整理
基于SSM的医院科室人员管理系统
为什么国家政府发的国债,被央行自己印的钱大量购买时,利率会降低呢?
Vue基础(干货+代码)
wind版本elasticdump执行报错 unexpected token ‘ in json at
docker基础命令
-
原文地址:https://blog.csdn.net/Phofomy/article/details/134507175
-
最新文章
-
沪漂五周年了:我越来越迷茫了
Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
MySQL-Seconds_behind_master的精度误差
[MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
Agent OS :五种驯服不确定性的范式
PortSwigger SQL注入LAB11
数据库即时编译JIT
[Begin]AI Learn Data Day 0
深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU