数据结构--单链

news2024/12/27 12:57:49

#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;
}

    

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

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

相关文章

AI动漫生成工具,文生图转换图生视频功能,低成本使用AI工具做项目。AI工具搭建开发。

目录 前言&#xff1a; 一、AI文生动漫有哪些功能&#xff1f; 二、如何低价使用AI工具&#xff1f; 三、AI工具适合现在做哪些互联网项目&#xff1f; 总结&#xff1a; 前言&#xff1a; AI动漫原理就是通过文字描述来生成图片&#xff0c;然后对文本配上语音和音乐生成…

[极客大挑战 2019]FinalSQL1

打开题目 sql注入&#xff0c;点击1试一下 点击2试一下 点击3试一下 点击4 点击5 id6试一下 感觉是sql盲注了 编写脚本 import requests import string from time import sleep url "http://9da9cb18-3096-413a-9476-8a177ffec31a.node4.buuoj.cn:81/search.php?id0^(…

陶瓷材质的防静电架空地板越来越受欢迎的原因

目前市面上的陶瓷防静电架空地板主要分为两种&#xff1a;钢基和硫酸钙基。前者是以全钢冲孔裸板作为板基&#xff0c;经粘接、固定整型和灌浆的方式加工而成&#xff0c;后者是以复合硫酸钙板为基材&#xff0c;表面粘接防静电陶瓷砖&#xff0c;四周导电PVC边条封边。近年来陶…

【网络】套接字socket编程预备知识

1.源IP地址和目的IP 计算机网络中的源地址和目的地址是用来标识网络中的不同主机的。 源地址是指发送数据包的主机的地址&#xff0c;而目的地址则是指接收数据包的主机的地址&#xff0c;在数据包传输过程中&#xff0c;每经过一个路中器感交换机&#xff0c;都会根据目的地址…

乒乓球AI机器人赢了人类!正反手灵活转换,擦网球高球都能接,专业教练:达到中级选手水平

巴黎奥运会乒乓球团体赛如火如荼&#xff0c;谷歌机器人申请出战—— 首个达到人类竞技水平的机器人Agent发布&#xff01; 你看一个没留神&#xff0c;就赢了专业教练一个球&#xff01; 正反手快速转换&#xff0c;连续进攻也是不在话下~ 面对一些突发战术&#xff0c;比如…

在线办公小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;通知公告管理&#xff0c;员工管理&#xff0c;部门信息管理&#xff0c;职位信息管理&#xff0c;会议记录管理&#xff0c;待办事项管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首…

Swagger的介绍与使用(二)

