抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

链表(linked list)的别称

线性表的链式表示链式存储结构链式映像随机存取结构的储存结构

单向链表

长相

无头链表


指向首元结点的指针叫做头指针(head pointed)

有头链表

第一个结点叫头结点(head node)

结构体定义

别称

线性表的顺序表示顺序存储结构顺序映像随机存取结构的储存结构

作用

利用数组的连续存储空间顺序存放线性表的各个元素
a[n-1]a[n] 的直接前趋,a[n+1]a[n] 的直接后继。

结构体代码

第一种写法

1
2
3
4
typedef struct sqList {
ElementType Data[MAXSIZE];
int Last;
} sqList;

Python

1
2
3
4
class LNode:
def __init__(self):
self.Data = []
self.last = -1

前情提要

在之前的 C 语言的学习当中,我们提到了 mallocfree,这两个函数是用来动态分配内存的。
看好。
动态分配的代码是这样写的。

1
2
3
4
5
6
7
8
#include <stdio.h>
#include <stdlib.h>
int main() {
int n;
scanf("%d", &n);
int *a = (int*)malloc(sizeof(int)*n);
free(a);
}

结构体结构

1
2
3
4
5
typedef struct {
ElemType *data;
int length;
int listSize;
} DA;

我来解释一下,这个结构体声明。
length 是你实际存了多少的东西,listSize 是你目前表的最大长度。

动态分配的使用

其实,无非就是创、增、删、改、读、销。

创建一个动态分配

定义

线性表(linear list)有以下三个规则:

  1. 存在唯一的一个 “第一个” 数据元素
  2. 存在唯一的一个 “最后一个” 数据元素
  3. 除 “第一个” 和 “最后一个” 元素均只有一个直接前驱(immediate predecessor)和一个直接后继(immediate successor)

一些参数

线性表长度为 n,也可以直接用 xxLen 表示
n=0 时,就是空表
a 的下表 i 表示的是 a(i) 在线性表的位序

一些要说的东西

对于线性表存在两种输入的情况:

  1. 不修改内容,只是把内容传入,如 List L
  2. 譬如,getLength(List L)
  3. 可修改内容,也可把内容传入,就传地址(指针),如 List *L
  4. 譬如,initList(List *L)
  5. 但是,在此后要访问这指针的内容要用到 L->

但是,我们要注意的是结构体。
举个例子
这是一个动态分配

算法的五大特性

  1. 确定性
  2. 有穷性
  3. 可行性
  4. 输入输出(可以没有输入,但是得要有输出)

数据(data)

能输入到计算机当中的并能被处理的符号的总称。

数据元素(data item)

数据的基本单位,通常是以一个整体去考虑,有若干个数据项组成,又名记录。
在计算机当中,最小的储存单位是位(bit),就是二进制数的一位。将若干个位组合起来连成一个位串表示一个数据元素,通常这个位串为一个元素(element)或结点(node),有时可以看成是数据元素在计算机中的映像。
当数据元素组成各个数据项时,位串应于各个数据项的子串称为数据域(data field)

数据对象(data object)

性质相同的数据元素的集合,是数据的子集。

数据结构(data structure)

存在一种或一种以上的特殊关系的数据元素的集合 ——Data_Structure = (D,S)
D 是数据元素的有限集,S 是 D 上关系的有限集
数据结构通常分为 4 种基本结构:

  1. 集合
  2. 线性

我依稀记得,小时候的我,便与计算机结下了不解之缘。那时的我,对计算机充满了好奇,总是想要探索这个神奇的小盒子里的奥秘。每次坐在电脑前,我都会瞪大眼睛,仔细观察屏幕上的每一个图标,尝试着去理解它们的功能和用途。

随着时间的推移,我逐渐对计算机产生了热爱之情。我开始沉迷于计算机的命令行,那些看似复杂的指令和代码,在我眼中却充满了魅力。我喜欢通过命令行来控制计算机,完成各种任务,那种掌控感让我兴奋不已。我开始研究各种计算机知识,从硬件到软件,从操作系统到编程语言,我都想要了解得更多。

