当前位置: 首页 > news >正文

数据结构--单链

#include "link.h"
plink get_head()
{
    plink p=malloc(sizeof(Link));
    if(p==NULL)
    {
        printf("申情节点失败\n");
        return NULL;
    }
    p->len=0;
    p->next=NULL;
    return p;
}
void head_insert(plink L,int a)
{
    if(L==NULL)
    {
        printf("单链表不存在\n");
    }
    plink p=malloc(sizeof(Link));//申请新节点
    p->data=a;//新节点赋值
    p->next=L->next;//将第一个节点的地址放入新节点指针域
    L->next=p;//将新节点地址放入头结点指针域
    L->len++;
}
void node_output(plink L)

{
    if(L==NULL||L->len==0)
    {
        printf("单链表不存在或者为空\n");
    }
    plink t=L;
    for(int i=0;i<L->len;i++)
    {
        t=t->next;
        printf("%d\t",t->data);
    }
    putchar(10);
}
void tail_insert(plink L,int a)
{
    if(L==NULL)
    {
        printf("单链表不存在\n");
    }
    plink t=L;
    for(int i=0;i<L->len;i++)
    {
        t=t->next;
    }
    plink p=malloc(sizeof(Link));//申请新节点
    p->data=a;//新节点赋值
    t->next=p;
    p->next=NULL;
    L->len++;
}
void any_insert(plink L)
{
    if(NULL==L)
    {
        printf("插入失败\n");
    }
    int key,x;
    printf("请输入要插入的位置:");
    scanf("%d",&key);
    plink t=L;
    for(int i=0;i<key-1;i++)
    {
        t=t->next;
    }
    printf("请输入要插入的值:");
    scanf("%d",&x);
    plink p=malloc(sizeof(Link));//申请新节点
    p->data=x;//新节点赋值
    p->next=t->next;
    t->next=p;
    L->len++;
}
void head_dele(plink L)
{
    if(NULL==L)
    {
        printf("单链表不存在或者为空\n");
    }
    plink t=L->next;
    L->next=t->next;
    L->len--;
    free(t);
    t=NULL;
}
void tail_dele(plink L)
{
    if(NULL==L||L->len==0)
    {
        printf("单链表不存在或者为空\n");
    }
    plink t=L;
    for(int i=0;i<L->len-1;i++)
    {
        t=t->next;
    }
    plink q=t->next;
    t->next=NULL;
    L->len--;
    free(q);
    q=NULL;
}
void any_dele(plink L)
{
     if(L==NULL||L->len==0)
     {
         printf("单链表不存在或者为空\n");
     }
    int key;
    printf("请输入要删除的位置:");
    scanf("%d",&key);
    plink t=L;
    for(int i=0;i<key-1;i++)
    {
        t=t->next;
    }
    plink p=t->next;//申请新节点
    t->next=t->next->next;
    L->len--;
    free(p);
    p=NULL;
}
void find_change(plink L)
{
    int key,sub=-1,x;
    printf("请输入要查找的数:");
    scanf("%d",&key);
    printf("请输入要修改的值:");
    scanf("%d",&x);
    if(L==NULL||L->len==0)
    {
        printf("单链表不存在或为空\n");
    }
    plink t=L;
    for(int i=0;i<L->len;i++)
    {
        t=t->next;
        if(t->data==key)
        {
            sub=i;
            t->data=x;
        }
    }
    if(sub==-1)
    {
        printf("不存在该节点\n");
    }
}
void node_reverse(plink L)
{
    if(L==NULL||L->len==0)
    {
        printf("单链表不存在或为空\n");
    }
    plink q=L->next->next;
    plink t=L->next;
    while(q!=NULL)
    {
        t->next=q->next;
        q->next=L->next;
        L->next=q;
        q=t->next;
    }
}
void node_sort(plink L)//升序
{
    if(L==NULL||L->len==0)
    {
        printf("单链表不存在或为空\n");
    }
    for(int i=0;i<L->len-1;i++)
    {
        plink q=L->next->next;
        plink t=L->next;
        while(q!=NULL)
        {
            if(q->data<t->data)
            {
                t->next=q->next;
                q->next=L->next;
                L->next=q;
                q=t->next;
            }
            else
            {
                t=t->next;
                q=q->next;
            }
        }
    }
}
void node_cut(plink L)
{
    if(L==NULL||L->len==0)
    {
        printf("单链表不存在或为空\n");
    }
    plink t=L->next;
    plink q=L->next->next;
    while(q!=NULL)
    {
        L->next=q;
        free(t);
        t=q;
        q=t->next;
        L->len--;
    }
    free(t);
    t=NULL;
    L->len--;
}


    


    

