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

day20-线性表(链表II)

一、调试器

1.1 gdb(调试器)

        在程序指定位置停顿

1.1.1 一般调试

        gcc直接编译生成的是发布版(Release)

  1. gcc -g        //-g调式版本,(体积大,内部有源码)(DeBug)
    1. gcc -g main.c linklist.c
  2. gdb a.out  //a.out指代可执行文件
  3. b fun.c: 36 //设置断点,运行到该位置程序自动停
    1. b InsertPosLinklist
    2. b linklist.c:137
  4. r           运行
  5. n         // 执行下一步              n     s    //步入函数,自定义函数
  6. 使用p命令,查看变量或指针等数据
    1. p *data
    2. p len
  7. 按q退出
  8. 输入list   //查看源码,默认Main.c,一次十行,按回车查看后十行

1.1.2 找段错误

  1. gcc -g main.c linklist.c
  2. gdb a.out
  3. 按r直接运行
  4. 重现错误
  5. where找出段错误位置

二、链表(续,见day19)

2.1 单链表

2.1.1 尾插

int InsertTailLinkList(LinkList *ll, DATATYPE *data)
{if(IsEmptyLinkList(ll)){return InsertHeadLinkList(ll,data);}else{LinkNode *newnode = malloc(sizeof(LinkNode));if(NULL == newnode){fprintf(stderr, "InsertTailLinkList malloc");return 1;}memcpy(&newnode->data, data, sizeof(DATATYPE));newnode->next = NULL;LinkNode *tmp = ll->head;while (tmp->next) {tmp = tmp->next;}tmp->next = newnode;ll->clen++;}return 0;
}

2.1.2 指定位置插

(1)在首位插入,头插

(2)在最后插入,尾插

(3)中间插:

int InsertPosLinkList(LinkList *ll, DATATYPE *data, int pos)
{int len = GetSizeLinkList(ll);if(pos < 0 || pos > len){return 1;}if(0 == pos){return InsertHeadLinkList(ll, data);}else if(pos == len){return InsertTailLinkList(ll, data);}else {LinkNode *tmp =ll->head;LinkNode *newnode = malloc(sizeof(LinkNode));if(NULL == newnode){fprintf(stderr, "InsertPosLinkList malloc");return 1;}memcpy(&newnode->data, data, sizeof(DATATYPE));newnode->next = NULL;int i;for(i = 0; i < pos - 1;++i){tmp = tmp->next;}newnode->next = tmp->next;tmp->next = newnode;ll->clen++;}return 0;}

2.1.3 更改结点信息

int ModifyLinkList(LinkList*ll,char*name,DATATYPE*data)
{DATATYPE * tmp = FindLinkList(ll, name);if(NULL == tmp){return 1;}memcpy(tmp,data,sizeof(DATATYPE));return 0;
}

2.1.4 销毁链表

int DestroyLinkList(LinkList*ll)
{while(1){LinkNode *tmp = ll->head;if(tmp == NULL){break;}ll->head = ll->head->next;free(tmp);}free(ll);return 0;
}

2.2 单链表练习

2.2.1 找中间值

2.2.2 找倒数第k个元素

2.2.3 链表的逆序 

 2.2.4 链表的排序(插入排序)

2.2.5 判断是否为环形链表

 三、顺序表和链表对比

3.1存储方式

        顺序表 是一段连续的存储单元
        链表     是逻辑结构连续物理结构(在内存中的表现形式)不连续

3.2 时间性能

        查找 :          顺序表O(1)         链表  O(n)

        插入和删除:顺序表 O(n)        链表   O(1)

3.3 空间性能

        顺序表 需要预先分配空间,大小固定
        链表, 不需要预先分配,大小可变,动态分配

3.4 循环链表

        简单的来说,就是将原来单链表中最有一个元素的next指针指向第一个元素或头结点,链表就成了一个环,头尾相连,就成了循环链表。circultlar linker list.
        注意非空表,和空表。多数会加入头结点。
        原来结束的条件是 p->next != NULL ------->>>>> p-next != Head 
            
            
            
        

 

相关文章:

day20-线性表(链表II)

