以图明志

数据结构

[专题] 结构之美:定义一个线性表

从最简单的线性表开始讲起
在计算机中,数据并不是孤立的,而是具有一定内在联系的数据集合,这种联系就是数据结构,说明数据如何被组织在一起的。下面我们从最简单的线性表开始讲起。线性表是最基本、最简单、也是最常用的一种数据结构。线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的。

数据结构

[专题] 结构之美:线性表的查找、插入与删除操作

顺序存储结构的操作
查找线性表是最基本的操作之一,比如根据序号查找元素的值,或者根据值查找该值是否在线性表中,如果在,那么序号是几等等。分析上述插入和删除两段代码和更早的获取元素代码,我们可以发现,线性表的顺序存储结构,在存/读数据时,不管是哪个位置,时间复杂度O(1),而插入或删除时,时间复杂度都是O(n)。

数据结构

线性表的概念、结构与基本操作

线性表概览
什么是线性表?线性表是最基本、最简单、也是最常用的一种数据结构。线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的。线性表的逻辑结构简单,便于实现和操作。因此,线性表这种数据结构在实际应用中是广泛采用的一种数据结构。

数据结构

[专题] 结构之美:线性表的链式存储结构——链表

链表的详细了解
线性表的链式存储表示的特点是用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的)。因此,为了表示每个数据元素与其直接后继数据元素 之间的逻辑关系,对数据元素来说,除了存储其本身的信息之外,还需存储一个指示其直接后继的信息(即直接后继的存储位置)。由这两部分信息组成一个“结点”,表示线性表中一个数据元素 。

数据结构

线性表的几个链式储存结构介绍

单链表,循环链表与双向链表
线性表的顺序存储结构要求逻辑关系上相邻的元素在物理位置上也相邻,这样方便了随机存取,但是在插入和删除元素时,需要移动大量元素,而线性表的链式存储则不要求逻辑上相邻的元素在物理位置上也相邻,因此它没有顺序存储结构的可随机存取的优点,不过在插入和删除元素时比较方便。

数据结构

[专题] 结构之美:单链表的初始化、创建与遍历

写一个简单的单链表
前面已经对单链表做了一些解释。链表在进行循环遍历时效率不高,但是插入和删除时优势明显。单链表实际上是由节点(Node)组成的,一个链表拥有不定数量的节点。而向外暴露的只有一个头节点(Head),我们对链表的所有操作,都是直接或者间接地通过其头节点来进行的。节点(Node)是由一个需要储存的对象及对下一个节点的引用组成的。

数据结构

[专题] 结构之美:单链表的头结点与头指针

理解单链表的两个重要概念
当链表的每个结点只包含一个指针域时,我们称此链表为单链表。关于单链表的存取,有时候我们在单链表的第一个结点(有效元素)之前附设一个结点,称之为头结点;指向头结点的指针,称之为头指针;对单链表的存取必须从头指针开始进行,由于单链表的最后一个数据元素没有直接后继,则指针为NULL。

数据结构

带头结点与不带头结点的单链表初始化

带头结点与不带头结点
不带头结点的单链表对于第一个节点的操作与其他节点不一样,需要特殊处理,这增加了程序的复杂性和出现bug的机会,因此,通常在单链表的开始结点之前附设一个头结点。带头结点的单链表,初始时一定返回的是指向头结点的地址,所以一定要用二维指针,否则将导致内存访问失败或异常。

数据结构

带头结点的单链表的12个基本操作

熟悉带头结点的单链表
前面说了带头结点与不带头结点这两种单链表的一些情况,同时我们知道设置了头结点的单链表可以降低程序复杂性与减少BUG出现率,那么接下来我们来探讨一下关于带头结点的单链表的一些基本操作,这很重要。线性表的单链表存储结构定义如下:……以下是带有头结点的单链表的12个基本操作:……

数据结构

单链表的基础知识问与答

从问答中理解单链表的特性
简述数据的逻辑结构和存储结构的区别与联系,它们如何影响算法的设计与实现?若用结点表示某个数据元素,则结点与结点之间的逻辑关系就称为数据的逻辑结构。数据在计算机中的存储表示称为数据的存储结构。可见,数据的逻辑结构是反映数据之间的固有关系,而数据的存储结构是数据在计算机中的存储表示。

数据结构

[专题] 结构之美:使用头插法创建单链表

单链表整表创建
一般有两种常用的方法来建立单链表:头插法与尾插法。头插法从一个空表开始,读取数组a中的字符,生成新结点,将读取的数据存放到新结点的数据域中,然后将新结点插入到当前链表的表头上,直到结束为止。比如学校食堂吃饭排了一大队人,你一上来就插到头一个,那么打饭师傅面对的NEXT就是你了,你的下一个就是原来的队头,队头的上一个就是你。

数据结构

[专题] 结构之美:使用尾插法创建单链表

单链表整表创建
头插法建立链表虽然算法简单,但生成的链表中结点的次序和输入的顺序相反。若希望二者次序一致,可采用尾插法建表。该方法是将新结点插入到当前链表的表尾上,为此必须增加一个尾指针real,使其始终指向当前链表的尾结点。尾插法从字面意思可以理解为在表的最后插入结点。从一个空表开始,重复读入数据,生成新结点,将读入数据存放在新结点的数据域中,然后将新结点插入到当前链表的表尾上,直到读入结束标志为止。

数据结构

[专题] 结构之美:单链表的销毁删除

将结点循环free掉
当我们不再使用某个单链表时,我们就要把它销毁,就是要把它在内存中释放掉。单链表的整表删除,先写一些算法思路:声明一节点p和q;将第一个结点赋值给p;循环,将下一结点赋值给q,释放p,将q赋值给p。实现代码如下:……初始条件:顺序线性表L已存在。操作结果:将L重置为空表。

数据结构

怎样才算是掌握单链表呢?

单链表的一些基本操作与思路
很多人学习单链表的时候,觉得学得不够深刻,不知道该深入到哪个程度。这里就罗列一下,学了单链表之后至少需要会写的一些对单链表的一些操作。只是简单罗列下,如果你有建议可以补充。首先要声明一个结构体,包含两部分:一是数据域,就是存放数据的。另一个是指针域,指向下一个节点的指针。

数据结构

[专题] 结构之美:查找单链表指定位置结点的数据

获取指定结点的数据
查找单链表上指定节点的数据是单链表的一个基本编程要求。假设我们需要查找第i个节点的值,我们可以声明一个节点p,并且让它指向链表的首元节点,同时开始循环。只要循环数j小于i,就让p指向下一个节点。当j=i时跳出循环,这个时候p就到达了我们需要查找的那个节点,p->data就是我们所需要的结果。

C/C++编程语言

typedef与define在用法上的区别

typedef是为类型取了个“别名”
简单来讲:#define只是简单的进行了替换,而typedef则是为类型取了个“别名”。 #define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查,不关含义是否正确照样带入,只有在编译已被展开的源程序时才会发现可能的错误并报错。如果你把#define语句中的数字9 写成字母g 预处理也照样带入。
1 / 2 首页 < Prev 1 2 Next > 尾页 页码: