
数据结构
Austin_Yan
我行既道,我身既法
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【数据结构---4】删除链表中等于给定值 val 的所有节点
题目描述:删除链表中等于给定值 val 的所有节点示例:输入: 1->2->6->3->4->5->6, val = 6输出: 1->2->3->4->5/** * Definition for singly-linked list. * struct ListNode { * int val; * st...原创 2019-05-02 15:00:18 · 405 阅读 · 0 评论 -
【数据结构---19】最小栈的实现
题目描述:设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈push(x) -- 将元素 x 推入栈中pop() -- 删除栈顶的元素top() -- 获取栈顶元素getMin() -- 检索栈中的最小元素示例:MinStack minStack = new MinStack();minStack.push(-2);minStack.p...原创 2019-05-22 12:35:16 · 320 阅读 · 0 评论 -
【数据结构---20】用队列实现栈的操作
题目描述:使用队列实现栈的下列操作:push(x) -- 元素 x 入栈pop() -- 移除栈顶元素top() -- 获取栈顶元素empty() -- 返回栈是否为空注意:你只能使用队列的基本操作-- 也就是 push to back, peek/pop from front, size, 和 is empty 这些操作是合法的.你所使用的语言也许不支持队列.你可以使用 li...原创 2019-05-22 12:47:55 · 346 阅读 · 0 评论 -
【数据结构---21】用栈实现队列的操作
题目描述:使用栈实现队列的下列操作:push(x) -- 将一个元素放入队列的尾部pop() -- 从队列首部移除元素peek() -- 返回队列首部的元素empty() -- 返回队列是否为空示例:MyQueue queue = new MyQueue();queue.push(1);queue.push(2);queue.peek(); // 返回 1...原创 2019-05-22 15:35:27 · 396 阅读 · 0 评论 -
【数据结构---22】循环队列的实现
题目描述:设计你的循环队列实现循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环.它也被称为“环形缓冲器”循环队列的一个好处是我们可以利用这个队列之前用过的空间.在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间.但是使用循环队列,我们能使用这些空间去存储新的值.你的实现应该支持如下操作:MyCir...原创 2019-05-22 16:37:33 · 260 阅读 · 0 评论 -
【数据结构---23】栈和队列知识点总结
什么是栈,栈有什么特性?栈是一种特殊的线性表,只允许在一端进行插入和删除操作栈的特性是先入后出用C语言实现一个动态栈传送门:C语言实现一个动态栈栈的在线OJ练习题传送门:基于栈的括号匹配检测传送门:最小栈的实现传送门:用栈模拟实现队列栈和程序运行时的栈区有什么区别?栈是一种特殊的线性表,而栈区是真实存在的内存空间为什么将递归程序转化成循环时需要...原创 2019-05-22 17:15:06 · 735 阅读 · 0 评论 -
【数据结构---27】二叉树的链式结构
BinTree.h#pragma oncetypedef char BTDataType;typedef struct BTNode{ struct BTNode* _pLeft; struct BTNode* _pRight; BTDataType _data;}BTNode;// 二叉树的创建 BTNode* CreateBinTree(BTDataType* ar...原创 2019-05-27 10:49:23 · 310 阅读 · 0 评论 -
【数据结构---18】基于栈的括号匹配检测
题目描述:给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效有效字符串需满足:左括号必须用相同类型的右括号闭合左括号必须以正确的顺序闭合注意空字符串可被认为是有效字符串示例 1:输入: “()”输出: true示例 2:输入: “()[]{}”输出: true示例 3:输入: “(]”输出: false示例 4:输入: “(...原创 2019-05-18 19:07:57 · 435 阅读 · 0 评论 -
【数据结构---24】顺序结构存储二叉树堆
heap.h#pragma oncetypedef int HPDataType;typedef struct Heap{ HPDataType* _array; int _capacity; int _size;}Heap;// 用数组初始化堆 void InitHeap(Heap* hp, HPDataType* array, int size);// 初始化...原创 2019-05-23 20:48:44 · 192 阅读 · 0 评论 -
【数据结构---25】链式结构二叉树的前、中、后序遍历
题目描述:给定一个二叉树,返回它的前序遍历示例:输入: [1,null,2,3]1\2/3输出: [1,2,3]在这里插入代码片原创 2019-05-23 21:51:52 · 268 阅读 · 0 评论 -
【数据结构---26】树以及二叉树的基本概念
文章目录树的概念:与树相关的基本概念:树的表示方式:二叉树:二叉树的五条特性:二叉树的存储:堆序堆的实现:调整堆序:堆的删除操作:堆的插入操作:扩容:用堆的思想进行排序TOP K问题(海量数据)二叉树的链式存储方式求二叉树的节点个数:二叉树的创建方式:二叉树的销毁方式:二叉树的拷贝:查看二叉树中的叶子节点:树的概念:一种非线性的数据结构,它是由n个(n>=0)有限节点组成的一个具有层次关...原创 2019-05-23 22:54:47 · 392 阅读 · 1 评论 -
【数据结构---28】简单排序方法(上)
sort.h#pragma oncevoid insertSort(int* array, int size);void shellSort(int* array, int size);void selectSort(int* array, int size);void seclectSort2(int* array, int size);void HeapSort(int*...原创 2019-05-28 16:45:46 · 312 阅读 · 0 评论 -
【数据结构---30】鸽巢原理---计数排序
思路分析:<1>巧妙地借助数组下标<2>如果没有给出范围的话,第一步先找出数据范围<3>统计每个元素出现的次数<4>按照统计的计数对元素进行回收代码实现:#include <stdio.h>#include <malloc.h>#include <stdlib.h>#include <s...原创 2019-06-01 18:08:47 · 333 阅读 · 0 评论 -
【数据结构---29】简单排序方法(下)
文章目录对快速排序的优化:方法一代码实现:方法二代码实现:快速排序的循环写法:代码实现:归并排序:递归框架:循环写法:代码测试运行图:对快速排序的优化:快排需要设置基准值,基准值的选取会出现两种极端情况,导致排序算法的性能变差①针对基准值的选取做出优化②针对递归的深度做出优化方法一:三值取中法<1>顾名思义就是取出三个基准值,选择值为中间的那一个<2>三...原创 2019-05-29 18:09:25 · 412 阅读 · 0 评论 -
【数据结构---31】基数排序
方法一思路分析:<1>LSD低关键码优先,适合循环写法<2>计算每一位重复出现的次数<3>计算相同数据出现的位置<4>将数组中的数据放入桶中<5>重复以上步骤,直到每一位都操作过代码实现:#include <stdio.h>#include <malloc.h>#include <std...原创 2019-06-03 01:08:09 · 287 阅读 · 0 评论 -
【数据结构---17】C语言实现一个链表队列
Queue.h#pragma oncetypedef int QDataType;typedef struct QNode{ struct QNode* _pNext; QDataType _data;}QNode;typedef struct Queue{ QNode* _front; // 指向队头元素 QNode* _back; // 指向队尾元素 }...原创 2019-05-16 15:11:25 · 451 阅读 · 0 评论 -
【数据结构---15】复杂链表的深度复制
题目描述:给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点要求返回这个链表的深拷贝示例:输入:{"$id":"1","next":{"$id":"2","next":null,"random":{"$ref":"2"},"val":2},"random":{"$ref":"2"},"val":1}解释:节点 1 的值是 1,它的下一个...原创 2019-05-11 22:35:03 · 248 阅读 · 0 评论 -
【数据结构---5】反转一个单链表
题目描述:反转一个单链表示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *n...原创 2019-05-02 15:11:29 · 383 阅读 · 0 评论 -
【数据结构---6】将两个有序链表合并为一个新的有序链表并返回
题目描述:将两个有序链表合并为一个新的有序链表并返回,新链表是通过拼接给定的两个链表的所有节点组成的示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4/** * Definition for singly-linked list. * struct ListNode { * int val...原创 2019-05-02 15:39:58 · 662 阅读 · 0 评论 -
【数据结构---7】以给定值x为基准将链表分割成两部分
题目描述:编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前给定一个链表的头指针 ,请返回重新排列后的链表的头指针注意:分割以后保持原来的数据顺序不变/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) ...原创 2019-05-02 15:55:21 · 1572 阅读 · 0 评论 -
【数据结构---8】输入一个链表,输出该链表中倒数第k个结点
题目描述:输入一个链表,输出该链表中倒数第k个结点/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/思路分析:1.创建快慢指针,先让快指针走K步,慢指针在和快指针一起走2.当快指针走到NULL的时候,慢指针对应的位置就是倒数第K...原创 2019-05-02 17:00:02 · 354 阅读 · 0 评论 -
【数据结构---9】给定一个带有头结点 head 的非空单链表,返回链表的中间结点
题目描述:给定一个带有头结点 head 的非空单链表,返回链表的中间结点如果有两个中间结点,则返回第二个中间结点示例 1:输入:[1,2,3,4,5]输出:此列表中的结点 3 (序列化形式:[3,4,5])返回的结点值为 3示例 2:输入:[1,2,3,4,5,6]输出:此列表中的结点 4 (序列化形式:[4,5,6])由于该列表有两个中间结点,值分别为 3 和 4,我们返回第...原创 2019-05-02 17:15:49 · 1433 阅读 · 0 评论 -
【数据结构---10】删除该链表中重复的结点
题目描述:在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针例如,链表1->2->3->3->4->4->5 处理后为 1->2->5/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : ...原创 2019-05-04 11:10:11 · 296 阅读 · 0 评论 -
【数据结构---11】判断链表是否为回文结构
题目描述:对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900测试样例:1->2->2->1返回:true/*struct ListNode { int val; struct ListNode *next; ...原创 2019-05-04 19:09:16 · 467 阅读 · 0 评论 -
【数据结构---3】带头双向循环链表代码练习
#include<stdio.h>#include<stdlib.h>#include <assert.h>typedef int Datatype;typedef struct DlistNode { Datatype data; struct DlistNode* _next; struct DlistNode* _prev;}Node,*...原创 2019-04-30 01:14:58 · 267 阅读 · 0 评论 -
【数据结构---2】动态顺序表知识点整理
#include <stdio.h>#include <stdlib.h>// 动态的顺序表 typedef int DataType;typedef struct SeqList{ DataType* _array; int _capacity; // 顺序表的总大小 int _size; // 顺序表中有效元素的个数 }...原创 2019-04-30 01:14:31 · 248 阅读 · 0 评论 -
【数据结构---1】不带头的单向非循环链表知识整理
#include<stdio.h>#include<stdlib.h>#include <assert.h>typedef int SLTDatatype;typedef struct SListNode{ SLTDatatype _data; struct SListNode* _Next;}Node,*PNode;typedef s...原创 2019-04-30 01:12:58 · 311 阅读 · 2 评论 -
【数据结构---16】C语言实现一个动态栈
Stack.h#pragma oncetypedef int Sdatatype;typedef struct Stack{ Sdatatype* _array; int top; int capacity;}Stack;void StackInit(Stack* ps);void StackDestroy(Stack* ps);void StackPush(...原创 2019-05-14 17:12:50 · 367 阅读 · 0 评论 -
【数据结构---12】判断链表是否带环
题目描述:给定一个链表,判断链表中是否有环为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)如果 pos 是 -1,则在该链表中没有环示例 1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点示例 2:输入:head = [1,2], pos = 0输出:true...原创 2019-05-11 11:41:44 · 268 阅读 · 0 评论 -
【数据结构---13】找到两个单链表相交的起始节点(假定不带环)
题目描述:编写一个程序,找到两个单链表相交的起始节点如下面的两个链表:在节点 c1 开始相交示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with value = 8输入解释:相交节点的值为 8 (...原创 2019-05-11 12:08:31 · 528 阅读 · 0 评论 -
【数据结构---14】如果链表有环,返回入环点,如果没有返回NULL
题目描述:给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始) 如果 pos 是 -1,则在该链表中没有环说明:不允许修改给定的链表示例 1:输入:head = [3,2,0,-4], pos = 1输出:tail connects to node index 1解...原创 2019-05-11 16:16:47 · 542 阅读 · 0 评论 -
【数据结构---32】DS知识点总结(思维导图)
6.4未完成版本:原创 2019-06-04 22:27:21 · 513 阅读 · 0 评论