线性表--- 链表

线性表(链表实现) 链式存储结构的线性表 前言 线性表用链式存储结构来实现,借助的是链表。链表有单链表,循环链表,双向列表,本文主要记录的是带表头结点的单链表,具体原因之后再说,关于链表的理解我想通过数组来参照。 对于链表来说,最小单位是结点 struct Node { int element; struct Node *link; }; 相比于数组的元素,对于单个结点来说,不仅有存储数据元素信息的数据域... 阅读详情

维基百科:

http://zh.wikipedia.org/wiki/%E9%93%BE%E8%A1%A8

线性表的链式存储结构

线性表顺序存储结构特点:

它是一种简单、方便的存储结构。它要求线性元素的数据元素依次存放在连续的存储单元中。

暴露的问题:

1. 在做插入或删除元素的操作时,会产生大量的数据元素移动。

2. 对于长度变化的线性表,要一次性地分配足够的存储空间,但这些空间常常又不到充分的利用。

3.线性表的容量难以扩充。

VC project 练习:

// link_list.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <stdlib.h>

typedef int ElemType;

typedef struct node {
	ElemType elem;
	struct node* next;
} NODE;

typedef struct {
	NODE *head;
} LINK_LIST;

int init_linklist(LINK_LIST* L)
{
	L->head = (NODE*)malloc(sizeof(NODE));
	if(L->head)
	{
		L->head->next = NULL;
		return 0;
	}
	else
		return 1;
}

void destorylist(LINK_LIST* L)
{
	NODE* p;
	while(L->head)
	{
		p = L->head;
		L->head = L->head->next;
		free(p);
	}
}

int listlength(LINK_LIST* L)
{
	int length = 0;
	NODE* p;

	for(p = L->head; p->next != NULL;p = p->next,length ++);
	return length;

}

int isListEmpty(LINK_LIST* L)
{
	if(L->head->next == NULL)
		return true;
	else
		return false;
}

ElemType getListElem(LINK_LIST* L,int iPosition)
{
	NODE* p;
	int i;

	for(i=0,p=L->head;i != iPosition; i++)
	{
		p = p->next;
	}

	return p->elem;
}

//insert element to the link list at the position of i
void ListInsert(LINK_LIST* L,int iPosition, ElemType elem)
{
	NODE* p,*q;
	int i;

	for(i=0, p=L->head; i < iPosition; p = p->next,i++);
	
	q = (NODE*)malloc(sizeof(NODE));

	q->elem = elem;
	q->next = p->next;
	p->next = q;
	
}

void ListGenerate(LINK_LIST* L)
{
	NODE* p,*q;
	int i;
	
	for(i=0,p = L->head;i<10;i++, p = p->next)
	{
		q = (NODE*)malloc(sizeof(NODE));

		q->elem = i;
		q->next = p->next;
		p->next = q;
	}	
}

int main(int argc, char* argv[])
{
	LINK_LIST* linklist_A;
	int i;
	
	linklist_A = (LINK_LIST*)malloc(sizeof(LINK_LIST));

	init_linklist(linklist_A);

	ListGenerate(linklist_A);

	//print linklist a content
	for(i=1;i<=listlength(linklist_A);i++)
		printf("%d\n",getListElem(linklist_A,i));

	ListInsert(linklist_A,6,200);

	//print linklist a content
	printf("==================== \n");
	for(i=1;i<=listlength(linklist_A);i++)
		printf("%d\n",getListElem(linklist_A,i));	//printf("Hello World!\n");

	system("pause");
	return 0;
}


基于Q-learning的无人机三维路径规划(含完整C++代码) 阅读详情

相关推荐

876-基于STM32的毫米波雷达智能睡眠监测系统

基于STM32的毫米波雷达智能睡眠监测系统通过非接触式毫米波雷达检测人体呼吸频率和体动次数,结合WIFI数据传输和OLED显示,实现睡眠质量分析与远程监控。系统核心功能包括生理参数采集、阈值设置、数据可视化及远程交互。

m0_50083169的博客 1543

线性表与链表

本文系统介绍了线性表的两种存储结构:顺序存储和链式存储。

2302_79695841的博客 1693

Catia二次开发QueryInterface的操蛋问题

探索了很久,尝试录制宏,打开部件属性窗口,然后随意设置一些属性(必须改变一些东西才能录制成功,否则不会录制到任何东西),再看录制的结果,发现原来CATIAAnalyze是从Product那里来的。例如获得一个部件的体积,找到相关接口CATIAAnalyze,但是这个部件的CATIAAnalyze的对象不知道如何获取。总结一下,写Catia二开代码,就像漂亮国那款《莫里秀》 又名《爸爸死哪了》的综艺节目,大部分时间都是在找爸爸!Catia二开很痛苦,明明已经找到接口类,但是却不知道怎么获得这个接口类的对象。

gergul的专栏 746

用链表实现线性表

