数据结构day4

一、思维导图

二、课后练习

头文件

#ifndef LINKLIST_H
#define LINKLIST_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 element);//链表判空
int list_empty(NodePtr L);//链表的头插
int list_insert_head(NodePtr L,datatype element);//链表的遍历
int list_show(NodePtr L);//通过位置查找
NodePtr list_search_pos(NodePtr L,int pos);//任意位置插入元素
int list_insert_pos(NodePtr L,int pos,datatype element);//链表的头删
int list_delete_head(NodePtr L);//任意位置删除元素
int list_delete_pos(NodePtr L,int pos);//按值查找返回位置
int list_search_element(NodePtr L,datatype element);//按位置修改元素
int list_update_pos(NodePtr L,int pos,datatype element);//按值修改元素
int list_update_element(NodePtr L,datatype target,datatype element);//链表的反转
void list_reverse(NodePtr L);//链表的反转(递归实现)
NodePtr list_reverse_recursion(NodePtr L);//链表去重
void list_delete_repeat(NodePtr L);//链表的排序
void list_sort(NodePtr L);//链表的销毁
void list_destroy(NodePtr L);#endif

 链表的排序

//链表的排序
void list_sort(NodePtr L)
{//判断逻辑if(NULL == L || list_empty(L)){printf("排序失败\n");return;}//定义指针记录排序轮数NodePtr N = L;//定义两个指针分别指向新一轮排序的前面两个元素NodePtr p = N;NodePtr q = N->next;//冒泡排序交换数据域while(N){while(q->next){if(p->next->data < q->next->data){//交换数据域datatype temp = p->next->data;p->next->data = q->next->data;q->next->data = temp;}p = p->next;q = q->next;}N = N->next; 	//排序一轮,指针向后偏移}printf("排序成功\n");
}

 链表逆序(递归)

//链表的反转(递归实现)
NodePtr list_reverse_recursion(NodePtr head)
{//head为第一个结点//判断逻辑if(NULL == head || head->next ==NULL){return head; 		//递归出口}//如果L不是最后一个节点,先找到最后一个节点NodePtr N = list_reverse_recursion(head->next);//下一个结点指针域指向自己head->next->next = head;//当前结点指针域置空head->next = NULL;//将最后一个结点地址向前传递return N;
}

链表去重

