HQYJ 2024-2-23 作业

  1. 自己实现单向循环链表的功能
  2. 整理思维导图
  3. 复习前面顺序表和链表的代码,重写链表逆置函数

 1.实现单向循环链表的功能

loop_link_list.h文件

#ifndef __LOOP_LINK_LIST__
#define __LOOP_LINK_LIST__
#include<stdio.h>
#include<stdlib.h>
typedef int datatype;
typedef struct loop_list
{union{datatype data;int len;};struct loop_list *next;}loop_list,*loop_p;loop_p creat_head();//创建头结点
loop_p creat_node(datatype data);//创建新节点
void insert_head(loop_p H,datatype data);//头插
void out_put(loop_p H);//输出链表(两次循环)
int loop_empty(loop_p H);//判空 
void del_tail(loop_p H);//尾删
void insert_pos(loop_p H,int pos,datatype data);//按位置插入
void del_pos(loop_p H,int pos);//按位置删除#endif

 loop_link_list.c文件 

#include "loop_link_list.h"
loop_p creat_head()
{loop_p L = (loop_p)malloc(sizeof(loop_list));if(L==NULL){printf("空间申请失败\n");return NULL;}L->len = 0;L->next = L;return L;
}loop_p creat_node(datatype data)
{loop_p new = (loop_p)malloc(sizeof(loop_list));if(new==NULL){printf("空间申请失败\n");return NULL;}new->data = data;return new;}
//判空
int loop_empty(loop_p H)
{if(H==NULL){printf("入参失败,请检查\n");return -1;}return H->len==0?1:0;}//头插
void insert_head(loop_p H,datatype data)
{if(H==NULL){printf("入参失败,请检查\n");return;}loop_p new = creat_node(data);new->next = H->next;H->next = new;H->len++;
}//按位置插入
void insert_pos(loop_p H,int pos,datatype data)
{if(H==NULL){printf("入参失败,请检查\n");return;}if(pos>H->len||pos<=0){printf("输入位置不合理\n");return;}loop_p p = H;for(int i=0;i<pos-1;i++){p = p->next;}loop_p new = creat_node(data);new->next = p->next;p->next = new;H->len++;}
//输出(看现象)
void out_put(loop_p H)
{if(H==NULL){printf("入参失败,请检查\n");return;}loop_p p = H->next;for(int i=1;i<=2;i++,p=p->next)//循环两次;{while(p!=H){printf("%d->",p->data);p = p->next;	}}	putchar(10);}
//尾删
void del_tail(loop_p H)
{if(H==NULL){printf("入参失败,请检查\n");return;}if(loop_empty(H)){printf("列表为空,无法删除\n");}loop_p p = H;while(p->next->next != H){p = p->next;}loop_p del = p->next;p->next = H;free(del);H->len--;
}//按位置删除
void del_pos(loop_p H,int pos)
{if(H==NULL){printf("入参失败,请检查\n");return;}if(pos>H->len||pos<=0){printf("输入位置不合理\n");return;}loop_p p = H;for(int i=0;i<pos-1;i++){p = p->next;}loop_p del = p->next;p->next = p->next->next;free(del);H->len--;}

main.c文件 

#include "loop_link_list.h"
int main(int argc, const char *argv[])
{loop_p L = creat_head();insert_head(L,5);insert_head(L,4);insert_head(L,3);insert_head(L,2);del_tail(L);del_tail(L);insert_pos(L,2,30);del_pos(L,3);out_put(L);	return 0;
}

 

 

2.重写链表逆置函数

//单链表的逆置
void over_turn(link_p H)
{link_p p = H->next->next;//保存第二个结点(从第二个开始头插)link_p q = p->next;//保存要插入结点的下一个结点的地址H->next->next = NULL;while(p!=NULL){p->next = H->next;H->next = p;p = q;if(q!=NULL){q=q->next;}}
}

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

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

相关文章

SOCKS5、代理 IP、HTTP 在软件工程中的应用

在当今数字化时代&#xff0c;网络安全是软件工程领域中至关重要的话题之一。本文将深入探讨 SOCKS5 代理、代理 IP、HTTP 代理等网络代理技术&#xff0c;以及它们在软件工程中的应用&#xff0c;强调网络安全的重要性&#xff0c;并提供一些实用的建议。 1. SOCKS5 代理&…

基础爬虫篇

文章目录 爬虫介绍requsets模块和快速使用携带请求头携带cookie的两种方式post携带参数模拟登录 取出cookie和处理cookie响应对象证书使用代理超时 异常处理 上传文件 爬虫介绍 # 爬虫是什么&#xff1f;-通过编程技术---》把互联网中的数据---》获取到---》数据清洗---》存到…

一次路由多次交换的概念与用处

“一次路由多次交换”是指在网络中&#xff0c;数据包首次被路由后&#xff0c;随后相同流的数据包在二层通过交换方式传输&#xff0c;不再需要路由处理。 具体来说&#xff0c;这个过程涉及到以下几个关键点&#xff1a; 路由与交换&#xff1a;路由是指根据IP地址将数据包…

第2讲:C语言数据类型和变量

第2讲&#xff1a;C语言数据类型和变量 目录1.数据类型介绍1.1字符型1.2整型1.3浮点型1.4 布尔类型1.5 各种数据类型的长度1.5.1 sizeof 操作符1.5.2 数据类型长度1.5.3 sizeof 中表达式不计算 2.signed 和 unsigned3.数据类型的取值范围4. 变量4.1 变量的创建4.2 变量的分类 5…

oracle中trim函数、ltrim函数、rtrim函数的使用方法,trim()函数、ltrim ()函数、rtrim()函数的用法

在oracle中&#xff0c;trim()函数的用法有,leading 开头字符&#xff0c;trailing 结尾字符&#xff0c;both 开头和结尾字符&#xff0c;如下&#xff1a; trim(leading || trailing || both 将要被替换掉的字符" from “将要被替换的字符串") 1、trim函数去除指…

opencv判断二值的情况

目的 先说说理论&#xff1a; 什么叫图像的二值化&#xff1f;二值化就是让图像的像素点矩阵中的每个像素点的灰度值为0&#xff08;黑色&#xff09;或者255&#xff08;白色&#xff09;&#xff0c;也就是让整个图像呈现只有黑和白的效果。在灰度化的图像中灰度值的范围为0…

kafka为什么性能这么高?

Kafka系统架构 Kafka是一个分布式流处理平台&#xff0c;具有高性能和可伸缩性的特点。它使用了一些关键的设计原则和技术&#xff0c;以实现其高性能。 上图是Kafka的架构图&#xff0c;Producer生产消息&#xff0c;以Partition的维度&#xff0c;按照一定的路由策略&#x…

人工智能和机器学习中深度学习、自然语言处理、计算机视觉详细介绍和java代码实现、数据模型训练

人工智能和机器学习领域详细介绍及Java代码实现 1. 深度学习 介绍: 深度学习是一种机器学习技术,通过多层神经网络对数据进行学习和表征。Java实现: 使用深度学习库如DL4J(DeepLearning4j)来构建和训练深度神经网络模型。数据模型训练: 示例代码如下:public class Deep…

C++力扣题目 392--判断子序列 115--不同的子序列 583--两个字符串的删除操作 72--编辑操作

392.判断子序列 力扣题目链接(opens new window) 给定字符串 s 和 t &#xff0c;判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些&#xff08;也可以不删除&#xff09;字符而不改变剩余字符相对位置形成的新字符串。&#xff08;例如&#xff0c;&quo…

代码随想录算法训练营day36 | 435. 无重叠区间、763.划分字母区间、56. 合并区间

435. 无重叠区间 基于左边界排序 class Solution:def eraseOverlapIntervals(self, intervals: List[List[int]]) -> int:count 0 # 需要移除的区间数量intervals.sort(keylambda x: x[0])for i in range(1, len(intervals)):if intervals[i][0] < intervals[i-1][1]…

【Logback】如何在项目中快速引入Logback日志?

目录 1、引入相关依赖或者 jar 包 2、使用logback日志 3、引入logback配置文件 4、打印logback内部状态信息 Logback 是 Java 社区中使用最广泛的日志框架之一。它是其前身 Log4j 的替代品。Logback 比所有现有的日志框架速度更快&#xff0c;占用空间更小&#xff0c;而且…

【讨论】Web端测试和App端测试的不同,如何说得更有新意?

Web 端测试和 App 端测试是针对不同平台的上的应用进行测试&#xff0c;Web应用和App端的应用实现方式不同&#xff0c;测试时的侧重点也不一样。 Web端应用和App端应用的区别&#xff1a; 平台兼容性 安装方式 功能和性能 用户体验 更新和维护 测试侧重点有何不同 平台…

HGAME week2 web

1.What the cow say? 测试发现可以反引号命令执行 ls /f* tac /f*/f* 2.myflask import pickle import base64 from flask import Flask, session, request, send_file from datetime import datetime from pytz import timezonecurrentDateAndTime datetime.now(timezone(…

【Java】类与对象(实验二)

目录 一、实验目的 二、实验内容 三、实验小结 一、实验目的 掌握类的定义与对象的创建。理解构造方法和this关键字的用法。掌握对象对于属性及方法的引用。 二、实验内容 1、编写一个Java程序&#xff0c;定义一个表示学生的类Student&#xff0c;该类包括: (1)这个类的…

HarmonyOS—使用低代码开发应用或服务

使用低代码开发应用或服务有以下两种开发方式&#xff1a; 创建一个支持低代码开发的新工程&#xff0c;开发应用或服务的UI界面。在已有工程中&#xff0c;创建Visual文件来开发应用或服务的UI界面。 ArkTS工程和JS工程使用低代码的步骤相同&#xff0c;接下来以JS工程为例分…

VantUI组件的安装和使用

Vant UI 是一款轻量、可靠的移动端 Vue 组件库&#xff0c;适用于构建高性能的移动端页面。它提供了丰富的组件&#xff0c;如按钮、输入框、弹窗、轮播等&#xff0c;并且具有灵活的配置和扩展性。Vant UI 的设计风格简洁&#xff0c;易于上手&#xff0c;能够满足大部分移动端…

《Effective C++》《构造/析构/赋值运算——6、若是不想使用编译器自动生成的函数,就该明确拒绝》

文章目录 1、term6:Explicitly disallow the use of compiler-generated functions you do not want方案1:实现空的copy构造和copy赋值&#xff0c;并将其声明为private方案2:只做声明&#xff0c;不提供实现方案3:继承UnCopyable这样一个空基类&#xff0c;该基类将拷贝构造函…

exe4j将java项目打包为exe包(无需每台机器上安装jdk)

这里写目录标题 背景过程打jar包1、修改pom文件2、maven命令打jar包 下载exe4j工具1.首先去官网下载 exe相关配置1、填写密钥2、选择jar包格式3、设置名称以及输出exe位置4、设置图标及设置操作系统版本5、设置要导入的jar包&#xff0c;以及启动类6、设置jdk版本范围7、设置jd…

【2024软件测试面试必会技能】Appium自动化(6):原生app元素定位方法

元素定位方法介绍及应用&#xff1a; Appium方法定位原生app元素: 通过appium inspector工具&#xff0c;可以获取元素的相关信息&#xff1b;在appium中提供了一系列的元素定位API&#xff0c;通过在这些API中输入指定的元素信息&#xff0c;就能完成元素定位&#xff0c;定…

深入攻克并了解权限ACL

一、ACL使用 1.1、ACL中mask修改最大权限 什么是最大权限&#xff0c;看下面的信息&#xff1a; [rootlocalhost ~]# getfacl /project getfacl: Removing leading / from absolute path names # file: project # owner: root # group: tgroup user::rwx# 所属用户权限 user…