单向链表的数据存储(申请堆空间)

 函数功能:

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

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

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

相关文章

Win11系统vscode配置C语言环境

安装Visual Studio Code&#xff1a; 如果你还没有安装VSCode&#xff0c;请从官方网站下载并安装&#xff1a;https://code.visualstudio.com/ 安装C/C扩展&#xff1a; 打开VSCode&#xff0c;进入扩展视图&#xff08;点击侧边栏的扩展图标或使用快捷键CtrlShiftX&#xff…

基于AWS Billing Conductor自定义账单计算进行【linker账单】RI/SP还原以及账单菜单栏选择性精细化限制策略设置

文章目录 一、客户需求需求① 设置策略屏蔽billing菜单选项查看需求② 账单RI和SP还原及SP和RI的共享 二、AWS Billing Conductor介绍三、IAM 精细操作映射参考四、详细步骤操作演示4.1 AWS Organization策略设置4.2 账单和成本管理设置4.3 AWS Billing Conductor设置4.3.1 创建…

allWebPlugin中间件实现ActiveX插件在谷歌、火狐、Edge浏览器使用

下载并安装allWebPlugin中间件 1、请从下面地址下载allWebPlugin中间件产品&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1xUyQDzOabh7mU7J7TYhtig?pwdz3q0 提取码&#xff1a;z3q0 如下图所示&#xff0c;下载最新allWebPlugin_x86_v2.0.0.14_stable_20240707…

Redis 管道技术

Redis 管道技术 引言 Redis&#xff0c;作为一个高性能的键值存储系统&#xff0c;被广泛应用于各种场景&#xff0c;如缓存、消息队列等。为了进一步提高Redis的处理能力和效率&#xff0c;Redis管道技术应运而生。本文将深入探讨Redis管道技术的原理、应用及其优势。 什么…

LiveNVR监控流媒体Onvif/RTSP用户手册-录像计划:批量配置、单个配置、录像保存(天)、配置时间段录像

TOC 1、录像计划 支持单个通道 或是 通道范围内配置支持快速滑选支持录像时间段配置 1.1、录像存储位置如何配置&#xff1f; 2、RTSP/HLS/FLV/RTMP拉流Onvif流媒体服务 支持 Windows Linux 及其它CPU架构&#xff08;国产、嵌入式…&#xff09;操作系统安装包下载 、 安装…

【文件格式转换】Python转换 pdf 到 word (docx)

要使用 Python 将 PDF 转换为 Word 文档&#xff0c;可以使用库pdf2docx。操作方法如下&#xff1a; 安装必要的库&#xff1a; pip install pdf2docx使用以下 Python 代码将 PDF 文件转换为 Word 文档&#xff1a; from pdf2docx import Converterdef pdf_to_word(pdf_file…

调度pass的定制

概述 作为调度pass实现类&#xff0c;MachineScheduler 和 PostMachineScheduler 的优点之一是允许开发者在LLVM 已有调度算法和策略基础上做不同的定制化 PostMachineScheduler 类的定制相对简单&#xff0c;主要是MachineSchedStrategy 接口的定制。 MachineScheduler 类的…

【算法】Dijkstra算法

戴克斯特拉算法(Dijkstras Algorithm),由荷兰杰出计算机科学家艾兹赫尔戴克斯特拉设计,是解决非负权有向图中单源最短路径问题的经典算法。它构建了一个逐步扩展的最短路径树,从指定的源点出发,逐步探索并确定到图中所有其他顶点的最短路径。这一算法在网络路由选择、地理…

C语言旋转动画

目录 开头程序程序的流程图C语言旋转动画(程序的效果)结尾 开头 大家好&#xff0c;我叫这是我58。在这里&#xff0c;我们要来看我用C语言编译成的可以顺时针或者逆时针旋转的动画相关的一些东西和那个动画的顺时针与逆时针的版本。 程序 #define _CRT_SECURE_NO_WARNINGS …

Hospital Management System v4.0 SQL 注入漏洞(CVE-2022-24263)

前言 CVE-2022-24263 是一个影响 Hospital Management System (HMS) v4.0 的 SQL 注入漏洞。这个漏洞允许攻击者通过注入恶意 SQL 代码来获取数据库的敏感信息&#xff0c;甚至可能控制整个数据库。以下是对这个漏洞的详细介绍&#xff1a; 漏洞描述 在 Hospital Management…

