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

【C语言】 作业11 链表+实现函数封装

 递归实现链表数据互换,纯不会,明天再说


1、链表实现以下功能

链表,创建链表,申请节点,判空,头插,遍历输出,通过位置查找节点,任意位置插入,头删,任意位置删除,安置查找返回位置,按位置进行修改,按值进行修改,翻转链表,释放链表,链表的排序,反转链表(递归实现)

//link_list.h
#ifndef LINK_LIST_H
#define LINK_LIST_H
#include <myhead.h>typedef int datatype;typedef struct Node
{union{int len;datatype data;};struct Node *next;
}Node,*NodePtr;//创建链表
NodePtr list_create();//申请结点封装数据的函数
NodePtr apply_node(datatype e);//链表判空
int list_empty(NodePtr L);//头插
int list_insert_head(NodePtr L,datatype e);//链表遍历函数
int list_show(NodePtr L);//通过位置查找结点
NodePtr list_search_pos(NodePtr L,int pos);//任意位置插入
int list_insert_pos(NodePtr L,int pos,datatype e);//链表头删
int list_delete_head(NodePtr L);//链表任意位置删除
int list_delete_pos(NodePtr L,int pos);//链表按值查找返回位置
int list_search_retval(NodePtr L,datatype e);//链表按位置进行修改
int list_updata_pos(NodePtr L,int pos,datatype e);//按值进行修改
int list_updata_data(NodePtr L,datatype old_e,datatype new_e);//将链表进行翻转
int list_reserve(NodePtr L);//释放链表
void list_destroy(NodePtr L);//链表的排序
int list_sort(NodePtr L);//链表的翻转(递归函数实现)
NodePtr list_reserve1(NodePtr L);#endif