用链表实现线性表 正如上一篇看到,使用数组实现ADT线性表既有优点也有优点。数组的长度可以是固定的,也可以动态扩展数组,但每次动态扩展数组时,都需要移动数据。不管是定长的数组还是可扩展的动态数组,在需要为新元素腾出空间或者弥合删除后留下的间隙时,都要求移动数据。而基于链表实现的线性表可以避免移动数据,并且在插入和删除操作上需要更少的开销,反而查找速率降低了。

hjy的博客 1293

LBS之五:时空索引--空间邻域搜索的高效实践

时空索引的原理及最佳实践

whascj的博客 1365

SCL3400硬件避坑指南:引脚兼容性测试+模式切换异常处理

本文针对村田SCL3400双轴倾角计在实际硬件设计中的常见问题,提供了详细的避坑指南。重点解析了从SCL3300迁移时的引脚兼容性真相,包括SPI时序、电源去耦等关键差异,并深入探讨了模式切换中超量程错误的复现原因与软件容错方案。同时,指导了如何根据应用场景配置低通滤波器,并给出了无自动唤醒功能下的可靠电源与长线SPI通信管理策略。

weixin_29190573的博客 292

【线性表,线性表中的顺序表和链表】

线性表是具有相同数据类型的n(n>0)个数据元素的有限序列。存在唯一的第一个元素;存在唯一的最后一个元素;除第一个元素外,每个元素均只有一个直接前驱;除最后一个元素外,每个元素均只有一个直接后继;【直接前驱】:指在该序列中位于其前面且紧邻的元素;【直接后继】:指在该序列中位于其后面且紧邻的元素。例如:在一个整数数组[1,5,8,10,49]中,元素8的直接前驱为5,直接后继为10。

Pumpkin_O的博客 2959

YOLOv11增量学习数据回放优化:解决新类别引入时的灾难性遗忘问题

本文提出了一种基于生成式潜在回放和提示学习的YOLOv11增量学习系统,旨在解决目标检测中的灾难性遗忘问题。系统采用改进的YOLOv11骨干网络,结合条件变分自编码器生成旧类别特征,并通过渐进式提示调优模块实现高效参数更新。关键技术包括:1) C3k2模块和C2PSA注意力增强特征提取;2) CLIP引导的VAE潜在空间数据回放;3) 类特定与超类别提示相结合的增量调优策略;4) 自适应特征金字塔与显式视觉中心融合机制。实验表明,该方法在保持原有检测性能的同时,显著降低了增量学习过程中的遗忘现象。

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 2101

线性表_单向链表

数据结构 线性表 零个或多个数据元素的有限排列 数据元素可以为空 数据元素有限 数据元素之间的逻辑接口为线性结构 数据元素类型一致 顺序线性表 使用连续的内存存储单元防止线性数据元素 数组 链式线性表 数据元素可以随意存储在某个存储单元 每个节点会包含其他的节点的地址 单向链表 ( 每个节点除了数据元素,还包含一个指向一个指向下一个节点的指针) 双向链表 ( 每个节点除了...

G_ZZH的博客 383

JavaScript(JS)、ECMAScript(ES)和TypeScript(TS)

JavaScript、ECMAScript和TypeScript是现代Web开发中不可或缺的技术。它们各自具有独特的特点和优势,相互补充,共同推动着Web开发的发展。了解它们的概念、特点、应用场景和发展历程,有助于我们更好地掌握和使用这些技术,提高开发效率,实现更高质量和更可靠的Web应用。

u013558123的博客 1718

【第一章】基于Simulink的控制器开发教程——目录

摘要:本文系统介绍了基于Simulink的控制器开发方法,涵盖PID、状态反馈、模型预测(MPC)、模糊控制、自适应控制等8类主流控制器。针对每种控制器,详细阐述了其基本原理、适用场景,并通过Simulink建模与仿真测试进行实践验证。文章采用"理论+实践"的结构,从算法设计到硬件实现全流程展开,为汽车、航空航天、工业控制等领域的控制器开发提供完整解决方案,最后通过应用对比与学习总结帮助读者掌握不同控制器的核心特性和应用场景。(149字)

熟悉MATLAB/fpga/RK3588/LABVIEW/protus/单片机/dsp/Multisim 385

链表和线性表的优缺点

线性表和链表的小结

m0_72563041的博客 3017

LAMMPS实例教程—In文件详解

本博文主要介绍专栏 《LAMMPS实例教程—In文件详解》, 针对于 Lammps 可分析的物理过程进行讲解,提供 In 文件以及后处理方法,持续更新。 目前分为8个专题: 1)力学专题、2)传热专题、3)相变专题、4)界面专题、5)吸附专题、6)流动专题、7)物性专题以及8)基础理论专题。

Rockyoung 3万+

【数据结构——线性表之链表】

