#include <stdio.h>
#include <stdlib.h>
// 线性表结构体
typedef struct Node {
int data; // 使用 int 数据类型来存储整数
struct Node* next; // 下一个节点的指针
} Link;
// 创建链表的函数,从用户输入构建链表,输入 -1 时停止
Link* creatTailList() { // 尾插法带头节点
Link *head = NULL; // 头指针
Link *last = NULL; // 上一个节点指针
int x;
printf("请输入数值,输入 -1 结束:\n");
scanf("%d", &x);
while (x != -1) { // 1.赋值 2.改前指针 3.改变 s、r
Link *newNode = (Link*)malloc(sizeof(Link));
newNode->data = x; // 从输入中获取值并存储到新节点
newNode->next = NULL; // 新节点的下一个指针设为空
if (head == NULL) { // 如果链表为空
head = newNode; // 第一个节点赋值给头指针
} else {
last->next = newNode; // 上一个节点的下一个指针指向新节点
}
last = newNode; // 更新上一个节点为新节点
scanf("%d", &x);
}
return head; // 返回头指针
}
Link* getElem(Link* L, int i) {
Link *p = L;
int j = 0;
while (p && j < i) {
p = p->next;
j++;
}
return p; // 返回第 i 个节点
}
void printList(Link* L) {
Link* p = L; // 使用指针遍历列表
while (p != NULL) {
printf("%d ", p->data); // 打印当前节点的数据
p = p->next; // 移动到下一个节点
}
printf("\n");
}
int main() {
Link* list = creatTailList(); // 创建链表
printf("线性表的元素为:\n");
printList(list); // 打印列表
int index;
printf("请输入要获取元素的索引 (从 0 开始): ");
scanf("%d", &index); // 获取用户输入的索引
Link* elem = getElem(list, index); // 获取指定位置的元素
if (elem != NULL) {
printf("索引 %d 处的元素为: %d\n", index, elem->data); // 输出结果
} else {
printf("没有找到索引 %d 的元素.\n", index); // 如果不存在该位置的元素
}
// 释放链表的内存
Link *temp;
while (list != NULL) {
temp = list; // 保存当前节点指针
list = list->next; // 移动到下一个节点
free(temp); // 释放当前节点
}
return 0;
}
相关推荐
MATLAB绘图中文乱码终极解决方案:从方框到清晰显示的全面指南
本文提供了MATLAB绘图中文乱码的全面解决方案。针对中文显示为方框的问题,从单次绘图的临时字体设置,到通过修改默认配置实现一劳永逸,再到系统级字体排查与Java环境配置,给出了详细的步骤指南。文章还涵盖了字体名称指定、图像导出防丢失以及跨平台协作等高级技巧,帮助用户彻底解决中文乱码困扰。
Day 3 链表理论基础 203.移除链表元素 707.设计链表 206.反转链表
链表和数组都是用来存储数据的常用数据结构,但它们在内存分配、性能和操作上有着本质的区别。下面是链表和数组之间的一些主要区别:(转自Chatgpt4)建议: 这是一道考察 链表综合操作的题目,不算容易,可以练一练 使用虚拟头结点。建议: 本题最关键是要理解 虚拟头结点的使用技巧,这个对链表题目很重要。Python,有自己的内存回收机制,就不用自己手动释放内存。根据应用场景的不同,选择最合适的数据结构非常重要。建议:了解一下链接基础,以及链表和数组的区别。● 203.移除链表元素。● 707.设计链表。
WPF MVVM实战:构建可绑定的RichTextBox富文本编辑器
本文详细介绍了如何在WPF MVVM模式下构建可绑定的RichTextBox富文本编辑器,解决标准RichTextBox.Document属性不支持数据绑定的问题。通过创建自定义BindableRichTextBox控件,实现FlowDocument的绑定支持,并分享插入图片、文本格式控制等实战技巧,帮助开发者高效开发富文本编辑功能。
链表基础知识详解
链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。 ## 2.链表的组成 --- 链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,操作复杂。由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而线性表和顺序表相应的时
Ships Dataset:解锁海洋探索的数字宝库
在海上交通管理中,通过对船舶的持续跟踪,可以及时发现船舶的异常行为,如偏离航线、超速等,保障海上航行的安全。例如,通过分析船舶的航行数据和位置信息,合理安排船舶的停靠时间和装卸货物顺序,避免港口拥堵,提高船舶的周转率。同时,还精确标注了船舶在图像中的位置坐标,通过这些坐标,我们可以准确地定位船舶在图像中的具体位置,为后续的分析和处理提供了精确的依据。从繁忙运输货物的货船,到承载着能源使命的油轮,再到穿梭于海洋寻找鱼群的渔船 ,每一种船舶都有着独特的外形和功能,在数据集中留下了它们的身影。
FreeSWITCH编译安装详细文档
本文档详细介绍了在Ubuntu 22.04系统上从源码编译安装FreeSWITCH的完整流程。主要内容包括:1)系统环境准备和依赖库安装;2)关键依赖库spandsp和sofia-sip的编译安装;3)FreeSWITCH源码的特定版本(v1.6.0)编译配置,包括禁用SignalWire模块的配置方法;4)系统服务配置,包括创建专用用户、设置权限以及配置systemd服务文件。文档特别提供了版本控制说明,确保后期能切换到相同的版本环境,并附有详细的命令操作步骤和注意事项。
Python链表基础
本文介绍了Python中链表的基础知识。链表是由节点组成的线性数据结构,每个节点包含数据域和指针域。与数组不同,链表采用非连续存储,访问效率为O(n),但插入/删除操作仅需O(1)。文章详细讲解了链表的创建方法,包括定义ListNode类和使用指针操作。重点阐述了三种插入操作:头节点插入(更新head指针)、尾节点插入(遍历或直接修改)和中间插入(找到前驱节点)。删除操作通过修改指针指向实现,特别强调了对尾节点的特殊处理。这些基本操作为理解和实现更复杂的链表算法奠定了基础。
Pixel 6 Pro升级Android 13变砖急救指南:Fastboot全分区修复实战
本文提供Pixel 6 Pro升级Android 13变砖后的Fastboot全分区修复实战指南,详细解析变砖原因、必备工具准备、Fastboot模式解锁、全分区擦除操作及手动刷入官方ROM的完整流程,帮助用户高效解决设备变砖问题。
【leetcode 力扣刷题】链表基础知识 基础操作
删除节点时,将被删除节点的前面节点和后面节点连接起来的同时,断开被删除节点和其前面一个、后面一个节点的连接,并且要释放掉被删除节点的空间:pre->next = cur->next;delete cur。在链表中的一个位置插入节点,需要先断开插入位置前后两个节点的链接,再和这两个节点建立新的链接:先cur->next = pre->next;构成的,数据域是一个节点的数据,指针域存储下一个节点的地址,下一个节点依靠上一个节点的指针域寻址。将尾节点看作是下一个节点是null的节点,处理和其他节点一样。
三相SVPWM逆变器双闭环PI解耦控制:从dq坐标系到参数整定实战
本文深入解析了三相SVPWM逆变器的双闭环PI解耦控制技术。通过引入dq坐标系,将交流量转换为直流量,并结合前馈补偿实现电流环的解耦控制。文章详细阐述了从数学模型推导、控制器设计到参数整定与SVPWM实现的完整流程,为工程师提供了从理论到实战的系统性指导。
使用curl命令出现fatal: unable to access ‘https://github.com/nvm-sh/nvm.git/‘: Encountered end of file的解决方案
本文主要介绍了使用curl命令出现fatal: unable to access ‘https://github.com/nvm-sh/nvm.git/’: Encountered end of file的解决方案,希望能对使用curl命令的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案
C语言链表基础
基础向,主要讲解关于链表这种数据结构的初始化和各种操作,适合小白快速上手或者作为笔记查阅。
进阶篇第8节:寄存器压力——寄存器溢出对性能的影响及优化
**摘要:GPU寄存器是最快的存储单元(1周期访问),但数量有限。过高的寄存器使用会导致溢出(变量存入慢速本地内存)或降低占用率(减少并发线程数),严重影响性能。优化方法包括复用变量、使用共享内存替代寄存器数组、限制寄存器数量(--maxrregcount)等。实际测试显示,将寄存器使用从48个降至24个可使性能提升37%。分析工具如Nsight Compute可帮助检测寄存器压力。面试常见问题涉及寄存器溢出的检测与优化策略。
链表基础知识
链表结构是内存内部的一种存储方式,可以把链表结构想象成是一串节点,由若干个节点穿成一串的数据结构。每个节点都有两个区域:数据域和指针域。指针域指向下一个节点的地址。下一个节点也是包含一个数据域和一个指针域。在链表结构中,之所以能成为链表结构,是因为有一个指针域。指针域存储的是下一个节点的引用(相关的引用) 指针域: c->内存中的一个地址,地址可以唯一标记一个节点的位置 某些特殊的写法,指针域可能存储的是数组下标。数组下标是特殊的地址。下标是相对地址的概念。 引用:js,Java,python 在相关
LinePhone3.2.7(android端最新版本) sip客户端
SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/
visio安装包
Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。
Java基础课 | 链表的基础操作I
Java基础课,链表、链表节点、方法的定义、插入和打印操作
ssm框架搭建
这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载
链表基础练习(C语言实现)
回文链表,本质即为以中间节点为对称轴,如果中间节点的左右部分完全相等,则证明该链表为回文链表,根据这个特点,可以考虑思路:因为回文链表以中间节点为对称轴,所以先找到中间节点,因为中间节点的左右部分完全相等,所以将中间节点的后部分链表反转再与原链表的节点中的val进行比较,如果相等即为回文链表,不相等则不为回文链表。带头双向链表优化了四个指针为空的问题,为四个指针单独开辟两个空间作为头结点,遇到大于或者等于x的尾插到大链表的头结点处,遇到小于x的尾插到小链表的头节点处,此时不需要单独处理第一个节点。
【数据结构】链表入门基础题
最近笔者正在准备实验室的考核,用一些时间简单刷了一些leetcode中的简单链表题,其中遇到了些许问题并通过自己的思考加以解决,现以此博客写下自己的题解并记录自己刷题的心得。如有错误,请不吝指出。为了方便读者写博客,也为了方便读者读博客,现在下方放出笔者定义的链表存储结构与用尾插法创建链表的代码链表存储结构 尾插法创建链表 二、链表的基础操作 首先在做题之前,希望读者能够仔细阅读以下的基础操作,后续笔者的例题与以下的操作息息相关思路: ①声明一个指针指向链表第一个有效节点,也就是头结点后面的第一个结点。初始
链表基础算法题
1.反转链表(重点) 反转链表: 输入一个链表的头节点,反转该链表并输出反转后链表的头节点。 假设链表为 1→2→3→∅,反转后为 ∅←1←2←3。 在遍历链表时,将当前节点的next指针改为指向前一个节点。 由于节点没有引用其前一个节点,因此必须事先存储其前一个节点。 在更改引用之前,还需要存储后一个节点。最后返回新的头引用。 public ListNode reverseList(ListNode head) { ListNode pre=null; Li
Java基础之链表
链表(Linked list)一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到是下一个节点的指针(Pointer)。 链表 一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据, 而是在每一个节点里存到是下一个节点的指针(Pointer)。 链表与数组:线性数据结构 数组适合查找,遍历,固定长度 链表适合插入,删除,不宜过长,否则会导致...
Java链表基础
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 一、pandas是什么? 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。 二、使用步骤 1.引入库 代码
链表基础功能应用总结
链表基础功能应用 /*链表基础功能应用*/ #include<iostream> #include<cstdlib> #include<ctime> #include<string> using namespace std; //构建数据收纳盒(存储数据) struct data { int number; string name;...
算法练习day3链表基础1移除链表元素、设计链表、反转链表
小记:链表由指针域和数据域部分。循环链表:解决约瑟夫环问题。使用默认构造函数初始化节点。查找节点要循环遍历链表。
算法基础之链表理论
算法基础之链表理论1.链表基础定义2.链表增删改查2.1基本功能2.2链表添加元素2.3链表遍历、查询、更新2.4链表删除元素3.静态链表4.双向链表5.单向循环链表6.双向循环链表 1.链表基础定义 之前已经把两大数据结构之一的数组总结了,这次就来总结另一个——链表(Linked List)。首先动态数组、栈和队列的底层都是依托于静态数组的;靠resize来解决固定容量问题,这可能会造成内存空间的大量浪费(比如当数组满了后,会自动加倍容量,但如果没有继续添加元素,其实是有多一倍的容量浪费了);插入和删除
链表理论基础
链表基础
链表基础和应用
2017-8-7 链表基础和应用 完成复习时间 2017-8-7 10点 学习的知识点: 1、链表:动态进行存储分配的数据结构,相对数组来说,节约空间,方便插入数据。 2、堆空间相关函数://包含stdlib.h malloc:内存申请,成功返回分配空间的首地址,失败NULL,只归用户管,用前要清空,用完要释放 调用格式:(类型说明符 *)malloc(size);//申请开辟size
614



被折叠的 条评论
为什么被折叠?