一、调试器 1.1 gdb&#xff08;调试器&#xff09; 在程序指定位置停顿 1.1.1 一般调试 gcc直接编译生成的是发布版&#xff08;Release&#xff09; gcc -g //-g调式版本&#xff0c;&#xff08;体积大&#xff0c;内部有源码&#xff09;&#xff08;DeBug&#…...

什么是函数重载?为什么 C 不支持函数重载,而 C++能支持函数重载?

函数重载的定义 函数重载是指在同一作用域内&#xff0c;可以有多个同名函数&#xff0c;但是这些函数的参数列表&#xff08;参数的个数、类型或顺序&#xff09;不同。编译器会根据调用函数时传递的实际参数来确定具体调用哪个重载函数。 C不支持函数重载的原因 C语言的编译器…...

Python机器学习笔记(二十二、模型评估-交叉验证)

交叉验证(cross-validation)是一种评估泛化性能的统计学方法,它比单次划分训练集和测试集的方法更加稳定、全面。 在交叉验证中,数据被多次划分,并且需要训练多个模型。最常用的交叉验证是k折交叉验证(k-fold cross-validation),其中k是由用户指定的数字,通常取5或10…...

Python爬虫实战:获取woodo网各类免费图片,积累设计素材

1. 引言 在设计素材收集领域,woodo 网(吾道)提供了大量高质量的设计图片资源。然而,手动下载这些图片效率低下,且难以批量获取。开发自动化爬虫系统能够有效解决这一问题,但面临网站反爬机制、数据去重、并发控制等技术挑战。本文提出的爬虫系统针对 woodo 网站特点进行…...

Go语言运算符详解

文章目录 1. 算术运算符2. 关系运算符3. 逻辑运算符4. 位运算符5. 赋值运算符6. 其他运算符运算符优先级注意事项 Go语言提供了与其他语言类似的运算符&#xff0c;包括算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符等。这些运算符即可满足基本的运算需求。 1. 算…...

HTTP 连接复用机制详解

文章目录 HTTP 连接复用机制详解为什么需要连接复用&#xff1f;连接复用的实现方式HTTP/1.1 的 Keep-AliveHTTP/2 多路复用 HTTP/1.1 的队头阻塞问题 HTTP 连接复用机制详解 HTTP 连接复用是 HTTP/1.1 及更高版本中的核心优化机制&#xff0c;旨在减少 TCP 连接建立和关闭的开…...

网络协议分析 实验六 TCP和端口扫描

文章目录 实验6.1 TCP(Transfer Control Protocol)练习二 利用仿真编辑器编辑并发送TCP数据包实验6.2 UDP端口扫描实验6.3 TCP端口扫描练习一 TCP SYN扫描练习二 TCP FIN扫描 实验6.1 TCP(Transfer Control Protocol) 建立&#xff1a;syn,syn ack,ack 数据传送&#xff1a;tcp…...

Spring Web MVC————入门(2)

1&#xff0c;请求 我们接下来继续讲请求的部分&#xff0c;上期将过很多了&#xff0c;我们来给请求收个尾。 还记得Cookie和Seesion吗&#xff0c;我们在HTTP讲请求和响应报文的时候讲过&#xff0c;现在再给大家讲一遍&#xff0c;我们HTTP是无状态的协议&#xff0c;这次的…...

Python知识框架

一、Python基础语法 变量与数据类型 变量命名规则 基本类型&#xff1a;int, float, str, bool, None 复合类型&#xff1a;list, tuple, dict, set 类型转换与检查&#xff08;type(), isinstance()&#xff09; 运算符 算术运算符&#xff1a;, -, *, /, //, %, ** 比较…...

每日算法-250514

每日算法学习记录 (2024-05-14) 今天记录三道 LeetCode 算法题的解题思路和代码。 1. 两数之和 题目截图: 解题思路 这道题要求我们从一个整数数组中找出两个数&#xff0c;使它们的和等于一个给定的目标值 target&#xff0c;并返回这两个数的下标。 核心思路是使用 哈希…...

嵌入式培训之数据结构学习(三)gdb调试、单向链表练习、顺序表与链表对比

