单链表的新建、查找

news2025/1/20 2:35:23

10.3 头插法新建链表实战

10.3.1 流程图

10.3.1.1 整体的流程图

image-20230329181044995

10.3.1.2 循环的流程图

image-20230329182641428

10.3.2 代码

  1. !!!头指针始终指向头结点!!!
  2. 头插法:实则就是不断地插元素插在头结点的后面
  3. 最初要先给头结点的指针域赋值为NULL
#include <stdio.h>
#include <stdlib.h>

//头插法新建链表
//定义链表的数据结构
typedef int type;
typedef struct LNode{
    type data;
    LNode *next;
}LNode, *LinkList;

//输入数据1 2 3 4 5 99999
void linklist_head_insert(LinkList &L){
//    LinkList h;//先新建一个头指针,每一个链表一定会有一个头指针,头指针指向的就是头结点!!!(头结点不是第一个结点)
//    上一句是错的,非常非常严重的,因为本来传递过来的L,就已经是头指针了,并不需要再新建一个头指针了
    L = (LinkList) malloc (sizeof(LNode));  //一定要记得分配空间!!!就是声明一个头结点
    L->next = NULL;//因为一开始还没有除头结点以外的结点,所以h-next 就是空
    int x;//保留第一个结点的数据域
    scanf("%d", &x);
    LinkList s;//插入的结点
    while(x != 99999){
        s = (LinkList) malloc (sizeof(LNode));//一定要记得分配空间!!!
        s->data = x;//把x赋值给插入的结点
        s->next = L->next;//让插入的结点指向原本的第一个结点
        L->next = s;//让头结点指向插入的结点
        scanf("%d", &x);//输入下一个插入的值
    }
}

//输出链表
void print_linklist(LinkList L){
    L = L->next;
    while(L){
        printf("%3d",L->data);
        L = L->next;
    }
    printf("\n");
}

int main() {
    LinkList L;
    linklist_head_insert(L);
    print_linklist(L);
    return 0;
}

10.4 尾插法新建链表实战

10.4.1 流程图

10.4.1.1 整体的流程图

image-20230329183553817

10.4.1.2 循环的流程图

  1. 错误的思维:!!!记住,此时是直接在尾部插入,后面并没有结点了,只要新建的结点与尾指针所指的结点串起来就行!!!

image-20230329184719509

  1. 正确的思维:

image-20230329185148717

10.4.2 代码

  1. 一定要在最后给尾指针的指针域赋值为NULL
  2. 只需要新结点与尾指针所指的结点串起来就行,并不需要管新结点的后继结点是什么:

​ 因为:新结点的后继结点要么是新来的结点,要么是NULL,全由尾指针控制,与新结点无关

  1. 输出代码一定要记得:把指针指向下一个!!!
#include <stdio.h>
#include <stdlib.h>

//尾插法新建链表
typedef int type;
typedef struct LNode{
    type data;
    LNode *next;
}LNode, *LinkList;

//从尾部插入元素
void LinkList_tail_insert(LinkList &L){
    L = (LinkList) malloc(sizeof(LNode));
    LinkList s, r = L;
    int x;
    scanf("%d",&x);
    while(x != 99999){
        s = (LinkList) malloc(sizeof(LNode));
        s->data = x;
        r->next = s;
        r = s;
        scanf("%d",&x);
    }
    r->next = NULL;
}

//输出单链表
void print_LinkList(LinkList L){
    L = L->next;
    while(L){
        printf("%3d", L->data);
        L = L->next;
    }
    printf("\n");
}

int main() {
    LinkList L;
    LinkList_tail_insert(L);
    print_LinkList(L);
    return 0;
}

10.5 按位置及按值查找实战

10.5.1 按位置查找

  1. 位置详解图

image-20230329194704289

  1. 可以从0号位置开始查

10.5.1.1 流程图

image-20230329195504261

10.5.2 按值查找

  1. 遍历到最后还没有找到,要记得加上return NULL

10.5.2.1 流程图

image-20230329200925252

10.5.3 代码

#include <stdio.h>
#include <stdlib.h>

typedef int type;
typedef struct LNode{
    type data;
    LNode *next;
}LNode, *LinkList;

//尾插法插入元素
void LinkList_tail_insert(LinkList &L){
    L = (LinkList) malloc(sizeof(LNode));
    LinkList s, r = L;
    int x;
    scanf("%d",&x);
    while(x != 99999){
        s = (LinkList) malloc(sizeof(LNode));
        s->data = x;
        r->next = s;
        r = s;
        scanf("%d",&x);
    }
    r->next = NULL;
}

//按位置查找
LinkList select_pos(LinkList L, int pos){
    int i = 0;//从第0个位置可以查
    //判断查询位置是否合理
    if(pos < 0){
        return NULL;
    }
    //按位置查询
    while(L && i < pos){
        L = L->next;
        i++;
    }
    return L;
}

//按值查找
LinkList select_val(LinkList L, int val){
    while(L){
        if(L->data == val){
            return L;
        }
        L = L->next;
    }
    return NULL;
}

int main() {
    LinkList L, search;
    LinkList_tail_insert(L);
    search = select_pos(L, 2);
    if(search){
        printf("select success\n");
        printf("the element in 2 location is %d\n", search->data);
    }else{
        printf("select failure\n");
    }
    search = select_val(L, 9);
    if(search){
        printf("select success\n");
        printf("the element is %d", search->data);
    }else{
        printf("select failure\n");
    }
    return 0;
}

10.6 往第i个位置插入元素实战

10.6.1 流程图

image-20230330142818760

10.6.2 代码

#include <stdio.h>
#include <stdlib.h>

//单链表结点的定义
typedef int ElemType;
typedef struct LNode{
    ElemType data;
    LNode *next;
}LNode, *LinkList;

//尾结点插入法新建链表
void LinkList_tail_insert(LinkList &L){
    L = (LinkList) malloc(sizeof(LNode));
    LinkList s, r = L;
    int x;
    scanf("%d",&x);
    while(x != 99999){
        s = (LinkList) malloc(sizeof(LNode));
        s->data = x;
        r->next = s;
        r = s;
        scanf("%d",&x);
    }
    r->next = NULL;
}

//打印链表
void print_LinkList(LinkList L){
    L = L->next;
    while(L){
        printf("%3d", L->data);
        L = L->next;
    }
    printf("\n");
}

//查找第i个位置
LinkList select_pos(LinkList L, int pos){
    //判断位置的合理性
    if(pos < 0){
        return NULL;
    }
    int i = 0;//从第0个位置开始
    while(L && i < pos){
        L = L->next;
        i++;
    }
    return L;
}

//向第i个位置插入值为val的元素
bool LinkList_medium_insert(LinkList &L, int i, ElemType val){
    //判断插入位置的合理性
    if(i < 1){
        return false;
    }
    //先找到i-1个位置
    LinkList front, p;
    front = select_pos(L, i-1);
    p = (LinkList) malloc(sizeof(LNode));
    p->data = val;
    p->next = front->next;
    front->next = p;
    return true;
}

