数据结构
从零出发——
这个作者很懒,什么都没留下…
展开
-
程序员成长之旅——各个排序的总结和对比
程序员成长之旅——各个排序的总结和对比原创 2020-02-13 16:04:26 · 178 阅读 · 0 评论 -
程序员成长之旅——归并排序和非比较排序(计数排序)
程序员成长之旅——归并排序和非比较排序归并排序==基本思想==时间和空间复杂度稳定性代码实现非比较排序==基本思想==时间和空间复杂度稳定性代码实现 归并排序 基本思想 归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段...原创 2020-02-13 15:14:01 · 165 阅读 · 0 评论 -
程序员成长之旅——交换排序
程序员成长之旅——交换排序冒泡排序==基本思想==时间和空间复杂度稳定性代码实现快速排序==基本思想==时间和空间复杂度稳定性代码实现 冒泡排序 基本思想 所谓交换,就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置,交换排序的特点是:将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动。 图解假如是升序 时间和空间复杂度 时间复杂度是O(n^2) 空间复杂度 ...原创 2020-01-21 23:11:16 · 212 阅读 · 0 评论 -
程序员成长之旅——选择排序
程序员成长之旅——选择排序选择排序==基本思想==时间和空间复杂度稳定性代码实现堆排序==基本思想==时间和空间复杂度稳定性代码实现 选择排序 基本思想 每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完 。 而在这里我进行了稍微的优化,就是选择最小的放在起始位置,最大的放在最末位置,图解一下就很清楚了。 图解 时间和空间复杂度 时间...原创 2020-01-15 19:55:48 · 173 阅读 · 0 评论 -
程序员成长之旅——双向循环链表
程序员成长之旅——带头结点的双向循环链表什么是双向循环链表C语言实现DList.hDList.ctest.c 什么是双向循环链表 看图就清楚了,但今天我实现的是一个带头循环双向链表 C语言实现 DList.h #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> #include&l...原创 2019-07-23 20:02:39 · 133 阅读 · 0 评论 -
程序员成长之旅——复制带随机指针的链表
程序员成长之旅——复制带随机指针的链表题目简介LeetCode 题目简介 给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。 要求返回这个链表的深拷贝。 LeetCode /* // Definition for a Node. class Node { public: int val; Node* next; Node* rando...原创 2019-07-23 21:40:41 · 110 阅读 · 0 评论 -
程序员成长之旅——栈和队列
程序员成长之旅——栈和队列的C实现栈“栈”的认识C语言队列“队列”的认识C语言 栈 “栈”的认识 什么是栈? 栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,...原创 2019-07-25 16:47:09 · 141 阅读 · 0 评论 -
程序员成长之旅——用队列实现栈
程序员成长之旅——用队列实现栈题目简介LeetCode 题目简介 使用队列实现栈的下列操作: push(x) – 元素 x 入栈 pop() – 移除栈顶元素 top() – 获取栈顶元素 empty() – 返回栈是否为空 注意: 你只能使用队列的基本操作-- 也就是 push to back, peek/pop from front, size, 和 is empty 这些操作是合法的。...原创 2019-07-27 14:23:57 · 171 阅读 · 0 评论 -
程序员成长之旅——用栈实现队列
程序员成长之旅——用栈实现队列题目简介LeetCode 题目简介 使用栈实现队列的下列操作: push(x) – 将一个元素放入队列的尾部。 pop() – 从队列首部移除元素。 peek() – 返回队列首部的元素。 empty() – 返回队列是否为空。 示例: MyQueue queue = new MyQueue(); queue.push(1); queue.push(2); qu...原创 2019-07-27 15:31:18 · 135 阅读 · 0 评论 -
程序员成长之旅——设计循环队列
程序员成长之旅——设计循环队列题目简介LeetCode 题目简介 设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。 循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。但是使用循环队列,我们能使用这...原创 2019-07-27 17:39:59 · 152 阅读 · 0 评论 -
程序员成长之旅——最小栈
程序员成长之旅——最小栈题目简介LeetCode 题目简介 设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。 push(x) – 将元素 x 推入栈中。 pop() – 删除栈顶的元素。 top() – 获取栈顶元素。 getMin() – 检索栈中的最小元素。 LeetCode typedef int STDataType; typedef struct ...原创 2019-07-27 17:44:21 · 128 阅读 · 0 评论 -
程序员成长之旅——有效括号
程序员成长之旅——有效括号题目简介LeetCode 题目简介 LeetCode //支持动态增长的栈 typedef char STDataType; typedef struct Stack { STDataType* _a;//动态实现 int _top;//有效的数据,栈顶 int _capacity;//容量的大小 }Stack; void StackInit(Stack* ...原创 2019-07-27 17:46:51 · 115 阅读 · 0 评论 -
程序员成长之旅——插入排序
程序员成长之旅——插入排序直接插入排序希尔排序 直接插入排序 希尔排序原创 2019-09-27 20:11:00 · 136 阅读 · 0 评论 -
程序员成长之旅——单链表的基本操作
程序员成长之旅——单链表什么是单链表C语言的实现 什么是单链表 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。 今天我来跟大家分享一下不带头的一个链表的实现。 C语言的实现 定义链表结构体 typ...原创 2019-07-23 19:50:30 · 141 阅读 · 0 评论 -
程序员成长之旅——删除链表中重复的结点
程序员成长之旅——删除链表中重复的结点题目简介牛客网 题目简介 牛客网 /* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } }; */ class Solution { public: ListNode* ...原创 2019-07-23 18:33:42 · 126 阅读 · 0 评论 -
程序员成长之旅——相交链表
程序员成长之旅——相交链表题目简介LeetCode 题目简介 编写一个程序,找到两个单链表相交的起始节点。 LeetCode /** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ typedef struct Li...原创 2019-07-23 17:05:09 · 122 阅读 · 0 评论 -
程序员成长之旅——Fibonacci sequence时间与空间复杂度
程序员成长之旅——Fibonacci sequence时间与空间复杂度时间复杂度递归非递归空间复杂度递归非递归 时间复杂度 递归 //递归算法 int fib1(size_t N) { if (N < 2) return N; return fib1(N - 1) + fib1(N - 2); } int main() { printf("%d\n", fib1(6));...原创 2019-07-01 15:55:32 · 319 阅读 · 0 评论 -
程序员成长之旅——顺序表
程序员成长之旅——顺序表简介代码实现Seqlist.hSeqlist.ctest.c运行效果 简介 静态顺序表是只适用于我们已经了解到需要存多少数据,而一般我们都是用动态顺序表,下面我给大家展示一下我所实现的动态顺序表的代码。 代码实现 Seqlist.h #define _CRT_SECURE_NO_WARNINGS 1 #pragma once #include<stdio.h> ...原创 2019-07-13 17:48:16 · 121 阅读 · 0 评论 -
程序员成长之旅——反转一个单链表
程序员成长之旅——反转一个单链表题目简介leetcode递归迭代 题目简介 leetcode 递归 /** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ typedef struct ListNode Node; ...原创 2019-07-13 18:17:27 · 148 阅读 · 0 评论 -
程序员成长之旅——删除链表中等于给定值 val 的所有节点
程序员成长之旅——删除链表中等于给定值 val 的所有节点题目简介LeetCode 题目简介 LeetCode /** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ typedef struct ListNode ...原创 2019-07-13 18:17:58 · 136 阅读 · 0 评论 -
程序员成长之旅——链表的中间结点
程序员成长之旅——链表的中间结点题目简介LeetCode 题目简介 LeetCode /** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ typedef struct ListNode Node; struct...原创 2019-07-13 18:23:24 · 113 阅读 · 0 评论 -
程序员成长之旅——输出倒数第k个结点
程序员成长之旅——输入一个链表,输出该链表中倒数第k个结点题目简介牛客 题目简介 1->2->3->4->5->6 输出:4 提示: 可以运用快慢指针 牛客 /* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };*/...原创 2019-07-13 18:30:07 · 117 阅读 · 0 评论 -
程序员成长之旅——合并两个有序链表
程序员成长之旅——合并两个有序链表题目简介LeetCode 题目简介 LeetCode /** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ typedef struct ListNode Node; struct...原创 2019-07-13 18:32:37 · 116 阅读 · 0 评论 -
程序员成长之旅——链表分割
程序员成长之旅——链表分割题目简介牛客 题目简介 编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前 给定一个链表的头指针 ListNode* pHead,请返回重新排列后的链表的头指针。注意:分割以后保持原来的数据顺序不变。 牛客 /* struct ListNode { int val; struct ListNode *next; ...原创 2019-07-13 18:35:51 · 148 阅读 · 0 评论 -
程序员成长之旅——环形链表
程序员成长之旅——环形链表题目简介LeetCode 题目简介 LeetCode /** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ typedef struct ListNode Node; bool hasCy...原创 2019-07-13 18:39:23 · 173 阅读 · 0 评论 -
程序员成长之旅——环形链表II
程序员成长之旅——环形链表II题目简介LeetCode 题目简介 LeetCode /** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ typedef struct ListNode Node; Node *Cy...原创 2019-07-13 18:40:29 · 121 阅读 · 0 评论 -
程序员成长之旅——二分查找
程序员成长之旅——二分查找简介问题解决溢出问题边界问题最终代码 简介 二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。 我们已知二分查找是有序的,为了方便讲解,这次我以一种升序的序列为例进行讲解。 问题解决 溢出问题 在循环体中,一般计算中间值middle时所用的是: midd...原创 2019-07-01 11:17:29 · 147 阅读 · 0 评论 -
程序员成长之旅——链表的回文结构
程序员成长之旅——链表的回文结构题目简介牛客网 题目简介 牛客网 /* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) {} };*/ class PalindromeList { public: bool chkPalindrome(Li...原创 2019-07-23 16:59:15 · 113 阅读 · 0 评论 -
程序员成长之旅——二分查找时间与空间复杂度
程序员成长之旅——二分查找时间与空间复杂度时间复杂度递归非递归空间复杂度 时间复杂度 递归 非递归 int binary_search(int* list, int len, int target) { int left = 0; int right = len - 1; int middle; while (left < right) { middle = (left ...原创 2019-07-01 15:08:19 · 676 阅读 · 0 评论