📝 数据结构和算法

20661篇技术文档
  数据结构-结构体

📅  最后修改于: 2020-10-14 06:49:03        🧑  作者: Mango

结构体结构是一种复合数据类型,它定义了一组变量列表,这些变量列表将以一个名称放置在内存块中。它允许使用指向结构的单个指针来访问不同的变量。句法好处它可以保存不同数据类型的变量。我们可以创建包含不同类型属性的对象。它允许我们在程序之间重复使用数据布局。它用于实现其他数据结构,例如链表,堆栈,队列,树,图等。程序...

  数据结构-数组

📅  最后修改于: 2020-10-15 00:36:44        🧑  作者: Mango

数组定义数组定义为存储在连续内存位置的相似类型数据项的集合。数组是C编程语言中的派生数据类型,可以存储原始数据类型,例如int,char,double,float等。数组是最简单的数据结构,其中每个数据元素都可以使用其索引号进行随机访问。例如,如果我们想将一个学生的成绩存储在6个学科中,则无需为不同学科中的成绩定义不同的变量。取而代之的是,我们可以定义一个数组,该数组可以将标记存储在每个主题的连续...

  数据结构-二维数组

📅  最后修改于: 2020-10-15 00:37:48        🧑  作者: Mango

2D阵列二维数组可以定义为数组的数组。 2D数组以矩阵形式组织,可以表示为行和列的集合。但是,将创建2D数组以实现类似数据库的数据结构。它使一次性保存大量数据变得容易,可以将其传递给任何需要的功能。如何声明二维数组声明二维数组的语法与一维数组的语法非常相似,如下所示。但是,它产生如下数据结构。上图显示了二维数组,元素以行和列的形式组织。第一行的第一个元素由a [0] [0]表示,其中第一个索引中显...

  数据结构-单链表

📅  最后修改于: 2020-10-15 00:42:16        🧑  作者: Mango

链表链接列表可以定义为随机存储在内存中的称为节点的对象的集合。一个节点包含两个字段,即存储在该特定地址的数据和包含存储器中下一个节点的地址的指针。列表的最后一个节点包含指向null的指针。链表的用途该列表不需要连续存在于内存中。该节点可以驻留在内存中的任何位置,并链接在一起以创建一个列表。这实现了空间的优化利用。列表大小受内存大小限制,不需要事先声明。空节点不能出现在链接列表中。我们可以将原始类型...

  数据结构-双链表

📅  最后修改于: 2020-10-15 00:44:59        🧑  作者: Mango

双链表双链表是链表的一种复杂类型,其中节点包含指向序列中上一个节点和下一个节点的指针。因此,在双向链表中,节点由三部分组成:节点数据,指向顺序中下一个节点的指针(下一个指针),指向上一个节点的指针(上一个指针)。图中显示了双向链接列表中的示例节点。下图显示了一个双向链接列表,该列表包含三个节点,这些节点的数据部分中的数字从1到3。在C语言中,双向链表中节点的结构可以表示为:第一个节点的上一个部分和...

  数据结构-循环单链表

📅  最后修改于: 2020-10-15 00:46:08        🧑  作者: Mango

循环单链接列表在循环单链接列表中,列表的最后一个节点包含一个指向列表的第一个节点的指针。我们可以有循环单链表以及循环双链表。我们遍历循环的单链列表,直到到达开始的同一节点。循环单个喜欢的列表没有开头也没有结尾。在任何节点的下一部分中都没有空值。下图显示了循环单链接列表。循环链表主要用于操作系统中的任务维护。在计算机科学中有很多使用循环链接列表的示例,包括浏览器浏览,其中用户过去访问过的页面的记录以...

  数据结构-循环双链表

📅  最后修改于: 2020-10-15 00:47:19        🧑  作者: Mango

循环双链表循环双链表是数据结构的一种更复杂的类型,其中一个节点包含指向其上一个节点以及下一个节点的指针。循环双向链表在任何节点中都不包含NULL。列表的最后一个节点包含列表的第一个节点的地址。列表的第一个节点还包含其先前指针中的最后一个节点的地址。下图显示了一个循环的双向链表。由于圆形双向链表在其结构中包含三部分,因此它需要每个节点更多的空间和更昂贵的基本操作。但是,圆形的双向链接列表使指针易于操...

  数据结构-堆栈

📅  最后修改于: 2020-10-15 00:48:16        🧑  作者: Mango

堆栈堆栈是一个有序列表,其中只能在称为top的一端执行插入和删除操作。堆栈是一种递归数据结构,具有指向其顶部元素的指针。堆栈有时被称为后进先出(LIFO)列表,即,首先插入堆栈中的元素,将最后从堆栈中删除。堆栈的应用递归表达式评估和转换解析中浏览器编者树遍历堆栈操作可以在堆栈上执行各种操作。1.推送:将元素添加到堆栈中2. Pop:从堆栈中删除一个元素3.窥视:查看堆栈中的所有元素而不删除它们。堆...

  数据结构-堆栈的数组实现

