数据结构
数据结构
HSalome
这个作者很懒,什么都没留下…
展开
-
二分查找套路
二分查找套路二分查找思路很简单,细节是魔鬼int binary_search(int *nums, int n, int x) { int head = 0, tail = ...; while (...) { int mid = head + (tail - head) >> 1; if (nums[mid] == x) return ...; if (nums[mid] > x) head = ...; tail原创 2021-05-24 10:30:51 · 132 阅读 · 0 评论 -
198. 打家劫舍
你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。偷窃到的最高金额 = 1 + 3 = 4 。示例 2:输入:[2,7,9,3,原创 2021-05-15 23:47:25 · 83 阅读 · 0 评论 -
查找算法:哈希表
查找算法:二分查找:O(lg N) ,单调性(顺序表中查找)用数组下标索引来查找 O(1)arr[ ] 下标int ————> 任意类型数据 (映射)哈希表 任意类型数据 ————> 任意类型数据 (映射)哈希表是为了追求查找算法时间复杂度为O(1),仿用数组下标索引来查找设计哈希函数的作用:将任意类型的数据,映射成int,作为下标来存储数据哈希表:1. 需要一片连续的存储空间(顺序表、数组)2. size 空间大小3. 哈希函数原创 2021-05-09 19:47:48 · 183 阅读 · 0 评论 -
广义表转二叉树实现
// 广义表转二叉树#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct Node { char data; struct Node *lchild, *rchild;} Node;typedef struct Tree { Node *root; int length;} Tree;typedef struct Stack {原创 2021-05-06 15:13:33 · 287 阅读 · 0 评论 -
二叉树
// binary_tree// 二叉排序树 == 二叉查找树 的性质 lchild < root; rchild > root 中序遍历。从小到大 二叉树不会进行重复元素插入// 数据结构 = 定义了一种性质,并维护这种性质// shift + v 按行选中,y复制,p粘贴,不要在插入模式下#include <stdio.h>#include <stdlib.h>#include <time.h>typedef struct Node原创 2021-05-06 15:11:41 · 78 阅读 · 0 评论 -
栈实现
递归需要借助系统栈,超过8MB,栈溢出栈:一头开口,一头封闭,木桶;FILO:first in last out; LIFO last in first out栈的结构定义:一片连续的存储空间,容量大小size,栈顶指针(指向栈顶元素)top索引栈是解决具有完全包含关系的一类问题; +1 -1#include <stdio.h>#include <stdlib.h>#include <time.h>typedef struct Stack { .原创 2021-05-06 15:09:44 · 100 阅读 · 0 评论 -
顺序表队列
队列1.顺序表队列2.链表队列FIFO (first in first out ) 先进先出,先来先服务 (区别于顺序表的性质结构) 或者称 LILO (last in last out)线性结构,一片连续的内存空间,length 队列的容量大小、head、tail、count。出队,从队首出队。 判断队列是一个空队列empty()入队,从队尾队列编程实现两种方式:1.head指向第一个元素下标,tail指向最后一个元素的下标2.head指向第一个元素下标,tail指向最原创 2021-04-24 21:06:13 · 284 阅读 · 0 评论 -
链表实现
#include <stdio.h>#include <stdlib.h>#include <time.h>typedef struct Node { int data; struct Node *next;} Node;typedef struct List { Node head; //虚拟节点 int length;} List;Node *getNewNode(int);List *init_List();v原创 2021-04-20 13:49:23 · 108 阅读 · 0 评论 -
顺序表实现
顺序表 cat Vector.cpp#include <stdio.h>#include <stdlib.h>#include <time.h>#define COLOR(a, b) "\033[" #b "m" a "\033[0m"#define GREEN(a) COLOR(a, 32)typedef struct Vector { int *data; int size, length;} Vector;Vector *i原创 2021-04-20 13:48:27 · 122 阅读 · 0 评论 -
稳定排序(插入排序、冒泡排序、归并排序)
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <time.h>// 稳定的排序 插入排序InsertSort 冒泡排序BubbleSort 归并排序MergeSort// 默认均为从小到大#define swap(a,b) {\ a ^= b; b ^= a; a ^= b;\}#define TEST(arr, len, func, args...原创 2021-04-20 13:45:16 · 129 阅读 · 0 评论 -
二分查找实现
二分查找(折半查找)时间复杂度:O(logN), 以2为底前提:单调序列终止条件: head > tail循坏条件: head <= tail待查找元素:x描述:head指向头部,tail指向尾部,每次劈一半(扔掉)标准版二分查找#include <stdio.h># 实现在一个数组arr中查找元素x是否存在,数组长度为len,若找到x,返回x数组下标,否则返回-1int binary_search(int *arr, int len, int x) {原创 2021-04-20 11:33:39 · 136 阅读 · 0 评论