//link_list.c
#include "link_list.h"//创建链表
NodePtr list_create()
{NodePtr L = (NodePtr)malloc(sizeof(Node));if(NULL == L){printf("链表创建失败\n");return NULL;}L->len = 0;L->next = NULL;printf("链表创建成功\n");return L;
}//申请结点封装数据的函数
NodePtr apply_node(datatype e)
{NodePtr p = (NodePtr)malloc(sizeof(Node));if(NULL == p){printf("创建结点失败\n");return NULL;}p->data = e;p->next = NULL;return p;}//链表判空
int list_empty(NodePtr L)
{return L->next == NULL;
}//头插
int list_insert_head(NodePtr L,datatype e)
{if(NULL == L){printf("头插失败\n");}NodePtr p = apply_node(e);p->next = L->next;L->next = p;L->len++;printf("头插成功\n");return 0;
}//链表遍历函数
int list_show(NodePtr L)
{if(NULL == L || list_empty(L)){printf("遍历失败\n");return -1;}printf("链表中的元素是:");NodePtr q = L->next;while(q){printf("%d->",q->data);q = q->next;}printf("NULL\n");
}//通过位置查找结点
NodePtr list_search_pos(NodePtr L,int pos)
{if(NULL == L || list_empty(L) || pos < 0 || pos > L->len){printf("查找失败\n");return NULL;}NodePtr q = L;for(int i = 0;i < pos;i++){q = q->next;}return q;
}//任意位置插入
int list_insert_pos(NodePtr L,int pos,datatype e)
{if(NULL == L || pos < 1 || pos > L->len+1){printf("插入失败\n");return -1;}NodePtr p = apply_node(e);if(p == NULL){return -1;}NodePtr q = list_search_pos(L,pos-1);p->next = q->next;q->next = p;L->len++;printf("插入成功\n");return 0;
}//链表头删
int list_delete_head(NodePtr L)
{if(NULL == L || list_empty(L)){printf("头删失败\n");return -1;}NodePtr q = L->next;L->next = q->next;free(q);q = NULL;L->len--;return 0;
}//链表任意位置删除
int list_delete_pos(NodePtr L,int pos)
{if(NULL == L || list_empty(L) || pos < 1 || pos > L->len){printf("删除失败\n");return -1;}NodePtr q = list_search_pos(L,pos-1);NodePtr p = q->next;q->next = p->next;free(p);p = NULL;L->len--;printf("成功删除第%d个元素\n",pos);return 0;
}//链表按值查找返回位置
int list_search_retval(NodePtr L,datatype e)
{if(NULL == L || list_empty(L)){printf("查找失败\n");return -1;}NodePtr q = L->next;for(int i = 1;i <= L->len;i++){if(q->data == e){return i;}q = q->next;}printf("没有找到该元素\n");return -1;
}//链表按位置进行修改
int list_updata_pos(NodePtr L,int pos,datatype e)
{if(NULL == L || list_empty(L) || pos < 1 || pos > L->len){printf("修改失败\n");return -1;}NodePtr q = list_search_pos(L,pos);q->data = e;printf("按位置修改成功\n");return 0;
}//按值进行修改
int list_updata_data(NodePtr L,datatype old_e,datatype new_e)
{if(NULL == L || list_empty(L)){printf("修改失败\n");return -1;}NodePtr q = L->next;while(q){if(q->data == old_e){q->data = new_e;return 0;}q = q->next;}printf("没有该元素\n");return -1;
}//将链表进行翻转
int list_reserve(NodePtr L)
{if(NULL == L || list_empty(L) || L->len == 1){printf("翻转失败\n");return 0;}NodePtr H = L->next;L->next = NULL;while(H){NodePtr q = H;H = H->next;q->next = L->next;L->next = q;}printf("翻转成功\n");return 0;
}//释放链表
void list_destroy(NodePtr L)
{if(NULL == L){return ;}while(!list_empty(L)){list_delete_head(L);}free(L);L = NULL;printf("释放链表成功\n");
}//链表的排序
int list_sort(NodePtr L)
{if(NULL == L || list_empty(L) || L->len ==1){printf("排序失败\n");return -1;}for (int i = 1; i < L->len; i++) {NodePtr p = L->next;for (int j = 0; j < L->len - i; j++) {if (p->data > p->next->data){int temp = p->data;p->data = p->next->data;p->next->data = temp;}p = p->next;}}	printf("排序成功\n");return 0;
}//链表的翻转(递归函数实现)
NodePtr list_reserve1(NodePtr L)
{if(NULL == L || L->len == 1){printf("翻转失败\n");return L;}NodePtr q = list_reserve1(L->next);L->next->next = L;L->next = NULL;return q;
}
//main.c
#include "link_list.h"int main(int argc, 	const char *argv[])
{NodePtr L = list_create();int retem = list_empty(L);list_insert_head(L,520);list_insert_head(L,1314);list_insert_head(L,123);list_insert_head(L,456);list_insert_head(L,789);list_show(L);list_insert_pos(L,2,200);list_show(L);list_delete_head(L);list_show(L);list_delete_pos(L,3);list_show(L);int retval = list_search_retval(L,200);if(retval != -1){printf("该元素在第%d个位置\n",retval);}retval = list_search_retval(L,232);list_updata_pos(L,3,520);list_show(L);list_updata_data(L,456,997);list_show(L);list_reserve(L);list_show(L);list_sort(L);list_show(L);NodePtr retPtr = list_reserve1(L);list_show(retPtr);list_destroy(L);L = NULL;list_show(L);return 0;
}

输出结果如下:

相关文章:

【C语言】 作业11 链表+实现函数封装

递归实现链表数据互换&#xff0c;纯不会&#xff0c;明天再说 1、链表实现以下功能 链表&#xff0c;创建链表&#xff0c;申请节点&#xff0c;判空&#xff0c;头插&#xff0c;遍历输出&#xff0c;通过位置查找节点&#xff0c;任意位置插入&#xff0c;头删&#xff0c;…...

【Ubuntu】Ubuntu20修改MAC地址

文章目录 一、临时修改MAC地址&#xff08;重启后复原&#xff09;二、永久修改MAC地址 场景&#xff1a;在做虚拟机复制时&#xff0c;复制完的两台虚拟机存在相同MAC&#xff0c;导致无法分别分配IP。 解决&#xff1a;修改一台虚拟机的MAC地址。 一、临时修改MAC地址&#…...

ClickHouse集成LDAP实现简单的用户认证

1.这里我的ldap安装的是docker版的 docker安装的化就yum就好了 sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin sudo systemctl start docker 使用下面的命令验证sudo docker run hello-world docker pull osixia/openl…...

C语言-预处理详解

1.预处理符号 C语言中设置了一些预定义符号&#xff0c;可以直接使用&#xff0c;预定义符号是在预处理期间处理的。 __FILE__//代表当前进行编译的源文件 __LINE__//文件当前行号 __DATE__//文件当前日期 __TIME__//文件当前时间 __STDC__//如果编译器遵循ANSIC&#xff0c;…...