#ifndef _LINK_H
#define _LINK_H
#include<myhead.h>
typedef struct node//节点结构体
{
    union
    {
        int len;//链表长度
        int data;//节点数据域,存储数据
    };//节省空间
    struct node *next;//指向下一个指针节点
}Link,*plink;//结构体普通类型
plink get_head();
void head_insert(plink,int);
void node_output(plink);
void tail_insert(plink,int);
void any_insert(plink);
void head_dele(plink);
void tail_dele(plink);
void any_dele(plink);
void find_change(plink);
void node_reverse(plink);
void node_sort(plink);
void node_cut(plink);


#endif

#include "link.h"

int main(int argc, const char *argv[])
{
    //申请头结点函数,返回头结点地址给L
    plink L=get_head();
    //头插法 创建整个表
    int a[10]={10,20,30,40,50,60,70,80,90,95};
    for(int i=0;i<10;i++)
    {
        head_insert(L,a[i]);
    }
    //尾插法创建整个表
    for(int i=0;i<10;i++)
    {
        tail_insert(L,a[i]);
    }
    //单链表遍历
    node_output(L);
    putchar(10);
    any_insert(L);
    node_output(L);
    putchar(10);
    head_dele(L);
    node_output(L);
    putchar(10);
    tail_dele(L);
    node_output(L);
    any_dele(L);
    node_output(L);
    putchar(10);
    find_change(L);
    node_output(L);
    putchar(10);
    node_reverse(L);
    node_output(L);
    putchar(10);
    node_sort(L);
    node_output(L);
    putchar(10);
    node_cut(L);
    node_output(L);


    return 0;
}

    

相关文章:

数据结构--单链

#include "link.h" plink get_head() { plink pmalloc(sizeof(Link)); if(pNULL) { printf("申情节点失败\n"); return NULL; } p->len0; p->nextNULL; return p; } void head_insert(plink L,int a) {…...

春秋云镜CVE-2023-38836

打开靶场环境 点击发现一个登陆框&#xff0c;弱口令试一下 发现账号密码为admin,password 随便点击点击 Media发现这里可以上传文件上传木马试试 <?php eval($_POST["wjq"]); ?> 发现不能上传php文件 php内容 修改他的格式 抓包绕过一下 302就可以其实已经…...

Linux 进程概念

Linux 进程概念 硬件理解冯 诺依曼体系结构五大组成部件强调存储 引子操作系统&#xff08;Operator System&#xff09;概念作用认识为什么要有操作系统&#xff1f; 结构 示意图理解操作系统system call库函数概念 进程什么是进程概念误区认识 描述进程 - PCBtask_struct - P…...

【秋招突围】2024届校招-米哈游笔试题-第二套

🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 编程一对一辅导 ✨ 本系列打算持续跟新 春秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 🌰 明晚又有米…...

tklog v0.0.9 :Rust灵活高效日志管理

tklog是rust高性能结构化日志库&#xff0c;支持同步日志&#xff0c;异步日志&#xff0c;支持自定义日志的输出格式&#xff0c;支持按时间&#xff0c;按文件大小分割日志文件&#xff0c;支持日志文件压缩备份&#xff0c;支持官方日志库标准API&#xff0c;支持mod独立参数…...

