问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

c语言 链表是什么。书上的没看太懂

发布网友 发布时间:2022-04-28 21:32

我来回答

1个回答

热心网友 时间:2022-06-23 07:11

由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表:顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而顺序表相应的时间复杂度分别是O(logn)和O(1)。使用链表结构可以克服数组链表需要预先知道数据大小的缺点,链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。但是链表失去了数组随机读取的优点,同时链表由于增加了结点的指针域,空间开销比较大。在计算机科学中,链表作为一种基础的数据结构可以用来生成其它类型的数据结构。链表通常由一连串节点组成,每个节点包含任意的实例数据(data fields)和一或两个用来指向明上一个/或下一个节点的位置的链接("links")。链表最明显的好处就是,常规数组排列关联项目的方式可能不同于这些数据项目在记忆体或磁盘上顺序,数据的存取往往要在不同的排列顺序中转换。而链表是一种自我指示数据类型,因为它包含指向另一个相同类型的数据的指针(链接)。链表允许插入和移除表上任意位置上的节点,[1]但是不允许随机存取。链表有很多种不同的类型:单向链表,双向链表以及循环链表。链表可以在多种编程语言中实现。像Lisp和Scheme这样的语言的内建数据类型中就包含了链表的存取和操作。程序语言或面向对象语言,如C,C++和Java依靠易变工具来生成链表。 [编辑本段]特点 线性表的链式存储表示的特点是用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的)。因此,为了表示每个数据元素 与其直接后继数据元素 之间的逻辑关系,对数据元素 来说,除了存储其本身的信息之外,还需存储一个指示其直接后继的信息(即直接后继的存储位置)。由这两部分信息组成一个"结点"(如概述旁的图所示),表示线性表中一个数据元素 。 [编辑本段]扩展 根据情况,也可以自己设计链表的其它扩展。但是一般不会在边上附加数据,因为链表的点和边基本上是一一对应的(除了第一个或者最后一个节点,但是也不会产生特殊情况)。不过有一个特例是如果链表支持在链表的一段中把前和后指针反向,反向标记加在边上可能会更方便。 对于非线性的链表,可以参见相关的其他数据结构,例如树、图。另外有一种基于多个线性链表的数据结构:跳表,插入、删除和查找等基本操作的速度可以达到O(nlogn),和平衡二叉树一样。 其中存储数据元素信息的域称作数据域(设域名为data),存储直接后继存储位置的域称为指针域(设域名为next)。指针域中存储的信息又称做指针或链。 由分别表示,,…, 的N 个结点依次相链构成的链表,称为线性表的链式存储表示,由于此类链表的每个结点中只包含一个指针域,故又称单链表或线性链表. [编辑本段]三个链表函数(C语言描述) #include #include struct Node{ int data;//数据域 struct Node * next;//指针域 }; /************************************************************************************** *函数名称:insert *函数功能:在链表中插入元素. *输入:head 链表头指针,p新元素插入位置,x 新元素中的数据域内容 *输出:无 *************************************************************************************/ void insert(Node * head,int p,int x){ Node * tmp = head; for(int i = 0;inext; if(tmp == NULL) return ; } Node * tmp2 = new Node; tmp2->data = x; tmp2->next = tmp->next; tmp->next = tmp2; } /************************************************************************************** *函数名称:del *函数功能:删除链表中的元素 *输入:head 链表头指针,p 被删除元素位置 输出:被删除元素中的数据域.如果删除失败返回-1 **************************************************************************************/ int del(Node * head,int p){ Node * tmp = head; for(int i = 0;inext; if(tmp == NULL) return -1; } int ret = tmp->next->data; tmp->next = tmp->next->next; return ret; } void print(Node *head,Node * root){ for(Node *tmp = head; tmp!=NULL; tmp = tmp->next) printf("%d ",tmp->data); printf("\n"); } int main(){ Node * head; head = new Node; head->data = -1; head->next=NULL; return 0; } [编辑本段]结语 C语言是学习数据结构的很好的学习工具。理解了C中用结构体描述数据结构,那么对于理解其C++描述,Java描述都就轻而易举了! [编辑本段]两种链表形式 一、循环链表 循环链表是与单链表一样,是一种链式的存储结构,所不同的是,循环链表的最后一个结点的指针是指向该循环链表的第一个结点或者表头结点,从而构成一个环形的链。 循环链表的运算与单链表的运算基本一致。所不同的有以下几点: 1、在建立一个循环链表时,必须使其最后一个结点的指针指向表头结点,而不是象单链表那样置为NULL。此种情况还使用于在最后一个结点后插入一个新的结点。 2、在判断是否到表尾时,是判断该结点链域的值是否是表头结点,当链域值等于表头指针时,说明已到表尾。而非象单链表那样判断链域值是否为NULL。 二、双向链表 双向链表其实是单链表的改进。 当我们对单链表进行操作时,有时你要对某个结点的直接前驱进行操作时,又必须从表头开始查找。这是由单链表结点的结构所*的。因为单链表每个结点只有一个存储直接后继结点地址的链域,那么能不能定义一个既有存储直接后继结点地址的链域,又有存储直接前驱结点地址的链域的这样一个双链域结点结构呢?这就是双向链表。 在双向链表中,结点除含有数据域外,还有两个链域,一个存储直接后继结点地址,一般称之为右链域;一个存储直接前驱结点地址,一般称之为左链域。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
绩效工资从工资里扣合法吗 无人机电机轴的主要功能有哪些? 闽侯南通多久发展 南通哪个位置最有潜力 南通未来的机遇有哪些 江苏南通的发展前景怎么样 南通这座城市未来发展前景怎样 我女儿阳历08年01月08日出生,{农历07年腊月初一}请高人帮忙改个名字... 我女儿是2012年1月10日10:35分出生的五行缺什么,取什么名字好 这种图片效果怎么做出来的,不是纯白板,仔细看有一个个均匀分布的小圆点... 用c++和java的类怎么实现c语言链表功能? 堆栈、静态区、堆这三者有什么区别呢,在C语言或java中有区别吗 解释下C语言数组和链表,最好通俗点。 C语言中链表与队列有什么区别? 怎样挑选五花肉 在C语言中数组和链表有什么区别? C语言 线性表和链表有什么区别 链表是什么!那个编程语言中有的,和数组有什么区别 面向对象的数据结构与c语言描述的数据结构有何区别? java的数组和C语言数组有什么区别 急需土木工程本科毕业论文,厂房设计,预算方面,要有工程图 linux查看是否有zookeeper 如何在一台linux机器上安装zookeeper集群 怎么在墙上拧螺丝 如何在水泥墙上固定螺丝 linux 搭建zookeeper 集群必须关闭防火墙吗 生铁螺丝钉能钉么 别墅建筑 在墙上钉螺丝钉 在墙上打个孔后要塞个什么东西进去再上螺钉? 融资租赁等期不等额还款,是否可以用irr公式计算? 如何选五花肉 怎么样能买到最好的五花肉 五花肉怎么挑选 买肉时怎样挑选正宗的五花肉? 五花肉怎么买 五花肉怎么弄好吃 公务员提前退休工资如何计算 公务员提前退休能拿多少工资 公务员35年提前退休和正常退休工资差别? 公务员提前退休2021年新政策 公务员提前退休能拿多少工资? 公务员满20年工龄后,提前退休的工资是多少比例? 公务员提前退休的待遇有哪些规定? 公务员52岁与59岁提早退休待遇一样吗? 公务员退休能拿多少钱 公务员30年工龄提前退休政策 公务员提前退休亏不亏? 公务员退休规定是什么 最新公务员退休几年后,组织又明确可享受高一级职务待遇,其养老金怎么算?_百度问一问 公务员35年提前退休和正常退休工资差别