From bf5d3ab9e082be5c85b5d5491585931214f334dc Mon Sep 17 00:00:00 2001 From: cdevelopr Date: Sun, 23 Jul 2017 18:50:33 +0800 Subject: [PATCH 1/2] README.md --- README.md | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index c4944fb..e0a4b10 100644 --- a/README.md +++ b/README.md @@ -36,21 +36,31 @@ * 链表 - 链表看起来更像树,而不是数组,它使用一组结点来表示一个序列。每一个结点都包含数据和一个指针。在链表中,结点中的数据可以为任意类型,而指针则是指向下一结点的引用。链表包含一个头结点和一个尾结点。头结点是链表中的第一个结点,尾结点是最后一个结点。链表不是一个循环数据结构,所以尾结点没有指向头结点的指针,指针为空。一些基础方法的时间复杂度如下: - | 算法 | 平均 | 最差 | + | 算法 | 平均 | 最坏 | |:------------:|:-------:|:--------:| | 空间 (Space) | O(n) | O(n) | | 查找 (Search) | O(n) | O(n) | | 插入 (Insert) | O(1) | O(1) | | 删除 (Delete) | O(1) | O(1) | * 双向链表 + - 一个双向链表首先是一个链表,但是在每个结点中有两个指针,前驱指针引用到前驱结点,后继指针引用到后继结点。双向链表也有一个头结点,头结点的后继指针引用到第一个结点。最后一个结点的后继指针引用为空,但是如果最后一个结点的后继指针引用到第一个结点,这时称这个链表为双向循环链表。双向循环链表能非常方便地从每个结点查找它的前驱结点和后继结点。 + + ![双向链表](https://upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Doubly-linked-list.svg/610px-Doubly-linked-list.svg.png) + + | 算法 | 平均 | 最坏 | + |:-------------:|:-------:|:----------:| + | 空间 (Space) | O(n) | O(n) | + | 查找 (Search) | O(n) | O(n) | + | 插入 (Insert) | O(1) | O(1) | + | 删除 (Delete) | O(1) | O(1) | * 栈 - - 栈是一个有着“后进先出”特性的基础数据结构,这就意味着最后一个入栈的元素,也是第一个出栈的。栈就像是一堆书,想要得到书堆中的第一本书(最下面一本),必须把其他的书都先拿走。向栈中添加一个元素的操作被称为 Push(入栈),删除一个元素的操作被称为 Pop(出栈),查看且不删除最后一个入栈的元素的操作被称为 Top 。[实现栈的常用方法是使用链表(LinkedList),也可以使用不允许空值的 StackArray(使用数组实现),还有允许空值的 Vector](https://en.wikibooks.org/wiki/Data_Structures/Stacks_and_Queues#Performance_Analysis) + - 栈是一个有着「后进先出」特性的基础数据结构,这就意味着最后一个入栈的元素,也是第一个出栈的。栈就像是一堆书,想要得到书堆中的第一本书(最下面一本),必须把其他的书都先拿走。向栈中添加一个元素的操作被称为 Push(入栈),删除一个元素的操作被称为 Pop(出栈),查看且不删除最后一个入栈的元素的操作被称为 Top 。[实现栈的常用方法是使用链表(LinkedList),也可以使用不允许空值的 StackArray(使用数组实现),还有允许空值的 Vector](https://en.wikibooks.org/wiki/Data_Structures/Stacks_and_Queues#Performance_Analysis) - + From bb03a2e80f13c33a69808bf005b16eb1dbaf5b85 Mon Sep 17 00:00:00 2001 From: cdevelopr Date: Sun, 23 Jul 2017 21:05:25 +0800 Subject: [PATCH 2/2] README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e0a4b10..038f663 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ | 插入 (Insert) | O(1) | O(1) | | 删除 (Delete) | O(1) | O(1) | * 双向链表 - - 一个双向链表首先是一个链表,但是在每个结点中有两个指针,前驱指针引用到前驱结点,后继指针引用到后继结点。双向链表也有一个头结点,头结点的后继指针引用到第一个结点。最后一个结点的后继指针引用为空,但是如果最后一个结点的后继指针引用到第一个结点,这时称这个链表为双向循环链表。双向循环链表能非常方便地从每个结点查找它的前驱结点和后继结点。 + - 一个双向链表首先是一个链表,但是在每个结点中有两个指针,前驱指针指向前驱结点,后继指针指向后继结点。双向链表也有一个头结点,头结点的后继指针指向第一个结点。最后一个结点的后继指针指向空,但是如果最后一个结点的后继指针指向第一个结点,这时称这个链表为双向循环链表。双向循环链表能非常方便地从每个结点查找它的前驱结点和后继结点。 ![双向链表](https://upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Doubly-linked-list.svg/610px-Doubly-linked-list.svg.png)
算法 平均最差最坏 图形表示