一. 介绍( Spring Boot JDK 17 Swagger 3&#xff08;OpenAPI&#xff09;结合使用) 根据2024年当前环境来看&#xff0c; Spring Boot JDK 17 Swagger 3&#xff08;OpenAPI&#xff09;结合使用更加有趋势 将Spring Boot、JDK 17和Swagger 3&#xff08;OpenAPI&#xff…

xxl-job适配达梦数据库

参考资料&#xff1a; 【达梦数据库】从 Mysql 迁移到 DM8_从 mysql 移植到 dm Xxl-job适配达梦数据库 Xxl-job适配达梦数据库 按照这篇文章修改所有Mapper.xml文件&#xff0c;但是运行会报错。 按照下面的文章修改 XxlJobLogMapper.xml 如何将 XxlJob 集成达梦数据库_xx…

矩阵转置(c语言)

1.KiKi有一个矩阵&#xff0c;他想知道转置后的矩阵&#xff08;将矩阵的行列互换得到的新矩阵称为转置矩阵&#xff09;&#xff0c;请编程帮他解答。 //输入描述&#xff1a; //第一行包含两个整数n和m&#xff0c;表示一个矩阵包含n行m列&#xff0c;用空格分隔。(1≤n≤10…

SQLite 数据库安装及使用(Linux)

目录 引言 SQLite 的特点 SQLite 的应用场景 SQLite数据库的安装 方法一&#xff1a;使用包管理器安装 方法二&#xff1a; 从源码编码安装 SQLite数据库的基础命令 1.系统命令 2.SQL命令 sqlite编程接口 引言 SQLite 是一种轻量级的数据库管理系统&#xff0c;它不…

uniapp项目-购物商城【无接口,下载改appid即可使用】

&#x1f939;‍♀️潜意识起点&#xff1a;个人主页 &#x1f399;座右铭&#xff1a;得之坦然&#xff0c;失之淡然。 &#x1f48e;擅长领域&#xff1a;大前端 是的&#xff0c;我需要您的&#xff1a; &#x1f9e1;点赞❤️关注&#x1f499;收藏&#x1f49b; 是我…

零样本学习——从多语言语料库数据中对未学习语言进行语音识别的创新技术

引言 在全球众多的语言中&#xff0c;只有极少数的语言在语音识别领域取得了显著的进展。这种不平衡现象的主要原因是&#xff0c;现有的语音识别模型往往依赖于大量的标注语音数据&#xff0c;而这些数据对于许多语言来说难以获得。 近年来&#xff0c;尽管语音识别技术取得…

6.3 第三方库的安装与使用

欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;欢迎订阅相关专栏&#xff1a; 工&#x1f497;重&#x1f497;hao&#x1f497;&#xff1a;野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典&#xff1a;收集整理全网各大IT互联网公司技术、项目、HR面试真题.…

英镑与日元:货币市场的双重挑战

一、英镑的波动与策略 近期&#xff0c;英镑兑所有主要货币出现大幅下挫&#xff0c;尤其是在7月&#xff0c;英镑成为投机市场最大的净多头仓位。然而&#xff0c;上周英镑抹去了第二季的大部分涨幅&#xff0c;主要受到英国央行对利率前景的鸽派重新定价的影响&#xff0c;以…

【生信入门】预览快速体验Linux-重生之小明闯Linux

生信少走弯路,快试试生信云专用服务器。新用户注册免费体验5小时。https://www.tebteb.cc 一.故事 小明的Linux冒险 在一片混沌的黑暗中&#xff0c;小明睁开了眼睛。他感到头痛欲裂&#xff0c;四周一片漆黑&#xff0c;只有一行闪烁的字符映入眼帘&#xff1a; [xiaomingu…

如何实现Redis和Mysql中数据双写一致性

在我们的实际开发中&#xff0c;我们用到了redis缓存一些常用的数据&#xff08;如热点数据&#xff09;用来提高系统的吞吐量。 但是不可以避免的出现了数据的修改场景&#xff0c;这就导致了数据库中的数据和Redis中出现不一致性的情况。如何保证数据一致性就显得非常重要了&…

H3C智能管理中心byod/index.xhtml接口存在远程命令执行漏洞

@[toc] H3C智能管理中心byod/index.xhtml接口存在远程命令执行漏洞 免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该文章仅供学…

C++基础编程的学习3

nullptr关键字 在C11之前&#xff0c;空指针通常用NULL或0表示。然而&#xff0c;这些表示方法存在类型安全问题。C11引入了nullptr关键字&#xff0c;它提供了一个明确的、类型安全的空指针值。 Lambda表达式 Lambda表达式是C11引入的一种便捷的匿名函数定义方式。当Lambda…

海量数据处理商用短链接生成器平台 - 12

第三十五章 微信支付Native订单API测试实战和签名流程解读 第1集 微信支付-快速验证参数配置方法和统一下单接口开发 简介&#xff1a;微信支付-快速验证参数配置方法和统一下单接口开发 接口文档 https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_4_1.shtml 编码实…

03_Electron 主进程和渲染进程、点击(拖放)打开文件功能

Electron 主进程和渲染进程 一、Electron 主进程和渲染进程二、Electron 主进程和渲染进程中使用 Nodejs 以及 Nodejs 第三方模块2.1、主进程中使用 Nodejs 模块2.2、渲染进程中 使用 Nodejs 模块2.3、BrowserWindow 中通过 preload加载的js 文件可以直接使用nodejs 模块2.4、渲…