在小学五年级的时候,我第一次接触到了 C 语言。那时的我,满怀激情地投入到学习中,想要掌握这门强大的编程语言。然而,现实却给我泼了一盆冷水。我发现,我所使用的书籍中充满了错误,这让我感到十分沮丧。最终,我无奈地选择了放弃,转而寻找其他更适合我的编程语言。

初中的时候,我接触到了 Python。与 C 语言相比,Python 的语法更加简洁易懂,让我越用越得心应手。我开始用 Python 编写各种小程序,解决实际问题。我喜欢 Python 的灵活性和强大性,它让我感受到了编程的乐趣。

在填报高考志愿时,我坚决地选择了计算机专业,不顾家人的阻拦。他们总是以我那高考成绩只够上二本末的堂哥为例子,试图说服我放弃这个选择。然而,我深知自己的兴趣和优势所在,我坚信自己能够在计算机专业中取得好成绩。最终,我成功地进入了大学,开始了我的计算机学习之旅。

在上海的校园里,我遇到了一些同样是学计算机的同学。他们中有些人总是喜欢在我面前炫耀自己的成绩和成就,搞些所谓的 “凡尔赛”。然而,我对此却甚为厌恶。我深知,真正的进步和成就不是靠炫耀得来的,而是需要脚踏实地地学习和实践。因此,我选择了超越他们,用自己的努力和成果来证明自己的实力。我坚信,只要我坚持不懈地努力下去,我一定能够在计算机领域取得属于自己的辉煌成就。

在未来的日子里,我将会继续深耕计算机领域,不断提升自己的技能和知识。无论是面对复杂的算法问题,还是应对日新月异的科技变革,我都会保持一颗求知的心,勇于挑战自我,不断超越极限。

或许,我会遇到更多的困难和挑战,但我相信,只要我坚定信念,勇往直前,就一定能够克服一切难关,实现自己的梦想。我期待着在计算机的世界里,书写属于自己的精彩篇章,用智慧和汗水创造出更多的可能。

回首过去,我为自己的选择和坚持感到自豪。展望未来,我充满了信心和期待。我相信,在不久的将来,我将成为一名优秀的计算机专业人才,为社会的进步和发展贡献自己的力量。

在浩瀚的计算机科学领域中,数据结构与算法无疑是其中最璀璨夺目的明珠。然而,想要真正掌握这门学科,却并非一撮而就的易事。它需要我们有足够的耐心,去一步步探寻每一个细节;它需要我们有足够的毅力,去克服每一个难关。因此,学习数据结构与算法,更像是一场循序渐进的修行,需要我们在实践中不断积累、反思与提升。

本书《数据结构与算法大全》正是基于这样的理念而诞生。它不仅仅是一本简单的教程,更是一部集大成之作。在编写过程中,我们深入研究了各种数据结构与算法的原理、特性及应用场景,力求将最精华、最实用的内容呈现给读者。同时,我们也参考了大量的专业书籍、学术论文以及实际项目经验,以期为读者提供一个全面、深入的学习平台。

在书中,你将看到各种经典的数据结构,如数组、链表、栈、队列、树和图等,以及与之相关的算法实现和优化方法。我们将从基础概念讲起,逐步深入到高级应用和算法设计技巧,让你能够逐步建立起自己的知识体系和技能体系。

此外,本书还注重理论与实践的结合。我们不仅在理论层面详细讲解了数据结构与算法的基本原理和特性,还通过大量的示例和案例,让读者能够更好地理解其在实际问题中的应用。相信通过本书的学习,你不仅能够掌握数据结构与算法的核心知识,还能够将其应用于实际项目中,提升自己的编程能力和问题解决能力。

最后,我要感谢所有为这本书付出努力的人,也要感谢每一位选择阅读这本书的读者。希望它能够成为你学习数据结构与算法的良师益友,陪伴你走过一段充满挑战与收获的学习旅程。愿你在这个领域中不断前行,创造出更加辉煌的未来。