int main() {
    LinkList L, search;
    bool res;
    LinkList_tail_insert(L);
    print_LinkList(L);
    search = select_pos(L, 5);
    if(search != NULL){
        printf("%d\n", search->data);
    }else{
        printf("failure");
    }
    res = LinkList_medium_insert(L, 2 , 9);
    print_LinkList(L);
    if(res){
        printf("success");
    }else{
        printf("failure");
    }
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2279156.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【unity进阶篇】向量插值运算Vector3.Lerp和Vector3.Slerp

考虑到每个人基础可能不一样&#xff0c;且并不是所有人都有同时做2D、3D开发的需求&#xff0c;所以我把 【零基础入门unity游戏开发】 分为成了C#篇、unity通用篇、unity3D篇、unity2D篇。 【C#篇】&#xff1a;主要讲解C#的基础语法&#xff0c;包括变量、数据类型、运算符、…

CSS 的基础知识及应用

前言 CSS&#xff08;层叠样式表&#xff09;是网页设计和开发中不可或缺的一部分。它用于描述网页的视觉表现&#xff0c;使页面不仅实现功能&#xff0c;还能提供吸引人的用户体验。本文将介绍 CSS 的基本概念、语法、选择器及其在提升网页美观性方面的重要性。 什么是 CSS&…

怎么投稿各大媒体网站?如何快速辨别一家媒体是否适合自己?

在做软文营销时&#xff0c;除去在官号和子账号上投稿外&#xff0c;怎么投稿各大媒体网站是困扰中小企业主的一大难题。没有多余账号、运营成本太高&#xff0c;让不少想做全平台推广的朋友止步于此。为了解决这些问题&#xff0c;今天就让小编来分享一下&#xff0c;怎么在各…

dl学习笔记:(4)简单神经网络

&#xff08;1&#xff09;单层正向回归网络 bx1x2z100-0.2110-0.05101-0.051110.1 接下来我们用代码实现这组线性回归数据 import torch x torch.tensor([[1,0,0],[1,1,0],[1,0,1],[1,1,1]], dtype torch.float32) z torch.tensor([-0.2, -0.05, -0.05, 0.1]) w torch.…

01设计模式(D3_设计模式类型 - D3_行为型模式)

目录 一、模版方法模式 1. 基本介绍 2. 应用案例一&#xff1a;豆浆制作问题 需求 代码实现 模板方法模式的钩子方法 3. View的draw&#xff08;Android&#xff09; Android中View的draw方法就是使用了模板方法模式 模板方法模式在 Spring 框架应用的源码分析 知识小…

Android BitmapShader实现狙击瞄具十字交叉线准星,Kotlin

Android BitmapShader实现狙击瞄具十字交叉线准星&#xff0c;Kotlin <?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.…

【QT】: 初识 QWidget 控件 | QWidget 核心属性(API) | qrc 文件

&#x1f525; 目录 1. 控件概述 控件体系的发展阶段 2. QWidget 核心属性 2.1 核心属性概览2.2 用件可用&#xff08;Enabled&#xff09; 2.3 坐标系&#xff08;Geometry&#xff09; **实例 1: 控制按钮的位置**实例 2: 表白 程序 2.4 窗口标题&#xff08;windowTiltle&a…

复健第二天之[MoeCTF 2022]baby_file

打开题目在线环境可以看到&#xff1a; 感觉要用伪协议去求&#xff0c;但是我们并不知道flag的位置&#xff0c;这里我选择用dirsearch去扫一下&#xff1a; 最像的应该就是flag.php了 于是就构建payload&#xff1a; **?filephp://filter/convert.base64-encode/resource…

Spring Boot + Apache POI 实现 Excel 导出:BOM物料清单生成器(支持中文文件名、样式美化、数据合并)

目录 引言 Apache POI操作Excel的实用技巧 1.合并单元格操作 2.设置单元格样式 1. 创建样式对象 2. 设置边框 3. 设置底色 4. 设置对齐方式 5. 设置字体样式 6.设置自动换行 7. 应用样式到单元格 3. 定位和操作指定单元格 4.实现标签-值的形式 5.列宽设置 1. 设…

【Web】2025西湖论剑·中国杭州网络安全安全技能大赛题解(全)

目录 Rank-l Rank-U sqli or not Rank-l username存在报错回显&#xff0c;发现可以打SSTI 本地起一个服务&#xff0c;折半查找fuzz黑名单&#xff0c;不断扔给fenjing去迭代改payload from flask import Flask, request, render_template_stringapp Flask(__name__)app…

索引(MySQL)

1. 没有索引&#xff0c;可能会有什么问题 索引&#xff1a;提高数据库的性能&#xff0c;索引是物美价廉的东西了。不用加内存&#xff0c;不用改程序&#xff0c;不用调sql&#xff0c;只要执行 正确的 create index &#xff0c;查询速度就可能提高成百上千倍。但是天下没有…

C#在Json序列化时将key和value转为对应的中文

在C#中&#xff0c;实体类可以通过System.Text.Json或Newtonsoft.Json库等方式直接序列化为json字符串&#xff0c;key为字段&#xff08;属性&#xff09;名&#xff0c;value为值。 上面的方式虽然实现简单&#xff0c;但是有个缺陷&#xff0c;就是转化后的json给外人展示时…

23- TIME-LLM: TIME SERIES FORECASTING BY REPRO- GRAMMING LARGE LANGUAGE MODELS

解决问题 用LLM来解决时序预测问题&#xff0c;并且能够将时序数据映射&#xff08;reprogramming&#xff09;为NLP token&#xff0c;并且保持backbone的大模型是不变的。解决了时序序列数据用于大模型训练数据稀疏性的问题。 方法 Input Embedding 输入&#xff1a; X …

使用 Java 开发 Android 应用:Kotlin 与 Java 的混合编程

使用 Java 开发 Android 应用&#xff1a;Kotlin 与 Java 的混合编程 在开发 Android 应用程序时&#xff0c;我们通常可以选择使用 Java 或 Kotlin 作为主要的编程语言。然而&#xff0c;有些开发者可能会想要在同一个项目中同时使用这两种语言&#xff0c;这就是所谓的混合编…

左神算法基础提升--4

文章目录 树形dp问题Morris遍历 树形dp问题 求解这个问题需要用到我们在基础班上学到的从节点的左子树和右子树上拿信息的方法。 求最大距离主要分为两种情况&#xff1a;1.当前节点参与最大距离的求解&#xff1b;2.当前节点不参与最大距离的求解&#xff1b; 1.当前节点参与最…

拆分工作簿转换PDF格式文件一步到位-Excel易用宝

今天一大早老板急匆匆的跑进办公室说&#xff0c;快快快&#xff0c;&#xff0c;快把这个工作簿中的工作表拆分出来&#xff0c;然后转换成PDF格式文件发给客户。 我一看这么多工作表&#xff0c;又是拆分表格&#xff0c;又是转换文件&#xff0c;这么复杂的工作&#xff0c…

SSM课设-学生管理系统

【课设者】SSM课设-学生管理系统 技术栈: 后端: SpringSpringMVCMybatisMySQLJSP 前端: HtmlCssJavaScriptEasyUIAjax 功能: 学生端: 登陆 学生信息管理 个人信息管理 老师端: 多了教师信息管理 管理员端: 多了班级信息管理 多了年级信息管理 多了系统用户管理

Python调用go语言编译的库

要在 Python 中调用用 Go 语言编写的库&#xff0c;可以使用 Go 语言的 cgo 特性将 Go 代码编译成共享库&#xff08;如 .so 文件&#xff09;&#xff0c;然后在 Python 中通过 ctypes 或 cffi 模块加载和调用这个共享库。 新建main.go文件&#xff0c;使用go语言编写如下代码…

JavaWeb简单开发

JavaWeb 开发是指基于 Java 技术栈进行 Web 应用开发的过程&#xff0c;主要依赖于 Java EE 或者 Spring 框架来构建服务器端应用。JavaWeb 的技术栈比较广泛&#xff0c;通常包括以下几个部分&#xff1a; 示例&#xff1a;简单的 JavaWeb 应用&#xff08;Spring Boot Thyme…

[Mac + Icarus Verilog + gtkwave] Mac运行Verilog及查看波形图

目录 1. MAC安装环境 1. 1 Icarus Verilog 编译 1. 2 gtkwave 查看波形 2. 安装遇到的问题 2. 1 macOS cannot verify that this app is free from malware 2. 2 gtkwave-bin is not compatible with macOS 14 or later 3. 运行示例 3. 1 源代码 3. 2 编译Verilog 3. 3 生成.v…