单向链表的数据存储(申请堆空间)
函数功能:
0.排序(逆置和顺序排序) 1.回显 2.头插 3.位插 4.尾插 5.尾删 6.头删
7.位删 8.查找 (按值或按位查找) 9.修改 (按值或按位修改) 10.退出
main.c
#include "link.h"int main()
{link_p H = link_create();if(NULL == H)printf("申请失败");else{int i;do{printf("0.排序\t1.回显\t2.头插\t3.位插\t4.尾插\t5.尾删\n");printf("6.头删\t7.位删\t8.查找\t9.修改\t10.退出\n");printf("请输入指令选项:");scanf("%d", &i);switch(i){case 0: link_short(H);break;case 2: head_add(H);break;case 1: link_show(H);break;case 3: idex_inset(H);break;case 4: tail_add(H);break;case 5: tail_delete(H);break;case 6: head_delete(H);break;case 7: idex_delete(H);break;case 8: idex_find(H);break;case 9: idex_change(H);break;case 10: link_delete(H);printf("已退出\n");break;}}while(10!= i);}
}
link.c
#include "link.h"//create link head
link_p link_create()
{link_p H = (link_p)malloc(sizeof(link));if(NULL == H){printf("失败");return NULL;}H -> len = 0;printf("申请成功\n");return H;
}//创建数据结点
link_p link_node()
{link_p p = (link_p)malloc(sizeof(link));if(NULL == p){printf("失败");return NULL;}printf("请输入数据结点存储的值:");scanf("%d", &p -> data);p -> next = NULL;return p;
}//头插
void head_add(link_p H)
{link_p in = link_node();in -> next = H -> next;H -> next = in;H -> len++;
}//尾插
void tail_add(link_p H)
{//创建结点link_p p = link_node();//将结点链接到尾部link_p q = H;for(int i = 0; i < H -> len; i++)q = q -> next;q -> next = p;H -> len++;
}//位插
void idex_inset(link_p H)
{//输入位置,判断是否能进行插入操作printf("位置:");int num;scanf("%d", &num);if(num < 1 || num > H -> len + 1){printf("插入失败");return;}//找到插入位置的前一个结点link_p q = H;for(int i = 0; i < num - 1; i++)q = q -> next;//创建结点链接到尾部 link_p p = link_node();p -> next = q -> next;q -> next = p;H -> len++;
}//头删
void head_delete(link_p H)
{if(empty(H)){printf("空");return;}link_p p = H -> next;H -> next = p -> next;H -> len--;free(p);p = NULL;}//尾删
void tail_delete(link_p H)
{if(empty(H)){printf("空");return;}link_p q = H;for(int i = 0; i < H -> len - 1; i++)q = q -> next;//找到倒数第二个数据的地址link_p p = q -> next;q -> next = p -> next; H -> len--;free(p);p = NULL;
}//位删
void idex_delete(link_p H)
{printf("位置:");int num;scanf("%d", &num);if(empty(H) || num > H -> len || num < 1){printf("空");return;}link_p q = H;for(int i = 0; i < num - 1; i++)q = q -> next;link_p p = q -> next;q -> next = p -> next;H -> len--;free(p);p = NULL;
}//查找
link_p idex_find(link_p H)
{if(empty(H)){printf("空");return NULL;}printf("1.按位查找\t2.按值查找\n请输入你的选项:");int n;scanf("%d", &n);switch(n){case 1:printf("位置:");scanf("%d", &n);if(n > H -> len || n < 1){printf("空");return NULL;}link_p q = H;for(int i = 0; i < n; i++)q = q -> next;return q;case 2: printf("请输入查找的值");datatype data;scanf("%d", &data);link_p p = H -> next;do{if(p -> data == data){printf("%p\n", p);return p;}p = p -> next;}while(p != NULL);printf("没有你要查找的值\n");}
}//修改
void idex_change(link_p H)
{if(empty(H)){printf("空");return;}printf("1.按位修改\t2.按值修改\n请输入修改选项:");int i;scanf("%d", &i);switch(i){case 1:printf("位置:");int num;scanf("%d", &num);if(empty(H) || num > H -> len || num < 1){printf("空");return;}link_p q = H;for(int i = 0; i < num; i++)q = q -> next;printf("请输入修改后的值:");scanf("%d", &q -> data);link_show(H);break;case 2:if(empty(H)){printf("空");return;}printf("请输入需要修改的值");datatype data;scanf("%d", &data);link_p p = H -> next;for(int i = 0; i < H -> len; i++){if(p -> data == data){printf("请输入修改后的值:");scanf("%d", &p -> data);return;}p = p -> next;}printf("没有你要修改的值");}
}//排序
void link_short(link_p H)
{if(empty(H)){printf("空");return;}printf("1.顺序排序\t2.逆置\n请输入你的选项:");int n, m, i;scanf("%d", &n);link_p q = H -> next;m = H -> len; datatype arr[m];switch(n){case 1:for(int i = 0; i < H -> len - 1; i++){link_p p = q -> next;for(int j = i + 1; j < H -> len; j++){if(q -> data > p -> data)p -> data = q -> data + p -> data - (q -> data = p -> data);p = p -> next;}q = q -> next;}break;case 2:i = 0;n = H -> len; q = H -> next;do{arr[i] = q -> data;i++;q = q -> next;}while(q != NULL);q = H -> next;do{m--;q -> data = arr[m];q = q ->next;}while(q != NULL);}link_show(H);
}//销毁链表
void link_delete(link_p H)
{while(H -> next != NULL)tail_delete(H);
}
//回显数据
void link_show(link_p H)
{if(empty(H)){printf("空");return ;}link_p p = H -> next;printf("————");for(int i = 0; i < H -> len; i++){printf("%d",p -> data);p = p -> next;}printf("————");putchar(10);
}//判空
int empty(link_p H)
{return H == NULL;
}
link.h
#ifndef __LINK_H__
#define __LINK_H__#include <stdio.h>
#include <stdlib.h>
#include <string.h>typedef int datatype;
typedef struct link
{union{datatype data;int len;};struct link *next;
}link, *link_p;//创建头结点和数据节点
link_p link_create();
link_p link_node();//节点功能函数
void head_add(link_p H);
void tail_add(link_p H);
void idex_inset(link_p H);
void head_delete(link_p H);
void tail_delete(link_p H);
void idex_delete(link_p H);
link_p idex_find(link_p H);
void idex_change(link_p H);
void link_delete(link_p H);
void link_short(link_p H);
void link_show(link_p H);
int empty(link_p H);
#endif
相关文章:
单向链表的数据存储(申请堆空间)
函数功能: 0.排序(逆置和顺序排序) 1.回显 2.头插 3.位插 4.尾插 5.尾删 6.头删 7.位删 8.查找 (按值或按位查找) 9.修改 (按值或按位修改) 10.退出 main.c …...
MySQL8之mysql-community-common的作用
在MySQL 8中,mysql-community-common是一个软件包,它提供了MySQL服务器和客户端库所需的一些共同文件。具体来说,mysql-community-common的作用包括但不限于以下几点: 1. 提供基础配置和错误信息 错误信息和字符集包:…...
Emacs有什么优点,用Emacs写程序真的比IDE更方便吗?
Emacs 是一个功能强大的文本编辑器和应用程序框架,它拥有众多的优点,这些优点使得它在某些情况下成为编程的强大工具。然而,是否用 Emacs 写程序比 IDE 更方便,这很大程度上取决于个人的工作习惯和偏好。 Emacs 的主要优点包括&a…...
如何切换手机的ip地址
在数字时代的浪潮中,智能手机已成为我们日常生活中不可或缺的一部分。然而,随着网络安全问题的日益凸显,保护个人隐私和数据安全变得尤为重要。其中,IP地址作为网络身份的重要标识,其安全性与隐私性备受关注。本文将详…...
前端画图引擎ZRender,echarts的渲染器,你知道吗?
Zrender是一个轻量级的Canvas和SVG渲染库,它提供了一个高性能的图形绘制和交互的解决方案,用于在Web页面上创建丰富的数据可视化和交互式图形。 可能大部分小伙伴不知道这个类库,本文给大家科普一下。 一、Zrender是谁? 该项目…...
web前端开发——标签一
今天我来针对web前端开发讲解标签一 Html标签_标题&段落&换行 注释标签:Ctrl/ Ctrl/ ,用户可能会获取到注释标签 注释的原则: •和代码逻辑一致 •尽量使用中文 •正能量 标题标签:<h1></h1> h1-h6 标题标签有6…...
【深度学习】探讨最新的深度学习算法、模型创新以及在图像识别、自然语言处理等领域的应用进展
深度学习作为人工智能领域的重要分支,近年来在算法、模型以及应用领域都取得了显著的进展。以下将探讨最新的深度学习算法与模型创新,以及它们在图像识别、自然语言处理(NLP)等领域的应用进展。 一、深度学习算法与模型创新 新型…...
使用 mongo2neo4j 和 SemSpect 通过各种方式进行图探索
用于可视化和探索每个 MEAN 堆栈背后的数据图的 ETL 您是否正在努力回答有关 MEANS Web 服务数据的紧急问题?哪里有 BI 可以快速回答“上个季度哪些亚洲的artisan.plus 用户触发了订单?”这个问题,而无需编写查询?使用 mongo2neo4…...
淘宝卖家难免遇到的商品问题 在淘宝买的东西出问题了,该如何维权
很多朋友对于淘宝卖家难免遇到的商品问题和在淘宝买的东西出问题了,该如何维权不太懂,今天就由小编来为大家分享,希望可以帮助到大家,下面一起来看看吧! [1] 淘宝买东西,过了售后期,有质量问题怎…...
ffmpeg 安装 h264(x264)encoder
#下载并安装x264 # 切换root用户 sudo -i # 输入密码cd ~ mkdir FFmpeg7#下载并安装x264 git clone https://code.videolan.org/videolan/x264.git cd x264 mkdir build./configure --help # 报缺少asm 时 可加入--disable-asm # --prefix/home/llh/ffmpeg/build/ 指定安装目录…...
Java项目:基于SSM框架实现的健康综合咨询问诊平台【ssm+B/S架构+源码+数据库+毕业论文】
一、项目简介 本项目是一套基于SSM框架实现的健康综合咨询问诊平台 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试,eclipse或者idea 确保可以运行! 该系统功能完善、界面美观、操作简单、…...
SpringBoot源码阅读(4)——事件
从监听器到事件 SpringApplication运行中触发事件,多播器发送事件到监听器,监听器处理事件。 SpingApplication中事件都是经过SpringApplicationRunListeners类传送到各个监听器。 以starting事件为例 void starting(ConfigurableBootstrapContext boo…...
EDI安全:如何在2024年保护您的数据免受安全和隐私威胁
电子数据交换(EDI)支持使用标准化格式在组织之间自动交换业务文档。这种数字化转型彻底改变了业务通信,消除了对纸质交易的需求并加速了交易。然而,随着越来越依赖 EDI 来传输发票、采购订单和发货通知等敏感数据,EDI …...
RabbitMQ快速入门 - 图像化界面的简单操作
目录 1、RabbitMQ的安装 2、RabbitMQ基本介绍 3、简单案例 4、数据隔离 1、RabbitMQ的安装 官网链接:rabbitmq官网 (官网很详细,也可以在官网学习啦~) 基础入门:自主学习:最新版本:安装我…...
新版亚组交互效应函数(P for interaction)newscitb5 1.3版本发布--用于一键生成交互效应表
在SCI文章中,交互效应表格(通常是表五)能为文章锦上添花,增加文章的信服力,增加结果的可信程度,还能进行数据挖掘。什么是亚组,通常就是特殊类型人群,比如男女,种族等&am…...
gpt讲 Observable 对象
什么是 Observable? Observable 是一种用于处理异步数据流的数据类型。它可以发出多个值,这些值可以是同步或者异步产生的,并且可以在时间上发生变化。在 Angular 中,HttpClient 返回的响应对象、事件流以及许多其他异步任务都可…...
STM32的SPI接口详解
目录 1.SPI简介 2.SPI工作原理 3.SPI时序 3.1 CPOL(Clock Polarity,时钟极性): 3.2 CPHA(Clock Phase,时钟相位): 3.3 四种工作模式 4.相关代码 4.1使能片选信号 4.2使能通…...
谷歌+火狐浏览器——实现生成二维码并实现拖动——js技能提升
最新遇到的问题:前两个二维码拖动不了,只有第三个一维码生成后,才可以拖拽 【问题】:出现在都是绝对定位,但是没有指定z-index导致的。 解决办法:在方法中添加一个变量 renderDrag(id) {var isDragging f…...
128陷阱详解(从源码分析)
1、128陷阱描述 Integer 整型 -128~127 超过这个范围,比较会不准确 例子 public static void main(String[] args) {Integer a128;Integer b128;Integer e127;Integer f127;System.out.println(ab); //输出falseSystem.out.println(a.equals(b)); //输出trueS…...
点云处理实操 基于多项式重构的平滑和法线估计
目录 基于多项式重构的平滑和法线估计 一、什么是移动最小二乘法(Moving Least Squares, MLS) 二、算法原理 三、算法应用 四、PCL代码实践 基于多项式重构的平滑和法线估计 原文地址:Smoothing and normal estimation based on polynomial reconstruction — Point Cl…...
Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...
C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...
站群服务器的应用场景都有哪些?
站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...
LRU 缓存机制详解与实现(Java版) + 力扣解决
📌 LRU 缓存机制详解与实现(Java版) 一、📖 问题背景 在日常开发中,我们经常会使用 缓存(Cache) 来提升性能。但由于内存有限,缓存不可能无限增长,于是需要策略决定&am…...
人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent
安全大模型训练计划:基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标:为安全大模型创建高质量、去偏、符合伦理的训练数据集,涵盖安全相关任务(如有害内容检测、隐私保护、道德推理等)。 1.1 数据收集 描…...
面试高频问题
文章目录 🚀 消息队列核心技术揭秘:从入门到秒杀面试官1️⃣ Kafka为何能"吞云吐雾"?性能背后的秘密1.1 顺序写入与零拷贝:性能的双引擎1.2 分区并行:数据的"八车道高速公路"1.3 页缓存与批量处理…...
Canal环境搭建并实现和ES数据同步
作者:田超凡 日期:2025年6月7日 Canal安装,启动端口11111、8082: 安装canal-deployer服务端: https://github.com/alibaba/canal/releases/1.1.7/canal.deployer-1.1.7.tar.gz cd /opt/homebrew/etc mkdir canal…...
