
数据结构
我这个人很任性的
这个作者很懒,什么都没留下…
展开
-
找出出现次数最多的数字
数据结构原创 2022-12-29 18:54:01 · 452 阅读 · 0 评论 -
找到数组中两个元素相加等于指定数的所有组合
排序+两路查找#include <iostream>#include <algorithm>using namespace std;class Solution{public: void printPairSums(int arr[], int len, int sum) { int first = 0; ...原创 2019-08-08 15:26:47 · 1194 阅读 · 0 评论 -
删除排序数组中的重复项
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。原创 2019-08-08 16:44:12 · 96 阅读 · 0 评论 -
二叉树-单度节点删除
递归实现#include <iostream>#include "BTree.h"using namespace std;using namespace DTlib;template < typename T >BTreeNode<T>* createTree(){ static BTreeNode<int> ns[9]...原创 2019-08-07 09:48:41 · 206 阅读 · 0 评论 -
二叉树-单度节点的删除
递归实现(不带父亲指针)#include <iostream>#include "BTree.h"using namespace std;using namespace DTlib;template < typename T >BTreeNode<T>* createTree(){ static BTreeNode<int&g...原创 2019-08-07 10:00:00 · 444 阅读 · 2 评论 -
中序线索化二叉树
不允许使用其他数据结构#include <iostream>#include "BTree.h"using namespace std;using namespace DTlib;template < typename T >BTreeNode<T>* createTree(){ static BTreeNode<int>...原创 2019-08-07 10:25:34 · 93 阅读 · 0 评论 -
链表:在一次递归后找到单链表的中间元素
方法:快慢指针的方法快指针每次走2个结点,慢指针每次走1个结点,当快指针走完链表,慢指针刚好走到中间。注意:当结点数是奇数时 慢指针 走到 中间结点, 当结点数是偶数时,此时中间结点有2个,此时慢指针指向靠前那个结点。 eg 1 3 5 7 9 快指针第一次走到 5 第二次走到 9 然后链表走完,慢指针走2步 刚好走到 中间结点5 ...原创 2019-08-09 23:10:13 · 519 阅读 · 0 评论 -
单向链表的转置-非递归实现
#include <iostream>using namespace std;//结点struct Node{ int value; Node* next;};//尾插法Node* create_list(int v, int len){ Node* ret = NULL; Node* slider = NULL; ...原创 2019-08-10 21:31:34 · 155 阅读 · 0 评论 -
判断一个单链表是否有环及环入口
要求:不允许修改链表结构 时间复杂度o(n),空间复杂度o(1)判断是否有环: 如果链表有环,那么在遍历时则会陷入死循环。使用快慢指针 快指针移动2步,慢指针移动1步 如果走到某一步,快慢指针相遇,则说明有环环入口点: 我们假设链表头部到环入口距离 len, 环入口到快慢指针交汇点的距离为x,环的长度为R。环入口到快慢指针第一次交汇时,设慢指针走的长...原创 2019-08-11 11:02:37 · 187 阅读 · 0 评论 -
删除未经过排序的链表中重复的节点
给定一个无序单链表的头节点 head,删除其中值重复出现的节点。 例如:1->2->3->3->4->4->2->1->NULL,删除值重复的节点之后为1->2->3->4->NULL。循环遍历,类似于选择排序思想#include <iostream>using namespace std;...原创 2019-08-11 11:31:24 · 526 阅读 · 0 评论 -
计算单链表的长度
递归实现和非递归#include <iostream>using namespace std;//结点struct Node{ int value; Node* next;};//尾插法Node* create_list(int v, int len){ Node* ret = NULL; Node* slider = NUL...原创 2019-08-11 11:48:17 · 4360 阅读 · 0 评论 -
如何找出单链表中的倒数第k个元素
方法1:循环遍历单链表长度为n,倒数第k个元素可以转化为正数n-k个 第一次遍历求解单链表的长度 第二次遍历查找正数n-k个元素方法2:快慢指针快指针移动k次,慢指针不动 快慢指针之间间距为k,然后再同时往后移动,每次移动1次,快慢指针保持等间距,当快指针的next为空,则慢指针为倒数第k个结点#include <iostream>using namespace...原创 2019-08-11 15:03:29 · 914 阅读 · 0 评论 -
如何在未排序的整数数组中找到最大值与最小值
取双元素法:把数组中相邻的两个元素分为一组,然后比较这两个元素,较大者和max比较,如果大于max则更新max较小者和min比较,小于min则更新min。算法的时间复杂度为O(1.5*n)。注意:数组长度为奇数还是偶数,这是需要考虑的。#include <iostream>#include <vector>using namespace std;...原创 2019-08-08 11:33:43 · 2789 阅读 · 0 评论 -
数组:请在给出的整数数组中找到重复的数字
题目:在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。思路:我们注意到,数组中的数字都在0到n-1范围内。如果这个数组中没有重复的数字,那么当数组排序后,数字i就会出现在索引为...原创 2019-08-08 10:15:11 · 1054 阅读 · 0 评论 -
约瑟夫环问题
已知n个人(以编号0, 1 , 2 , 3 ,…,n-1分别表示)围坐在—张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下—个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的入全部出列。在罗马人占领乔塔帕特后,39个犹太人与 Josephus及他的朋友躲到一个洞中,39个犹大人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第...原创 2019-08-03 19:35:09 · 338 阅读 · 0 评论 -
栈的应用实践-符号匹配问题
在C语言中有一些成对匹配出现的符号括号 :( ),[ ],{ },< >引号 :' '," "问题 : 如何实现编译器中的符号成对检测?算法思路 : -从第—个字符开始扫描 当遇见普通字符时忽略 当遇见左符号时压入栈中 ...原创 2019-08-04 14:08:13 · 295 阅读 · 0 评论 -
栈和队列
栈和队列在实现上非常类似,是否可以用栈实现队列?问题分析 : 用栈实现队列等价于用“后进先出”的特性实现 "先进先出" 的特性!实现思路 准备两个栈用于实现队列: stack_in和stack_out ▪ 当有新元素入队时:将其压入stack_in ▪ 当需要出队时: ...原创 2019-08-04 15:41:59 · 128 阅读 · 0 评论 -
单向链表的转置
思路:递归实现#include <iostream>using namespace std;//结点struct Node{ int value; Node* next;};//尾插法Node* create_list(int v, int len){ Node* ret = NULL; Node* slider =...原创 2019-08-04 21:29:00 · 444 阅读 · 0 评论 -
单向有序链表的合并
递归解法#include <iostream>using namespace std;struct Node{ int value; Node* next;};Node* create_list(int v, int len){ Node* ret = NULL; Node* slider = NULL; for(int...原创 2019-08-04 21:47:57 · 178 阅读 · 0 评论 -
汉诺塔问题
汉诺塔问题 -将木块借助B柱由A柱移动到C柱 -每次只能移动一个木块 - 只能出现小木块在大木块之上递归实现#include <iostream>using namespace std;void HanoiTower(int n, char a, char b, char c){ if(n == ...原创 2019-08-04 21:55:27 · 102 阅读 · 0 评论 -
全排列
递归解法#include <iostream>#include <cstring>using namespace std;void permutation(char* s, char* e){ if(*s == '\0') { cout << e << endl; } else ...原创 2019-08-04 22:14:19 · 101 阅读 · 0 评论 -
逆序打印单链表中的偶数结点
递归解法#include <iostream>using namespace std;struct Node{ int value; Node* next;};Node* create_list(int v, int len){ Node* ret = NULL; Node* slider = NULL; for(int...原创 2019-08-05 10:18:36 · 320 阅读 · 0 评论 -
八皇后问题
八皇后问题递归解法#include <iostream>#include "LinkList.h"using namespace std;using namespace DTlib;template <int SIZE>class QueueSolution{protected: enum { N = SIZE + 2}; st...原创 2019-08-05 14:11:25 · 105 阅读 · 0 评论 -
数组:找1到n中缺失的数字(长度为n-1的整形数组,数字的范围在1到n,找其中一个缺失的数字)
题目:给定一数组如 [1, 2, 3, 5],如何查找出缺失的数字 4.1.求和法 解题思路:数字有规律,1~100 内的连续数字,只缺失一个数字,只要求和相减即可 (Sum1 - Sum2)。其中, Sum1 代表的是完整不缺数字的期待总和,等于 1+2+3+4+5=5*(5+1)/2=15,其演变表达式为 N(N+1)/2;Sum2 代表是的实际数组元素的总和,等于 1+2+3+5...原创 2019-08-07 22:23:07 · 2039 阅读 · 0 评论 -
代理模式
当待排数据元素为体积庞大的对象时,如何提高排序的效率?问题分析- 排序过程中不可避免的需要进行交换操作 -交换操作的本质为数据元素间的相互复制 -当数据元素体积较大时,交换操作耗时巨大解决方案:代理模式 1. 为待排数据元素设置代理对象 2. 对代理对象所组成的序列进行排序...原创 2019-08-05 22:02:26 · 95 阅读 · 0 评论 -
数据结构
目标:创建可复用的数据结构软来自狄泰软件学院记录本人学习过程中不熟悉的知识点1.创建DTLib::Object类的意义遵循经典设计准则,所有数据结构都继承自Object类 定义动态内存申请的行为,提高代码的可移植性2.Object类void* Object::operator new (size_t size) throw();//不抛出任何异常,在QT5.12中重载ne...原创 2019-07-14 00:17:24 · 149 阅读 · 0 评论