计算机网络-VLAN间通信(三层通信)模拟实现

目录 VLAN基础知识VLAN和普通LAN区别划分VLAN的原因 实现VLAN间的通信&#xff08;三层通信&#xff09;方案一&#xff1a;多臂路由方案二&#xff1a;单臂路由方案三&#xff1a;三层交换机 VLAN基础知识 VLAN&#xff08;Virtual Local Area Network&#xff0c;虚拟局域网…...

【JAVA】数据类型及变量

&#x1f389;欢迎大家收看&#xff0c;请多多支持&#x1f339; &#x1f970;关注小哇&#xff0c;和我一起成长&#x1f680;个人主页&#x1f680; Java的数据类型 可以分为两类&#xff0c;基本数据类型和引用数据类型 基本数据类型有4类8种&#xff0c;4类分别是整型 浮…...

微软蓝屏事件暴露的网络安全问题

目录 1.概述 2.软件更新流程中的风险管理和质量控制机制 2.1.测试流程 2.2.风险管理策略 2.3.质量控制措施 2.4.小结 3.预防类似大规模故障的最佳方案或应急响应对策 3.1. 设计冗余系统 3.2. 实施灾难恢复计划 3.3. 建立高可用架构 3.4. 类似规模的紧急故障下的响应…...

11 - FFmpeg - 编码 AAC

Planar 模式是 ffmpeg内部存储模式&#xff0c;我们实际使用的音频文件都是Packed模式的。 FFmpeq解码不同格式的音频输出的音频采样格式不是一样。 其中AAC解码输出的数据为浮点型的 AV_SAMPLE_FMT_FLTP 格式&#xff0c;MP3 解码输出的数据为 AV_SAMPLE_FMT_S16P 格式(使用的…...

OS Copilot初体验的感受与心得

本文介绍体验操作系统智能助手OS Copilot后&#xff0c;个人的一些收获、体验等。 最近&#xff0c;抽空体验了阿里云的操作系统智能助手OS Copilot&#xff0c;在这里记录一下心得与收获。总体观之&#xff0c;从个人角度来说&#xff0c;感觉这个OS Copilot确实抓住了不少开发…...

Ajax学习笔记

文章目录标题 Ajax学习笔记axios使用axios请求拦截器axios响应拦截器优化axios响应结果 form-serialize插件图片上传HTTP协议请求报文相应报文接口文档 AJAX原理 - XMLHttpRequest使用XMLHttpRequestXMLHttpRequest - 查询参数查询字符串对象 XMLHttpRequest - 数据提交 事件循…...

医学深度学习与机器学习融合的随想

医学深度学习与机器学习融合的随想 近年来&#xff0c;深度学习&#xff08;图像类&#xff09;和机器学习在医学领域的应用取得了飞速发展&#xff0c;为医学影像分析、疾病诊断和预后预测等领域带来了革命性的变革。深度学习擅长从复杂数据中提取高层次特征&#xff0c;而机…...

坑人的macos tar 命令 (实际上是bsdtar)换用 gnu tar

周末 看着笔记本上好用的朗文当代高级词典(mac版)和其它两部词典&#xff0c;准备复制到黑苹果台式机上去。考虑到词典内容有太多小文件&#xff0c;普通复制传输太慢&#xff0c;毫无疑问用 tar 打包肯定快而且能保留原始文件的各种信息。命令如下&#xff1a; time tar czf …...

【SpringBoot3】全局异常处理

【SpringBoot3】全局异常处理 一、全局异常处理器step1&#xff1a;创建收入数字的页面step2:创建控制器&#xff0c;计算两个整数相除step3:创建自定义异常处理器step5&#xff1a;创建给用提示的页面step6&#xff1a;测试输入&#xff08;10/0&#xff09; 二、BeanValidato…...

vue-Treeselect

一、Node KeyTypeDescriptionid (required)Number | String用于标识树中的选项。其值在所有选项中必须是唯一的label (required)String用于显示选项childrennode[] | null声明一个分支节点。你可以&#xff1a; 1&#xff09; 设置为由a组成的子选项数组。叶节点&#xff0c;b…...

【机器学习框架TensorFlow和PyTorch】基本使用指南

