作业/数据结构/2024/7/8

链表的相关操作作业:

1】 按值修改

2】按值查找,返回当前节点的地址 (先不考虑重复,如果有重复,返回第一个)

3】 逆置(反转)

4】释放链表

main.c

#include "head.h"int main(int argc, const char *argv[])
{//创建链表,头结点linklist_ptr p=create();//判断链表是否为空empty(p);//头插insert_head(p,10);insert_head(p,11);insert_head(p,12);//输出output(p);//尾插insert_tail(p,1);insert_tail(p,2);insert_tail(p,3);output(p);//任意位置插入insert_index(p,2,99);output(p);//头删del_head(p);output(p);//尾删除                             del_tail(p);output(p);//任意位置删除del_index(p,2);output(p);//按照所给位数修改值change_element(p,1,99);output(p);//按照所给的值查找find_element(p,1);output(p);//反转reversal(p);output(p);return 0;
}

head.h

#include <stdio.h>                                       
#include <stdlib.h>                                      
//定义节点数据的类型                                     
typedef int datatype;                                    
//定义链表结构体                                         
typedef struct node                                      
{                                                        union                                                {                                                    //表示节点的个数                                 int len;                                         //节点的数据                                     datatype data;                                   };                                                   //指针域                                             struct node *next;                                   
}linklist,*linklist_ptr;                                 //1.链表的创建                                           
linklist_ptr create();                                   
//2.判断链表是否为空                                     
int  empty(linklist_ptr p);                              
//3.申请节点封装数据                                     
linklist_ptr node_create(datatype e);                    
//4.头插                                                 
int insert_head(linklist_ptr p,datatype e);              
//5.输出                                                 
void output(linklist_ptr p);                             
//6.尾插                                                 
int insert_tail(linklist_ptr p,datatype e);              
//7.任意位置插入                                         
int insert_index(linklist_ptr p,int index,datatype e);   
//8.头删                                                 
int del_head(linklist_ptr p);                            
//9.尾删除                                               
int del_tail(linklist_ptr p);                            
//10.任意位置删除                                        
int del_index(linklist_ptr p,int index);                 
//11.按照所给的值修改                                    
int change_element(linklist_ptr p,int index,datatype e); 
//12.按照所给的值查找                                    
linklist_ptr find_element(linklist_ptr p,datatype e);    
//13.反转                                                
int  reversal(linklist_ptr p);                           
#endif                                                   

fun.c

    {                                                                         q=q->next;                                                            }                                                                         q->next=p1;                                                               p->len++;                                                                 return 1;                                                                 
}                                                                             //7.任意位置插入                                                              
int insert_index(linklist_ptr p,int index,datatype e)                         
{                                                                             if(NULL==p || index<1 || index>p->len+1)                                  {                                                                         printf("尾插失败\n");                                                 return -1;                                                            }                                                                         //申请节点                                                                linklist_ptr p1=node_create(e);                                           linklist_ptr q=p;                                                         for(int i=0;i<index;i++)                                                  {                                                                         q=q->next;                                                            }                                                                         p1->next=q->next;                                                         q->next=p1;                                                               p->len++;                                                                 return 1;                                                                 
}                                                                             //8.头删                                                                      
int del_head(linklist_ptr p)                                                  
{                                                                             if(NULL==p || empty(p))                                                   {                                                                         printf("头删失败\n");                                                 }                                                                         //定义一个指针指向头指针指向的节点                                        linklist_ptr p1=p->next;                                                  p->next=p1->next;                                                         free(p1);                                                                 p1=NULL;                                                                  p->len--;                                                                 return 1;                                                                 }                                                                             //9.尾删除                                                                    
int del_tail(linklist_ptr p)                                                  
{                                                                             if(NULL==p || empty(p))                                                   {                                                                         printf("尾删失败\n");                                                 return 0;                                                             }                                                                         //定义一个指针指向头结点并让其循环到最后一个节点的前一个节点              linklist_ptr p1=p;                                                        for(int i=0;i<p->len-1;i++)                                               {                                                                         p1=p1->next;                                                          }                                                                         //指向需要删除最后一个节点                                                linklist_ptr p2=p1->next;                                                 p1->next=p1->next;                                                        //释放                                                                    free(p2);                                                                 p2=NULL;                                                                  p->len--;                                                                 return 1;                                                                 
}                                                                             //10.任意位置删除                                                             
int del_index(linklist_ptr p,int index)                                       
{                                                                             if(NULL==p || empty(p) || index>p->len ||index<0)                         {                                                                         printf("任意位置删除失败\n");                                         return 0;                                                             }                                                                         //定义一个指针指向头结点用于循环到所需要                                  //的位置的上一个节点                                                      linklist_ptr p1=p;                                                        for(int i=0;i<index-1;i++)                                                {                                                                         p1=p1->next;                                                          }                                                                         //定义一个指针指向需要被删除的节点                                        linklist_ptr p2=p1->next;                                                 p1->next=p2->next;                                                        //释放                                                                    free(p2);                                                                 p2=NULL;                                                                  p->len--;                                                                 return 1;                                                                 
}                                                                             //11.按照所给的值修改                                                         
int change_element(linklist_ptr p,int index,datatype e)                       
{                                                                             if(NULL==p || empty(p) || index>p->len || index<0)                        {                                                                         printf("任意位置修改失败\n");                                         return 0;                                                             }                                                                         //定义一个指针找到所需要的修改的节点                                      linklist_ptr p1=p;                                                        for(int i=0;i<index;i++)                                                  {                                                                         p1=p1->next;                                                          }                                                                         //修改其中的值                                                            p1->data=e;                                                               }                                                                             //12.按照所给的值查找                                                         
linklist_ptr find_element(linklist_ptr p,datatype e)                          
{                                                                             if(NULL==p || empty(p))                                                   {                                                                         printf("查找值失败\n");                                               return NULL;                                                          }                                                                         //记录相同的次数                                                          int flag=0;                                                               //循环查找                                                                linklist_ptr p1=p;                                                        for(int i=0;i<p->len;i++)                                                 {                                                                         p1=p1->next;                                                          if(p1->data==e)                                                       {                                                                     printf("第%d个元素的值相等\n",i+1);                               flag++;                                                           }                                                                     if(flag==1)                                                           {                                                                     return p1;                                                        }                                                                     }                                                                         if(flag==0)                                                          {                                                                     printf("未查找到相应的值\n");                                     }                                                                     return p;                                                                 
}                                                                             //13.反转                                                                     
int  reversal(linklist_ptr p)                                                 
{                                                                             if(NULL == p || empty(p))                                                 {                                                                         printf("反转失败\n");                                                 return 0;                                                             }                                                                         linklist_ptr p1 = p->next; // 保存第1个节点的地址                         p->next = NULL; // 断开原头结点的连接(使其成为反转后的链表的尾节点)     linklist_ptr p2;                                                          while(p1->next!=NULL)                                                     {                                                                         p2 = p1; // 将当前节点保存到p2,以便将其插入到头部                    p1 = p1->next; // 移动到下一个节点                                    p2->next = p->next; // 将p2插入到p之前(使p2成为新的头结点)          p->next = p2; // 更新p为新插入的节点(更新头结点)                    }                                                                         return 1; // 返回反转后链表的新头结点                                     
}                                                                             

 

 

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

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

相关文章

【面向就业的Linux基础】从入门到熟练,探索Linux的秘密(九)-git(1)

Git是一个版本管理控制系统&#xff08;缩写VCS&#xff09;&#xff0c;它可以在任何时间点&#xff0c;将文档的状态作为更新记录保存起来&#xff0c;也可以在任何时间点&#xff0c;将更新记录恢复回来。 文章目录 前言 一、git是什么 二、git基本概念 三、git基本命令 总结…

【Python实战因果推断】28_倾向分8

目录 Treatment Is Easy to Model Treatment Is Easy to Model 第一个例子中&#xff0c;治疗分配的模型相当容易建立&#xff0c;但干预结果的模型却比较复杂。具体来说&#xff0c;干预遵循伯努利分布&#xff0c;其概率由以下倾向得分给出&#xff1a; 如果您没有意识到&a…

初识CPlusPlus

前言 也是好久没写博客了&#xff0c;那些天也没闲着&#xff0c;去练题去了。实际上练题也可以写练题的博客&#xff0c;但是觉得太简单了些&#xff0c;于是就没有继续写下去。如今又回来写博客&#xff0c;是因为有整理了新的知识C。内容不算多&#xff0c;大多数都是书本上…

行至第11年,追光动画距离“中国皮克斯”还有多远?

百花奖提名名单公布后&#xff0c;入围最佳影片大奖的唯一一部动画电影《长安三万里》&#xff0c;竟然成为了获奖呼声最高的电影。 去年暑期档上映的《长安三万里》以18.24亿票房一跃成为中国影史动画电影票房亚军&#xff0c;虽然这个数据在今年春节档被《熊出没逆转时空》超…

WPF UI 3D 基本概念 点线三角面 相机对象 材质对象与贴图 3D地球 光源 变形处理 动作交互 辅助交互插件 系列三

WPF UI交互专题 平面图形 Path Drawing 绘图 渐变 Brush 矩阵 Transform 变形 阴影效果 模糊效果 自定义灰度去色效果 系列二-CSDN博客 1软件中的3D基本概念 WPF 中 3D 功能的设计初衷并非提供功能齐全的游戏开发平台。 WPF 中的 3D 图形内容封装在 Viewport3D 元素中&#x…

2024前端面试真题【JS篇】

DOM DOM&#xff1a;文本对象模型&#xff0c;是HTML和XML文档的编程接口。提供了对文档的结构化的表述&#xff0c;并定义可一种方式可以使从程序中对该结构进行访问&#xff0c;从而改变文档的结构、样式和内容。 DOM操作 创建节点&#xff1a;document.createElement()、do…

MySQL:TABLE_SCHEMA及其应用

MySQL TABLE_SCHEMA及其应用 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/qq_28550263/ar…

13 - matlab m_map地学绘图工具基础函数 - 介绍创建管理颜色映射的函数m_colmap和轮廓图绘制颜色条的函数m_contfbar

13 - matlab m_map地学绘图工具基础函数 - 介绍创建管理颜色映射的函数m_colmap和轮廓图绘制颜色条的函数m_contfbar 0. 引言1. 关于m_colmap2. 关于m_contfbar3. 结语 0. 引言 本篇介绍下m_map中用于创建和管理颜色映射函数&#xff08;m_colmap&#xff09;和 为轮廓图绘制颜…

人工智能+病理组学的交叉课题,患者的临床特征如何收集与整理|顶刊专题汇总·24-07-09

小罗碎碎念 本期文献主题&#xff1a;人工智能病理组学的交叉课题&#xff0c;患者的临床特征如何收集与整理 我们在阅读文献的时候会发现&#xff0c;有的文章会详细给出自己的数据集分析表&#xff0c;分别列出训练集、验证集的数量&#xff0c;以及每个特征对应的患者人数。…

SpringSecurity 三更草堂学习笔记

0.简介 Spring Security是Spring家族中的一个安全管理框架。相比与另外一个安全框架Shiro&#xff0c;它提供了更丰富的功能&#xff0c;社区资源也比Shiro丰富。 一般来说中大型的项目都是使用SpringSecurity来做安全框架。小项目有Shiro的比较多&#xff0c;因为相比与Spring…

Retrofit框架源码深度剖析【Android热门框架分析第二弹】

Android热门框架解析&#xff0c;你确定不来看看吗&#xff1f; OkHttp框架源码深度剖析【Android热门框架分析第一弹】 Retrofit框架源码深度剖析【Android热门框架分析第二弹】 什么是Retrofit&#xff1f; 准确来说&#xff0c;Retrofit 是一个 RESTful 的 HTTP 网络请求…

【代码随想录】【算法训练营】【第59天】 [卡码110]字符串接龙 [卡码105]有向图的完全可达性 [卡码106]岛屿的周长

前言 思路及算法思维&#xff0c;指路 代码随想录。 题目来自 卡码网。 day 59&#xff0c;周五&#xff0c;继续ding~ 题目详情 [卡码110] 字符串接龙 题目描述 卡码110 字符串接龙 解题思路 前提&#xff1a; 思路&#xff1a; 重点&#xff1a; 代码实现 C语言 […

LLM大模型从入门到精通(1)--LLM基础知识介绍

1. 大语言模型 (LLM) 背景 2. 语言模型 (Language Model, LM) 1. 大语言模型 (LLM) 背景 大语言模型 (英文&#xff1a;Large Language Model&#xff0c;缩写LLM) 是一种人工智能模型, 旨在理解和生成人类语言. 大语言模型可以处理多种自然语言任务&#xff0c;如文本分类、问…

绝区伍--2024年AI发展路线图

2024 年将是人工智能具有里程碑意义的一年。随着新模式、融资轮次和进步以惊人的速度出现&#xff0c;很难跟上人工智能世界发生的一切。让我们深入了解 2024 年可能定义人工智能的关键事件、产品发布、研究突破和趋势。 2024 年第一季度 2024 年第一季度将推出一些主要车型并…

什么是O2O?线上线下怎么完美结合?

现如今互联网技术飞速发展&#xff0c;智能手机普及。O2O&#xff08;Online To Offline&#xff09;模式已经成为一种新的商业模式&#xff0c;人们的生活和消费习惯也逐渐被改变。经常听到企业提到“O2O”&#xff0c;它究竟是什么呢&#xff1f;对企业有着什么魅力呢&#x…

Flutter Inno Setup 打包 Windows 程序

转载自&#xff1a;flutter桌面应用从开发配置到打包分发 - 掘金 (juejin.cn) 五.打包 1.创建 release 版本的应用 flutter build release 执行完成后&#xff0c; release包位置在项目的build->windows->runer文件夹中 2.应用程序分发 Windows 为 Windows 平台构建…

AE-关键帧

目录 关键帧操作步骤&#xff08;以位置变化为例&#xff09; 1.确定动画起点 2.设置起点的位置属性 3.为起点打上关键帧 4.确定动画终点 5.设置终点的位置属性 改变动画速度 1.选中所有关键帧 2.拖拽 时间反向关键帧 1.选中要反向的关键帧 2.使用时间反向关键帧 …

Apache POI、EasyPoi、EasyExcel

目录 ​编辑 &#xff08;一&#xff09;Apache PoI 使用 &#xff08;二&#xff09;EasyPoi使用 &#xff08;三&#xff09;EasyExcel使用 写 读 最简单的读​ 最简单的读的excel示例​ 最简单的读的对象​ &#xff08;一&#xff09;Apache PoI 使用 &#xff08;二&…

mp4视频太大怎么压缩不影响画质,mp4文件太大怎么变小且清晰度高

在数字化时代&#xff0c;我们常常面临视频文件过大的问题。尤其是mp4格式的视频&#xff0c;文件大小往往令人望而却步。那么&#xff0c;如何在不影响画质的前提下&#xff0c;有效地压缩mp4视频呢&#xff1f;本文将为您揭秘几种简单实用的压缩技巧。 在分享和存储视频时&am…

算法复杂度

目录 1. 数据结构前言 1.1 数据结构 1.2 算法 2. 算法效率 2.1 复杂度的概念 3. 时间复杂度 3.1 大O的渐进表示法 3.2 时间复杂度计算示例: 3.2.1 示例1 3.2.2 示例2 3.2.3 示例3 3.2.4 示例4 3.2.6 示例6 4. 空间复杂度 4.1 空间复杂度计算示例 4.1.1 示例1 …