线性表之《链表的表示及基本操作的实现》 目录线性表之《链表的表示及基本操作的实现》一、单链表(一)单链表的描述(一)单链表的操作实现1、初始化2、查找3、插入4、删除二、循环链表三、循环链表 一、单链表 (一)单链表的描述 typedef struct LNode { ElemType data;//结点数据域 struct LNode* next;//结点指针域 }LNode ,*LinkList; 变量定义: LNode* p, * q LinkList L; p, q, L都是指针变量,

lflcodeplus的博客 2689

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

线性表:顺序表、链表

线性表,线性表和链表的区别 存储类别 顺序存储结构单链表 存储分配方式 用一段连续的存储单元依次存储线性表的数据元素 采用链式存储结构,用一组任意的存储单元存放线性表的元素 时间性能 查找O(1)、插入和删除O(n) 查找O(n)、插入和删除O(1) 空间性能 需要预分配存储空间,分大了浪费,小了容易发生上溢 不需要分配存储空间,只要有就可以分配,元素个数不受限制 通过上面的对比,可以得出一些经验性的结论: 若线性表需要频繁查找,很少进行插入和删除操作时,宜采用顺序存储结构。若需要频

renjie123321的博客 1643

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

线性表,线性表和链表的区别

一、主要区别 存储类别 顺序存储结构 单链表 存储分配方式 用一段连续的存储单元依次存储线性表的数据元素 采用链式存储结构,用一组任意的存储单元存放线性表的元素 时间性能 查找O(1)、插入和删除O(n) 查找O(n)、插入和删除O(1) 空间性能 需要预分配存储空间,分大了浪费,小了容易发生上溢 不需要分配存储空间,只要有就可以分配,元素个...

铁柱的博客 2840

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

线性表之链表

为了表示每个数据元素ai与其直接后继数据元素ai+1之间的逻辑关系,对数据元素ai来说,除了存储其本身的信息之外,还需存储一个指示其直接后继的信息(即直接后继的存储位置)。 数据域:我们把存储数据元素信息的域称为数据域。 指针域:存储直接后继位置的域称为指针域。 指针/链:指针域中存储的信息称做指针或链。 结点(Node):数据域与指针域这两部分信息组成数据元素ai的存储映像,称为结点(N...

TROYE_Sn的博客 356

线性表之数组和链表

了解线性表,然后对数组和链表进行介绍,知道他们的区别和联系。

qq_43771093的博客 1259

线性表-单向链表

线性表 动态数组(切片)、链表、栈、队列都属于线性结构。 线性表是零个或者多个数据元素的有限序列,数据元素之间是有顺序的,数据元素个数是有限的,数据元素的类型是相同的。 头节点只有一个后继节点,尾节点只有一个前继节点,中间节点既有前继节点又有后续节点。 线性表的抽象数据类型定义 ADT线性表(List) Data 线性表的数据对象集合为{ a1, a2, ……, an },每个元素的类型均为Dat...

磨镜台的博客 237

《线性表、顺序表与链表》教案(C语言版本)

定义:线性表是n个具有相同特性的数据元素的有限序列,逻辑上连续,物理上可连续(顺序表)或不连续(链表)。实现动态顺序表的缩容功能(当元素数量小于容量的1/4时,容量减半)。对比单向链表和双向链表在删除尾节点时的时间复杂度差异。:顺序表的动态增容、链表的指针操作、时间复杂度分析。:链表节点的插入与删除逻辑、顺序表与链表的性能权衡。:合并两个有序链表,返回新的有序链表头节点。能够通过代码实现顺序表和链表的基本功能。掌握顺序表和链表的实现原理及核心操作。顺序表和链表的实现原理及适用场景。

maomi_9526的博客 2883

线性表的双向链表实现

在我上一篇博客里面给出了线性表的单向链表实现,这一篇将给出线性表的双向链表的实现,在这之前,我们先来比较一下线性表的顺序结构和非顺序结构的优缺点,以及非顺序结构中单向链表和双向链表的优缺点。 ...

全村最靓的仔 395

双向链表实现线性表

### 数据结构必知 - 数据结构的逻辑结构分为集合结构、线性结构、树形结构、图形结构。 - 数据结构的存储结构分为顺序结构、链式结构、索引结构、散列结构。 - 常见的八大数据结构有数组(Array)、栈(Stack)、队列(Queue)、链表(Linked List)、树(Tree)、图(Graph)、散列表(Hash)。

十二翼堕落天使 810

java 线性表和链表_线性表——数组与链表

概要线性表是一种线性结构,它是具有相同类型的n(n≥0)个数据元素组成的有限序列。本文先介绍线性表的几个基本组成部分:数组、单向链表、双向链表;随后给出双向链表的Java语言的实现。数组数组是一种最常用的线性数据结构,里面存放的元素的类型是一样的,并且有序的。数组的特点是:数据是连续的;随机访问速度快。对于Java而言,Collection集合中提供了ArrayList和Vector用于数组这种数...

weixin_31110189的博客 182
上一篇: 深入理解访问结构体成员的方法
下一篇: 配置 linux kernel 特性
windtakers
博客等级 码龄17年 94粉丝 197原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值