机器学习框架TensorFlow和PyTorch&#xff1a;基本使用指南 目录 引言TensorFlow概述 TensorFlow简介TensorFlow的基本使用 PyTorch概述 PyTorch简介PyTorch的基本使用 TensorFlow和PyTorch的对比结论 引言 随着深度学习的快速发展&#xff0c;机器学习框架在实际应用中起到…...

matlab 中的methods(Access = protected) 是什么意思

gpt版本 在 MATLAB 中&#xff0c;methods 是用于定义类方法的一部分。(Access protected) 是一种访问控制修饰符&#xff0c;它限制了方法的访问权限。具体来说&#xff0c;当你在类定义中使用 methods(Access protected) 时&#xff0c;你是在定义只有类本身及其子类可以访…...

【漏洞复现】Netgear WN604 downloadFile.php 信息泄露漏洞(CVE-2024-6646)

0x01 产品简介 NETGEAR WN604是一款由NETGEAR&#xff08;网件&#xff09;公司生产的无线接入器&#xff08;或无线路由器&#xff09;提供Wi-Fi保护协议&#xff08;WPA2-PSK, WPA-PSK&#xff09;&#xff0c;以及有线等效加密&#xff08;WEP&#xff09;64位、128位和152…...

图像处理 -- ISP调优(tuning)的步骤整理

ISP调优流程培训文档 1. 硬件准备 选择合适的图像传感器&#xff1a;根据项目需求选择合适的传感器型号。搭建测试环境&#xff1a;包括测试板、光源、色彩卡和分辨率卡等。 2. 初始设置 寄存器配置&#xff1a;初始化传感器的寄存器设置&#xff0c;包括曝光、增益、白平衡…...

【中项】系统集成项目管理工程师-第4章 信息系统架构-4.2系统架构

前言&#xff1a;系统集成项目管理工程师专业&#xff0c;现分享一些教材知识点。觉得文章还不错的喜欢点赞收藏的同时帮忙点点关注。 软考同样是国家人社部和工信部组织的国家级考试&#xff0c;全称为“全国计算机与软件专业技术资格&#xff08;水平&#xff09;考试”&…...

node.js中nodemon : 无法加载和使用问题,这是由于windows安全策略影起的按如下操作即可

1、用管理员权限打开vscode 2、文件终端中打开&#xff0c;输入 Set-ExecutionPolicy -Scope CurrentUser 3、再输入RemoteSigned 4、使用get-ExecutionPolicy查看权限&#xff0c;可以看到变为了RemoteSigned 重启问题解决...

【SD】 Stable Diffusion(SD)原理详解与ComfyUI使用 2

Stable Diffusion&#xff08;SD&#xff09;原理详解与ComfyUI使用 Stable Diffusion&#xff08;SD&#xff09;原理详解与ComfyUI使用1. SD整体结构2. Clip&#xff08;文本编码器&#xff09;3. Unit&#xff08;生成模型&#xff09;4. VAE&#xff08;变分自编码器&#…...

【学习笔记】无人机系统(UAS)的连接、识别和跟踪(七)-广播远程识别码(Broadcast Remote ID)

目录 引言 5.5 广播远程识别码&#xff08;Broadcast Remote ID&#xff09; 5.5.1 使用PC5的广播远程识别码 5.5.2 使用MBS的广播远程识别码 引言 3GPP TS 23.256 技术规范&#xff0c;主要定义了3GPP系统对无人机&#xff08;UAV&#xff09;的连接性、身份识别、跟踪及…...

VMware 虚拟机 ping 不通原因排查

目录 一、检查网络 二、重启虚拟机网络 因为最近遇到了一个比较奇怪的 ping 不通虚拟机的事&#xff0c;在此过程中&#xff0c;检查了很多的设置&#xff0c;故而写一篇文章记录下&#xff0c;如有 VMware 虚拟机 ping 不通可以尝试本文的排查方式。 下面以 VMware 虚拟机为…...

websocket状态机

websocket突破了HTTP协议单向性的缺陷&#xff0c;基于HTTP协议构建了双向通信的通道&#xff0c;使服务端可以主动推送数据到前端&#xff0c;解决了前端不断轮询后台才能获取后端数据的问题&#xff0c;所以在小程序和H5应用中被广泛使用。本文主要集合报文分析对于websocket…...

JCR一区级 | Matlab实现CPO-Transformer-LSTM多变量回归预测【2024新算法】