📅  最后修改于: 2020-10-15 00:49:26        🧑  作者: Mango

堆栈的数组实现在数组实现中,堆栈是通过使用数组形成的。有关堆栈的所有操作均使用数组执行。让我们看看如何使用数组数据结构在堆栈上实现每个操作。将元素添加到堆栈(推送操作)将元素添加到堆栈的顶部称为推入操作。推送操作包括以下两个步骤。递增变量Top,以便它现在可以引用下一个内存位置。在顶部递增的位置添加元素。这称为在堆栈顶部添加新元素。当我们尝试将一个元素插入一个完全填充的堆栈中时,堆栈溢出了,因此,...

  数据结构-堆栈的链表实现

📅  最后修改于: 2020-10-15 00:51:51        🧑  作者: Mango

堆栈的链表实现除了使用数组,我们还可以使用链接列表来实现堆栈。链表动态分配内存。但是,对于所有操作(即推,弹出和窥视),两种情况下的时间复杂度都是相同的。在堆栈的链表实现中,节点不连续地保存在内存中。每个节点在堆栈中都包含一个指向其直接后继节点的指针。如果内存堆中剩余的空间不足以创建节点,则称堆栈溢出。堆栈中最顶层的节点在其地址字段中始终包含null。让我们讨论在堆栈的链表实现中执行每个操作的方式...

  数据结构-队列

📅  最后修改于: 2020-10-15 00:53:18        🧑  作者: Mango

队列1.队列可以定义为有序列表,它使插入操作可以在称为REAR的一端执行,而删除操作可以在称为FRONT的另一端执行。2.队列称为“先进先出”列表。3.例如,排队等候火车票的人排队。队列的应用由于队列以先进先出的方式执行操作,这对于操作的顺序是相当公平的。队列的各种应用如下所述。队列被广泛用作单个共享资源(如打印机,磁盘,CPU)的等待列表。队列用于数据的异步传输(例如,两个进程之间的数据传输速度...

  数据结构-队列的数组实现

📅  最后修改于: 2020-10-15 00:54:22        🧑  作者: Mango

队列的数组表示我们可以使用线性数组轻松表示队列。每个队列都有两个变量,即前和后。前后变量指向在队列中执行插入和删除操作的位置。最初,front和queue的值为-1,表示一个空队列。下图显示了包含5个元素以及相应的前后值的队列的数组表示形式。上图显示了构成英语单词“ HELLO”的字符队列。由于到目前为止尚未在队列中执行删除操作,因此front的值保持为-1。但是,每次在队列中执行插入操作时,后方...

  数据结构-队列的链表实现

📅  最后修改于: 2020-10-15 00:55:29        🧑  作者: Mango

队列的链表实现由于本教程上一节中讨论的缺点,数组实现不能用于实现队列的大规模应用程序。数组实现的替代方法之一是队列的链表实现。具有n个元素的队列的链接表示形式的存储需求为o(n),而操作的时间需求为o(1)。在链接队列中,队列的每个节点都包括两个部分,即数据部分和链接部分。队列中的每个元素都指向其在内存中的下一个直接元素。在链接队列中,内存中维护着两个指针,即前指针和后指针。前指针包含队列开始元素...

  数据结构-循环队列

📅  最后修改于: 2020-10-15 00:56:37        🧑  作者: Mango

循环队列就线性队列而言,删除和插入只能分别在前端和后端进行。考虑下图所示的队列。上图所示的队列已完全填满,由于后方== max-1变为true的条件,因此无法再插入任何元素。但是,如果我们删除队列前端的2个元素,由于条件after = max -1仍然成立,我们仍然不能插入任何元素。这是线性队列的主要问题,尽管数组中有可用空间,但是不能在队列中插入更多元素。这仅仅是内存浪费,我们需要克服这个问题。...

  数据结构-树

📅  最后修改于: 2020-10-15 00:58:54        🧑  作者: Mango

树树是一种递归数据结构,包含一个或多个数据节点的集合,其中一个节点被指定为树的根,而其余节点被称为根的子代。除根节点以外的其他节点均被划分为多个非空集,其中每个空集都称为子树。树的节点或者在它们之间保持父子关系,或者它们是姐妹节点。在一般树中,一个节点可以有任意数量的子节点,但只能有一个父节点。下图显示了一棵树,其中节点A是树的根节点,而其他节点可以视为A的子节点。基本术语根节点:-根节点是树层次...