//链表去重
void list_delete_repeat(NodePtr L)
{//判断逻辑if(NULL == L || L->next ==NULL){printf("去重失败\n");return;}NodePtr p = L;while(p != NULL && p->next !=NULL){if(p->data == p->next->data){NodePtr temp = p->next;p->next = p->next->next;free(temp);//表长变化L->len--;}else{p = p->next;}}printf("去重成功\n");}

功能测试

(ps:使用顺序表完成学生信息管理系统见上一篇文章)

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

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

相关文章

PyTorch 深度学习实践-处理多维特征的输入

视频指路 参考博客笔记 参考笔记二 通过多个线性模型来模拟非线性的空间变换&#xff0c;矩阵计算就是不同维度之间的空间转换 说明&#xff1a;1、乘的权重(w)都一样&#xff0c;加的偏置(b)也一样。b变成矩阵时使用广播机制。神经网络的参数w和b是网络需要学习的&#xff0c…

浏览器跨tab页面通信方式总结

需求&#xff1a; 浏览器不同 tab 标签页之间是独立的&#xff0c; 如果要通信必须通过特殊手段来实现跨标签页通信。 1.StorageEvent 事件 当一个标签页 localStorage 变化时&#xff08;sessionStorage 无效&#xff09;&#xff0c;同源下另一个或其他所有标签页使用 DO…

buuctf web 第五到八题

[ACTF2020 新生赛]Exec 这里属实有点没想到了&#xff0c;以为要弹shell&#xff0c;结果不用 127.0.0.1;ls /PING 127.0.0.1 (127.0.0.1): 56 data bytes bin dev etc flag home lib media mnt opt proc root run sbin srv sys tmp usr var127.0.0.1;tac /f*[GXYCTF2019]Pin…

React的usestate设置了值后马上打印获取不到最新值

我们在使用usestate有时候设置了值后&#xff0c;我们想要更新一些值&#xff0c;这时候&#xff0c;我们要想要马上获取这个值去做一些处理&#xff0c;发现获取不到&#xff0c;这是为什么呢&#xff1f; 效果如下&#xff1a; 1、原因如下 在React中,当你使用useState钩子…

设计模式11-原型模式

设计模式11-原型模式 写在前面对象创建模式典型模式原型模式动机结构代码推导应用特点要点总结 原型模式与工厂方法模式对比工厂方法模式原型模式什么时候用什么模式 写在前面 对象创建模式 通过对象创建模式绕开动态内存分配来避免创建过程中所导致的耦合过紧的问题。从而支…

谷粒商城实战笔记-40-前端基础-Vue-计算属性、监听器、过滤器

文章目录 一&#xff0c;计算属性1&#xff0c;用途2&#xff0c;用法2.1 定义View2.2 声明计算属性 3&#xff0c;注意事项 二&#xff0c;监听器1. 使用 watch 监听属性的变化 三&#xff0c;过滤器1&#xff0c;定义局部过滤器2&#xff0c;定义全局过滤器3&#xff0c;使用…

GraphPad prism处理cck-8获得ic50

C组为空白对照组&#xff0c;a组为dmso对照组&#xff0c;b组为细胞加药组&#xff0c;八个梯度的药物浓度 一、数据转化 首先&#xff0c;打开软件&#xff0c;选项中选择x的第一项&#xff0c;y的第二项&#xff0c;单一药物浓度设定了几个孔就选几 把自己的药物浓度直接复制…

C语言·函数(超详细系列·全面总结)

前言&#xff1a;Hello大家好&#x1f618;&#xff0c;我是心跳sy&#xff0c;为了更好地形成一个学习c语言的体系&#xff0c;最近将会更新关于c语言语法基础的知识&#xff0c;今天更新一下函数的知识点&#xff0c;我们一起来看看吧&#xff01; 目录 一、函数是什么 &a…

一分钟图情论文:《演化视角下图像的语义表示》

随着图像资源的不断积累&#xff0c;如何有效地表示图像的语义信息成为提高图像检索效率的关键问题。由武汉大学信息管理学院的李旭晖、吴燕秋和王晓光教授合著论文《演化视角下图像的语义表示》中提出了一种基于“演化”视角的图像语义层次描述框架来剖析图像的语义表示问题。…

Android11 framework 禁止三方应用开机自启动

Android11应用自启动限制 大纲 Android11应用自启动限制分析验证猜想&#xff1a;Android11 AOSP是否自带禁止三方应用监听BOOT_COMPLETED​方案禁止执行非系统应用监听到BOOT_COMPLETED​后的代码逻辑在执行启动时判断其启动的广播接收器一棍子打死方案&#xff08;慎用&#…

DevExpress WPF中文教程 - 为项目添加GridControl并将其绑定到数据

DevExpress WPF拥有120个控件和库&#xff0c;将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序&#xff0c;这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件…

【思科】链路聚合实验配置和背景

【思科】链路聚合实验配置和背景 背景链路聚合基本概念链路聚合聚合接口 思科链路聚合协议01.PAgP协议02.LACP协议 思科链路聚合模式LACP协议模式PAgP协议模式ON模式 实验准备配置二层链路聚合LACP协议模式SW1SW2PC1PC2查看LACP聚合组建立情况查看LACP聚合端口情况查看逻辑聚合…

2-40 基于Matlab编写的3维FDTD(时域有限差分算法)计算了球的RCS经典散射问题

基于Matlab编写的3维FDTD(时域有限差分算法)计算了球的RCS经典散射问题&#xff0c;采用PEC作边界&#xff0c;高斯波束激励。程序已调通&#xff0c;可直接运行。 2-40 3维FDTD 时域有限差分算法 - 小红书 (xiaohongshu.com)

Python自动化DevOps任务入门

目录 Python自动化DevOps任务入门 一、环境和工具配置 1. 系统环境与Python版本 2. 虚拟环境搭建 3. 必要的库安装 二、自动化部署 1. 使用Fabric进行流式部署 2. 使用Ansible编写部署剧本 三、持续集成和测试 1. 配置CI/CD工具 选择工具 配置工具 构建和测试自动…

深入理解设计模式:六大经典模式解析

深入理解设计模式&#xff1a;六大经典模式解析 1. 单例模式&#xff08;Singleton Pattern&#xff09;1.1 概述1.2 示例场景1.3 实现要点 2. 工厂模式&#xff08;Factory Pattern&#xff09;2.1 简单工厂2.2 抽象工厂2.3 示例场景2.4 实现要点 3. 观察者模式&#xff08;Ob…

从输入 URL 到页面展示到底发生了什么

从输入 URL 到页面展示到底发生了什么呢&#xff1f; 1.在浏览器输入一个域名回车 2.首先会先检查浏览器缓存里是否有缓存资源&#xff0c;如果缓存中有&#xff0c;会直接在浏览器上显示页面内容&#xff0c;如果没有&#xff0c;在发送http请求之前&#xff0c;浏览器会向D…

设计模式-抽象工厂

抽象工厂属于创建型模式。 抽象工厂和工厂设计模式的区别&#xff1a; 工厂模式的是设计模式中最简单的一种设计模式&#xff0c;主要设计思想是&#xff0c;分离对象的创建和使用&#xff0c;在Java中&#xff0c;如果需要使用一个对象时&#xff0c;需要new Class()&#xff…

Step-DPO 论文——数学大语言模型理解

论文题目&#xff1a;STEP-DPO: STEP-WISE PREFERENCE OPTIMIZATION FOR LONG-CHAIN REASONING OF LLMS 翻译为中文就是&#xff1a;“LLMs长链推理的逐步偏好优化” 论文由港中文贾佳亚团队推出&#xff0c;基于推理步骤的大模型优化策略&#xff0c;能够像老师教学生一样优…

Vulnhub靶场DC-7练习

目录 0x00 准备0x01 主机信息收集0x02 站点信息收集1. 获取用户名/密码2. ssh连接目标主机3. drush命令修改Drupal密码 0x03 漏洞查找与利用1. Drupal写入php木马2. 连接shell3. 反弹shell并提权 0x04 总结 0x00 准备 下载链接&#xff1a;https://download.vulnhub.com/dc/DC-…

深入理解Linux网络(四):TCP接收阻塞

TCP socket 接收函数 recv 发出 recvfrom 系统调用。 进⼊系统调⽤后&#xff0c;⽤户进程就进⼊到了内核态&#xff0c;通过执⾏⼀系列的内核协议层函数&#xff0c;然后到 socket 对象的接收队列中查看是否有数据&#xff0c;没有的话就把⾃⼰添加到 socket 对应的等待队列⾥…