目录 一、gdb调试 &#xff08;一&#xff09;一般调试步骤与命令 &#xff08;二&#xff09;找段错误&#xff08;无下断点的地方&#xff09; &#xff08;三&#xff09;调试命令 二、单向链表练习 1、查找链表的中间结点&#xff08;用快慢指针&#xff09; 2、找出…...

虚拟机安装CentOS7网络问题

虚拟机安装CentOS7网络问题 1. 存在的问题1.1 CentOS7详细信息 2. 解决问题3.Windows下配置桥接模式 1. 存在的问题 虽然已经成功在虚拟机上安装了CentOS7&#xff0c;但是依旧不能上网。 1.1 CentOS7详细信息 [fanzhencentos01 ~]$ hostnamectlStatic hostname: centos01Ic…...

零基础学Java——终章:核心知识点与面试总结

Java核心知识点与面试总结 本文档旨在总结Java的核心知识点&#xff0c;并提供常见的面试问题与解答&#xff0c;帮助学习者巩固知识和准备面试。 目录 零基础学Java——大纲合集 Java基础 1. Java概述 JDK (Java Development Kit): Java开发工具包&#xff0c;包含Java的…...

迅为RK3588开发板安卓GPIO调用APP运行测试

将网盘上的安卓工程文件复制到 Windows 电脑上。确保工程路径中使用英文字符&#xff0c;不包含中文。接着&#xff0c;启动 Android Studio&#xff0c;点击“Open”按钮选择应用工程文件夹&#xff0c;然后点击“OK”。由于下载 Gradle 和各种 Jar 包可能需要一段时间&#x…...

在一台CentOS服务器上开启多个MySQL服务

1. 创建目录 mkdir -p /data/mysql3307/{data,tmp,logs} # 赋权 chown -R mysql:mysql /data/mysql3307 chmod -R 750 /data/mysql3307 2.修改 /etc/my.cnf &#xff0c;添加[mysqld3307]实例配置组 [mysqld3307] # mysql服务的端口 port 3307 # 套接字文件存放路径 socket /…...

C#高级编程:IO和序列化

在 C# 编程中,输入输出(IO)和序列化是两个至关重要的概念,它们为数据的存储、读取以及在不同环境间的传输提供了强大的支持。无论是开发小型应用程序,还是构建复杂的企业级系统,深入理解并熟练运用 IO 和序列化技术都是必不可少的。​ 一、C# 中的 IO 基础​ 1、文件流…...

Unity 红点系统

首先明确一个&#xff0c;即红点系统的数据结构是一颗树&#xff0c;并且红点的数据结构的初始化需要放在游戏的初始化中&#xff0c;之后再是对应的红点UI侧的注册&#xff0c;对应的红点UI在销毁时需要注销对红点UI的显示回调注册&#xff0c;但是不销毁数据侧的红点注册 - …...

尼康VR镜头防抖模式NORMAL和ACTIVE的区别(私人笔记)

1. NORMAL 模式&#xff08;常规模式&#xff09; 适用场景&#xff1a;一般手持拍摄&#xff0c;比如人像、静物、风景或缓慢平移镜头&#xff08;如水平追拍&#xff09;等。工作特性&#xff1a; 补偿手抖引起的小幅度震动&#xff08;比如手持时自然的不稳&#xff09;&am…...

JMeter 中通过 WebSocket (WS) 协议发送和接收 Protocol Buffers (Proto) 消息

在 JMeter 中通过 WebSocket (WS) 协议发送和接收 Protocol Buffers (Proto) 消息&#xff0c;需要使用 JMeter WebSocket 插件&#xff0c;并结合 JSR223 脚本处理 Proto 的序列化和反序列化。以下是完整步骤&#xff1a; 1. 准备工作 1.1 安装 WebSocket 插件 下载插件&…...

从索引中排除 Elasticsearch 字段

作者&#xff1a;来自 Elastic Kofi Bartlett 说明如何配置 Elasticsearch 排除字段、为什么要这样做&#xff0c;以及应遵循的最佳实践。 更多阅读&#xff1a;Elasticsearch&#xff1a;inverted index&#xff0c;doc_values 及 source 想获得 Elastic 认证&#xff1f;了解…...

【Android】文件分块上传尝试

