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