【MindSpore学习打卡】应用实践-自然语言处理-深入理解LSTM+CRF在序列标注中的应用

在自然语言处理(NLP)领域&#xff0c;序列标注是一项重要的任务。其目标是为给定的输入序列中的每个Token分配一个标签。序列标注的应用范围广泛&#xff0c;包括分词、词性标注、命名实体识别(NER)等。在本文中&#xff0c;我们将探讨如何利用LSTM和CRF模型进行序列标注&#…

无人机之穿越机知识篇

一、定义和类型 穿越机&#xff0c;即FPV Drone或Racing Drone&#xff0c;是一种主要通过第一人称视角&#xff08;FPV&#xff09;进行操作的无人机。这种无人机通常配备有四个电机和相应的飞控系统&#xff0c;使其具有极高的飞行自由度和速度。穿越机主要分为竞速型和花飞…

electron在VSCode和IDEA及webStrom等编辑器控制台打印日志乱码

window10环境下设置 1.打开Windows设置 2.打开时间和语言&#xff0c;选择语言菜单、如何点击管理语言设置 3.打开之后选择管理&#xff0c;选择更改系统区域设置&#xff0c;把Beta版&#xff1a;使用Unicode UTF-8提供全球语言支持 勾上&#xff0c;点击确定&#xff0c;…

C# —— try catch

代码出现错误的两种情况 编译错误: 编译不通过&#xff0c;只要是编译不通过 铁定执行不了&#xff0c;例如出现语法错误(少符号、中英文错误 爆红); 运行时候的错误: 程序在运行的期间出现的逻辑错误&#xff0c;例如(数组越界了 格式转换错误等) 异常代码: 例如除数如…

甄选范文“论区块链技术及应用”,软考高级论文,系统架构设计师论文

论文真题 区块链作为一种分布式记账技术,目前已经被应用到了资产管理、物联网、医疗管理、政务监管等多个领域。从网络层面来讲,区块链是一个对等网络(Peer to Peer, P2P),网络中的节点地位对等,每个节点都保存完整的账本数据,系统的运行不依赖中心化节点,因此避免了中…

Oracle的wrap工具怎么用

Oracle的Wrap工具是一个用于加密PL/SQL代码&#xff08;如存储过程、函数、包等&#xff09;的工具。使用Wrap工具加密后的代码变得难以阅读&#xff0c;但Oracle数据库仍然能够执行这些加密后的代码。以下是Oracle Wrap工具的基本使用方法&#xff1a; 一、准备工作 确认Wra…

什么样的视频才算得上优质视频

首先&#xff0c;让我们谈谈制作优质广告视频的好处。优质广告视频不仅能获得流量激励&#xff0c;还能提升广告竞价的胜率。此外&#xff0c;它们还能在专属流量池中获得更多曝光机会。如果我们的优质素材占比高&#xff0c;还能加快广告的审核速度。听起来&#xff0c;这确实…

MySQL 9.0 新功能概览

官方文档 https://dev.mysql.com/doc/refman/9.0/en/mysql-nutshell.html 时隔 6 年多&#xff0c;上周 Oracle 发布了 MySQL 最新的大版本 9.0。我们一起来看看新版本有哪些东西。 用 JavaScript 写存储过程 半年前已经单独介绍过 「虽迟但到&#xff01;MySQL 可以用 Java…

微软Edge浏览器基本解析

微软Edge浏览器是微软公司开发的一款现代网页浏览器&#xff0c;它是Windows操作系统的默认浏览器&#xff0c;旨在取代旧版的Internet Explorer浏览器。以下是关于微软Edge浏览器的全解析&#xff1a; 一、历史背景 微软Edge浏览器最早于2015年随Windows 10一起发布&#xf…

应用数学与机器学习基础 - 数值计算之线性最小二乘实例篇

序言 线性最小二乘法&#xff0c;作为统计学与数据科学中的基石之一&#xff0c;自其诞生以来便在科学研究、工程技术、经济预测等众多领域展现出了强大的应用价值。这一方法的核心思想在于&#xff0c;通过最小化误差的平方和来寻找数据的最佳函数匹配&#xff0c;即找到一个…