数据结构
kikajack
这个作者很懒,什么都没留下…
展开
-
【二叉树】O(1)空间复杂度的Morris遍历
对于二叉树的遍历,常规的递归或迭代都需要用到栈,不管是函数调用栈还是手动创建的栈。因此空间复杂度都是 O(n)。如果要省掉栈的开销,将空间复杂度降低到 O(1),则需要借助二叉树中的叶子节点来保存临时信息。只要当前节点 cur 不为空,就一直循环:如果当前节点 cur 的左子节点不存在,则输出 cur,并设置 cur = cur.right否则,寻找当前节点中序遍历的前驱节点 prev...原创 2019-11-03 15:23:18 · 462 阅读 · 0 评论 -
【二叉树】Python 从List创建二叉树及4种遍历的递归和非递归实现
# -*- coding: UTF-8 -*-from collections import dequeclass TreeNode: def __init__(self, val): self.val = val self.left = None self.right = Noneclass Tree: def __ini...原创 2019-11-01 13:26:22 · 3600 阅读 · 0 评论 -
【算法与数据结构】无重复字符的最长子串 -暴力破解和滑动窗口
滑动窗口创建两个指针 start 和 end,分别指向窗口起止位置。对于长度为 n 的字符串,总共需要循环 n 次。每次循环时,end 指针加一,同时保存当前字符的下一个位置,然后判断是否出现重复字符。如果无重复,则继续下次循环如果重复,则把 start 移到记录中对应字符的下一个位置#include <stdio.h>#include <string.h>...原创 2019-08-18 12:28:21 · 304 阅读 · 0 评论 -
HashTable 示例 - 找出数组中和为指定值的两个数
数组 [2, 4, 6, 8],和为 8,则返回 [0, 2]数组 [2, 3, 3],和为 6,则返回 [1, 2]#include <stdio.h>#include <stdlib.h>typedef unsigned int Index;typedef struct node { int data; struct node *next;...原创 2019-08-17 22:40:57 · 279 阅读 · 0 评论 -
【算法与数据结构】双端队列示例
双端队列可以从两侧入队和出队:#include <stdio.h>#include <stdlib.h>struct dequeNode { int data; struct dequeNode *next; struct dequeNode *prev;};typedef struct dequeNode Node;typedef Node * ...原创 2019-08-25 18:12:00 · 246 阅读 · 0 评论 -
【算法与数据结构】 用栈实现队列、用队列实现栈
用栈实现队列效果(需要两个栈)思路:栈1负责进数据,每次要实现出队效果的时候,借助栈2颠倒顺序后出栈即可。元素出队后可以有两种方式:把出队后栈2中的数据再依次放入栈1。效率低。出队后,栈2中的数据不需要动,此时仍然用栈1入栈,栈2出栈,只有在栈2空的时候,再把栈1中的所有数据搬入栈1。高效。#include <stdio.h>#include <stdlib.h&...原创 2019-08-20 22:31:47 · 383 阅读 · 0 评论 -
【算法与数据结构】优先级队列 - 用二叉堆求数据流中的第K大的元素
数据流中的第K大的元素,总数据个数不足K个元素时返回-1。#include <stdio.h>#include <stdlib.h>typedef struct { int* data; int count; int capacity;} KthLargest;void heap_up(KthLargest* obj, int loc)...原创 2019-08-24 10:58:24 · 200 阅读 · 0 评论 -
【算法与数据结构】堆 heap - 基于数组实现的完全二叉树
#include <stdio.h>#include <string.h>#define MAXSIZE 100typedef struct heap { int data[MAXSIZE]; int size;} heap;void heap_init(heap *h) { h->size = 0; memset(h-...原创 2019-08-14 22:52:03 · 204 阅读 · 0 评论 -
【算法与数据结构】链表逆序、相邻两元素逆序、探测环路
链表常见操作有:链表逆序链表每相邻两个元素逆序,例如 1, 2, 3, 4 => 2, 1, 4, 3探测是否构成环路#include <stdio.h>#include <stdlib.h>typedef struct NodeStruct { int data; struct NodeStruct *next;} Node, *...原创 2019-08-19 23:07:53 · 200 阅读 · 0 评论 -
数据结构
基本数据结构集合:元素之间没有关系,各自独立线性结构:元素之间是一对一的关系,除首尾元素外每个元素都有一个前驱和一个后继树:元素之间是一对多的关系,每个父元素可以有多个子元素,但子元素只能有一个父元素图:元素之间是多对多的关系,每个元素都可以跟另外的一个或多个元素关联在上面这四种结构的基础上,再进行组合排列,就可以表示整个宇宙了。数据的存储结构任何类型的数据,最终都需要存储在内...原创 2019-01-31 18:41:09 · 134 阅读 · 0 评论