【Android】文件分块上传 在完成一个项目时&#xff0c;遇到了需要上传长视频的场景&#xff0c;尽管可以手动限制视频清晰度和视频的码率帧率&#xff0c;但仍然避免不了视频大小过大的问题&#xff0c;且由于服务器原因&#xff0c;网络不太稳定。这个时候想到了可以将文件分…...

超详细Docker教程

前言&#xff1a;大家在在Linux上部署mysql及其他软件时&#xff0c;大家想一想自己最大的感受是什么&#xff1f; 我相信&#xff0c;除了个别天赋异禀的人以外&#xff0c;大多数人都会有相同的感受&#xff0c;那就是麻烦。核心体现在三点&#xff1a; 命令太多了&#xff…...

Java项目拷打(外卖+点评)

一、点评星球&#xff08;黑马点评&#xff09; 1、项目概述 1.1、项目简介 本项目是基于Spring Boot与Redis深度整合的前后端分离的点评平台。系统以Redis为核心技术支撑&#xff0c;重点解决高并发场景下的缓存穿透、击穿、雪崩等问题&#xff0c;涵盖商户展示、优惠券秒杀…...

hadoop中了解yarm

Hadoop中的YARN&#xff08;Yet Another Resource Negotiator&#xff09;是一种新的Hadoop资源管理器&#xff0c;是一个通用资源管理系统&#xff0c;可为上层应用提供统一的资源管理和调度。以下是其相关介绍&#xff1a; 核心思想 将JobTracker的资源管理和作业调度/监控功…...

Android usb网络共享详解

Android usb网络共享详解 文章目录 Android usb网络共享详解一、前言二、USB网络共享使用的前提1、Android设备支持adb 并且打开usb开关2、原生Settings能看到USB网络共享开关3、代码中检测USB网络共享是否支持 三、Settings 中USB网络共享代码的部分代码1、Settings\res\xml\t…...

【数据库知识】Mysql进阶-高可用MHA(Master High Availability)方案

mysql高可用MHA&#xff08;Master High Availability&#xff09;方案 集群部署模式下的高可用方案一、高可用架构原理1. 核心组件2. 故障切换流程 二、详细部署步骤 (3节点集群)1. 环境准备2. 节点配置&#xff08;以 node1 为例&#xff09;3. 初始化集群4. 部署MySQL Route…...

Web 架构之会话保持深度解析

文章目录 一、引言二、会话保持的基本概念2.1 什么是会话2.2 为什么需要会话保持 三、会话保持的常见实现方式3.1 基于客户端的会话保持3.1.1 Cookie 方式3.1.2 URL 重写方式 3.2 基于服务器端的会话保持3.2.1 负载均衡器会话保持3.2.2 会话共享 四、会话保持可能遇到的问题及解…...

微信小程序仿淘宝拍照/照片点位识图、点位裁剪生图、图片裁剪组件、图片点位框选、裁剪生成图片,canvasToImg

实现效果 效果&#xff1a; 1.微信小程序仿淘宝拍照/照片点位识图、根据点位裁剪生图、图片可裁剪、图片高度可控 2.识别点位自动生成标准构图方案&#xff0c;支持手动微调实现像素级精准裁剪 3.可以根据接口识别的点位信息实现拍照/相册图片特征点自动识别并裁剪 实现步骤 …...

attention_weights = torch.ones_like(prompt_embedding[:, :, 0]):切片操作获取第二维度,第三维度

attention_weights = torch.ones_like(prompt_embedding[:, :, 0]):切片操作获取第1 维度,第二维度 attention_weights = torch.ones_like(prompt_embedding[:, :, 0]) 这行代码的作用是创建一个与 prompt_embedding[:, :, 0] 形状相同且所有元素都为 1 的张量,它用于初始化…...

Rust入门之高级Trait

Rust入门之高级Trait - 本文源码 引言 前面学习了迭代器&#xff08;Iterators&#xff09;&#xff0c;Iterator源码中就用到了关联类型的功能。关联类型就属于高级trait的内容&#xff0c;这次我们学习一下高级trait&#xff0c;了解关联类型等知识。关联类型看似和泛型相…...