JCR一区级 | Matlab实现CPO-Transformer-LSTM多变量回归预测【2024新算法】 目录 JCR一区级 | Matlab实现CPO-Transformer-LSTM多变量回归预测【2024新算法】效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.【JCR一区级】Matlab实现CPO-Transformer-LSTM多变量回归预测…...

力扣3226 使两个整数相等的位更改次数

写的代码&#xff1a; class Solution { public:string cc(int num){string res"";while(num>0){int rnum % 2;resstatic_cast<char>(48r)res;num/2;}return res;}int minChanges(int n, int k) {int res0;string n2cc(n);string k2cc(k);int n_sizen2.siz…...

VLAN 划分案例详解

vlan 的应用在网络项目中是非常广泛的&#xff0c;基本上大部分的项目都需要划分 vlan&#xff0c;这里从基础的 vlan 的知识开始&#xff0c;了解 vlan 的划分原理。 为什么需要 vlan&#xff1a; 1、什么是 VLAN&#xff1f; VLAN&#xff08;Virtual LAN&#xff09;&…...

[技术总结] C++ 使用经验

const 和 constexpr 有什么区别. const 一般是设置一个只读的属性, 在运行时还有可能通过cast变成一个可修改的. 但是constexpr是告诉编译器这就是一个常亮, 在编译时就可以计算出来然后进行替换.static 修饰的成员函数 & 成员变量 static 修饰的成员函数只能访问 static 修…...

音频数据集

1 多语言 Mozilla Common Voice 下载地址&#xff1a;https://voice.mozilla.org/data 时长&#xff1a;1965小时&#xff08;目前为止&#xff09; 最早2017年发布&#xff0c;持续更新&#xff0c;该基金会表示&#xff0c;通过 Common Voice 网站和移动应用&#xff0c;他们…...

Java | Leetcode Java题解之第268题丢失的数字

题目&#xff1a; 题解&#xff1a; class Solution {public int missingNumber(int[] nums) {int n nums.length;int total n * (n 1) / 2;int arrSum 0;for (int i 0; i < n; i) {arrSum nums[i];}return total - arrSum;} }...

施甸网站建设/北京seo培训

iamlaosong文原有一套Pro*C程序运行在RedHat5.5Oracle10g环境下&#xff0c;随着数据的增加&#xff0c;原服务器不堪重负&#xff0c;新买了一台服务器。厂家说新服务器不能安装原来的环境&#xff0c;只能安装RedHat6.6Oracle11g&#xff0c;所以原来的那套程序要移植到新服务…...

建站行业前景/内容营销是什么意思

转自&#xff1a;简书 冯雅杰 做到这一点&#xff0c;你也可以成为优秀的程序员 作为一个程序员&#xff0c;我经常会问自己一个问题&#xff1a; 优秀的程序员都具备哪些特质&#xff1f; 我总结过很多特质&#xff0c;例如&#xff1a; 有解决问题的能力有独立思考的能力有好…...

免费域名注册工具/上海网站排名seo公司

经济学中有个著名的结论&#xff0c;贸易可以让贸易双方都获益&#xff0c;这里我们用一个例子来说明&#xff0c;为什么是这样的。 分析如下&#xff1a; 馒头对于甲的价值: 0.5瓶啤酒&#xff1d;&#xff11;个馒头 馒头对于乙的价值: &#xff16;瓶啤酒&#xff1d;&…...

广州白云区公司注册/seo搜索引擎优化是做什么的

aptitude aptHow to find the history of updated packages by apt-get or aptitude?如何通过apt -get或aptitude查找更新软件包的历史记录&#xff1f; The history is in log files of dpkg and apt:历史记录在dpkg和apt的日志文件中&#xff1a; /var/log/dpkg.log /var/…...

互动网站/腾讯竞价广告

日前&#xff0c;位于美国亚特兰大东北部地区的阿尔法利塔市批准了一个更改土地用途的申请&#xff0c;将原先计划建设数据中心的用地改为建设联排别墅。 而通用电气公司&#xff0c;E-Trade金融公司&#xff0c;以及CarterValidus公司的律师代表已经向当地的城市规划委员会致函…...

桂阳网站制作公司/建设网站前的市场分析

1.1 设置ip地址 执行命令 service network restart 验证: ifconfig1.2 关闭防火墙 执行命令 service iptables stop 验证: service iptables status1.3 关闭防火墙的自动运行 执行命令 chkconfig iptables off 验证: chkconfig --list | grep iptables1.4 设置主机名 执行命令 …...