长安链java-sdk打成jar包部署找不到配置文件,springBoot项目制作Docker镜像

长安链使用sdk_config.yml的形式来引入用户的各种证书文件&#xff0c; 但是打成jar包部署在服务器上会提示找不到文件。 由于国内对镜像的限制&#xff0c;我选用了阿里的龙蜥镜像&#xff0c;里面提供java1.8的环境&#xff0c;因为长安链要1.8的环境 docker pull anolis-…...

AI问答:理解软件开发中的几个概念 / 软件逆向、加密、加固、脱壳、反编译

一、软件逆向 定义软件逆向工程是指从程序系统出发&#xff0c;通过运用解密、反汇编、系统分析、程序理解等多种计算机网络安全技术&#xff0c;对软件的结构、流程、算法、代码等进行逆向的拆解分析&#xff0c;从而推出软件产品的源代码、设计原理、结构、算法、处理过程、…...

第十一届MathorCup高校数学建模挑战赛-C题:基于有限差分法的散热机理建模与海底数据中心优化设计

目录 摘 要 1 问题重述 1.1 问题背景 1.2 问题重述 2 问题分析 3 模型假设 4 符号说明 5 我们的工作 6 模型的建立与求解 6.1 建模前的准备 6.2 问题一的建模与求解 6.3 问题二的建模与求解 6.4 问题三的建模与求解 6.5 问题四的建模与解决 7 结果检验及误差分析 8 模型评价 9 …...

【java】常量

文章目录 什么是常量常量分类 什么是常量 程序运行过程当中&#xff0c;其值不可以发生改变的量。 常量分类 常量类型说明举例字符串常年用双引号括起来的内容“Hello World !” “我是一个常量”整数常量不带小数点的数字666 -888小数常量带小数的数字3.14、-3.19字符常量用…...

react如何使用useContext + TS 自定义hooks

为了在 TypeScript 中为 useContext 提供良好的类型提示&#xff0c;我们需要为 Context 定义类型&#xff0c;并确保在创建和使用 Context 时应用这些类型。这可以帮助我们获得更好的类型检查和智能提示。 示例&#xff1a;在用户认证示例中添加 TypeScript 类型 定义类型 …...

【网络安全学习】SQL注入03:如何防止SQL注入

防止SQL注入&#xff0c;就必须清楚&#xff1a;数据库只负责执行SQL语句&#xff0c;根据SQL语句来返回相关数据。数据库并没有什么好的办法直接过滤SQL注入&#xff0c;哪怕是存储过程也不例外。 那么防止SQL注入就得从代码层面进行入手。 1. 严格的数据类型 Java、C#等强…...

linux利用crontab捕获iotop

1.iotop介绍 iotop-简单的类似TOP 命令的I/O监视器 使用&#xff1a;iotop[选项] 描述&#xff1a;iotop监视Linux内核输出的I/O使用信息&#xff08;需要2.6.20或更高版本&#xff09;&#xff0c;并显示系统上进程或线程的当前I/O使用情况表。至少需要在您的Linux内核构建…...

android13 关闭selinux 临时关闭或者永久关闭

总纲 android13 rom 开发总纲说明 目录 1.前言 2.情况分析 2.1 临时关闭 2.2 永久关闭 3.修改方法 3.1 临时修改 3.2 永久关闭 4.编译测试 5.彩蛋 1.前言 在Android操作系统中,SELinux(Security-Enhanced Linux)是一种安全模块,用于提供强制访问控制(MAC)安全…...

JetBrains GoLand单元测试不支持单个单元测试case执行

譬如函数代码 func AddInt(a, b int32) int32 {return a b } 单元测试代码&#xff1a; func TestAddInt(t *testing.T) {type args struct {a int32b int32}tests : []struct {name stringargs argswant int32}{{name: "add",args: args{a: 1, b: 2},want: 3},{n…...

基于STM32设计的盆栽种植自动管理系统(微信小程序)(201)

文章目录 一、前言1.1 项目介绍【1】项目功能介绍【2】设计实现的功能【3】项目硬件模块组成1.2 设计思路【1】整体设计思路【2】ESP8266工作模式配置1.3 项目开发背景【1】选题的意义【2】可行性分析【3】参考文献1.4 开发工具的选择【1】设备端开发【2】上位机开发1.5 系统框…...

白骑士的PyCharm教学实战项目篇 4.1 Web应用开发

系列目录 上一篇&#xff1a;白骑士的PyCharm教学高级篇 3.5 团队协作与集成开发​​​​​​​ 在现代开发环境中&#xff0c;Web应用已经成为开发者们不可或缺的一部分。利用PyCharm强大的功能&#xff0c;开发Web应用变得更加高效和直观。本文将详细介绍如何基于PyCharm进行…...

Linux与Docker常用运维命令一览

大家好&#xff0c;欢迎各位工友。 在博主陆陆续续的运维过程中&#xff0c;经常会用到许多运维相关的命令&#xff0c;以往都是现用现查&#xff0c;如今抽时间都记录一下&#xff0c;便于查阅和使用。 Linux常用命令 文件和目录操作 ls&#xff1a;列出目录内容cd [direc…...

怎样在 SQL 中创建视图(VIEW),以及视图的作用和优势是什么?

在 SQL 中创建视图&#xff08;VIEW&#xff09;可以使用 CREATE VIEW 语句。语法如下&#xff1a; CREATE VIEW view_name AS SELECT column1, column2, … FROM table_name WHERE condition; 视图是一个虚拟的表&#xff0c;它由一个查询结果集定义。与实际的表不同&#x…...

Tomcat 使用和配置文件(详解)

一.tomcat 介绍 1. tomcat 概述 自从JSP发布之后&#xff0c;推出了各式各样的JSP引擎。Apache Group在完成GNUJSP1.0的开发以后&#xff0c;开始考虑在SUN的JSWDK基础上开发一个可以直接提供Web服务的JSP服务器&#xff0c;当然同时也支持 Servlet&#xff0c;这样Tomcat就诞…...

html+css+js+jquery实现一个 飘零的树叶

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>飘落的枫叶</title><style>.maple {position: absolute;top: 0;color: #ff0000;}</style><script src"https://www.jq22.com…...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接&#xff1a;3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引&#xff0c;可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度&#xff08;创建索引的主要原因&#xff09;。3. 可以加速表和表之间的连接&#xff0c;实现数据的参考完整性。4. 可以在查询过程中&#xff0c;…...

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

如何在最短时间内提升打ctf(web)的水平?

刚刚刷完2遍 bugku 的 web 题&#xff0c;前来答题。 每个人对刷题理解是不同&#xff0c;有的人是看了writeup就等于刷了&#xff0c;有的人是收藏了writeup就等于刷了&#xff0c;有的人是跟着writeup做了一遍就等于刷了&#xff0c;还有的人是独立思考做了一遍就等于刷了。…...

短视频矩阵系统文案创作功能开发实践,定制化开发

在短视频行业迅猛发展的当下&#xff0c;企业和个人创作者为了扩大影响力、提升传播效果&#xff0c;纷纷采用短视频矩阵运营策略&#xff0c;同时管理多个平台、多个账号的内容发布。然而&#xff0c;频繁的文案创作需求让运营者疲于应对&#xff0c;如何高效产出高质量文案成…...

uniapp手机号一键登录保姆级教程(包含前端和后端)

目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号&#xff08;第三种&#xff09;后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...

搭建DNS域名解析服务器(正向解析资源文件)

正向解析资源文件 1&#xff09;准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2&#xff09;服务端安装软件&#xff1a;bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...

Caliper 负载(Workload)详细解析

Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...