数据结构
四夕立羽
这个作者很懒,什么都没留下…
展开
-
C#:快速排序,有相同的数字会忽略,然后继续先前的寻找方向去找下一个满足要求的数字进行替换
概述挖坑填数+分治法对挖坑填数进行总结i =L; j = R; 将基准数挖出形成第一个坑a[i],例如第一次的基准数就是0索引的j–由后向前找比它小的数,找到后挖出此数填前一个坑a[i]中。i++由前向后找比它大的数,找到后也挖出此数填到前一个坑a[j]中。再重复执行2,3二步,直到i==j,将基准数填入a[i]中,相遇时再按照基准更新左半边索引,和右半边索引quick_sort(s, l, i - 1);quick_sort(s, i + 1, r);递归调用,直到每个递归的l 与 r相等原创 2022-05-03 19:17:23 · 836 阅读 · 0 评论 -
C#:TopK:1万个数取前最大的100,堆排序
把1万个数字的前100个 首先放入数组,构成最小堆再循环100到一万之间的。 每次循环判断当前数字是否大于ary[0]当大于时,首先把头节点remove,再把当前数字放入ary[0], 在那100个数之内进行最小堆排序当循环完循环100到一万后。 最大的前100个数字就出来了。时间复杂度第一次构建最小堆时,可以不堆排序,而是把最小值放入到头节点例如:k为头100,n为1万时间复杂度:O(k+n*logk) 空间复杂度:O(n)堆排序using System;using System..原创 2022-05-01 22:31:58 · 1134 阅读 · 0 评论 -
C#:数据结构queue队列源码:循环使用数组头标,尾标,防止不停扩容数组
https://referencesource.microsoft.com/#mscorlib/system/collections/queue.cs概述初始化:默认32个,每次2倍扩。所以在初始化时,能预设大小,防止频繁扩容public Queue(): this(32, (float)2.0)入队扩容:内部是个数组,发现size不够,扩容。当头索引在尾索引前,复制size大小到新newarray里;当尾索引在头前,先复制头到数组size-1标,再复制数组0标到尾private vo原创 2022-03-25 20:00:00 · 1045 阅读 · 0 评论 -
C#:stack栈源码,数组栈,链栈
转https://www.cnblogs.com/forever-ys/p/15322022.htmlhttps://referencesource.microsoft.com/#mscorlib/system/collections/stack.cs概述:数组栈:Push不够时进行扩容Array.Copy,每次2倍每次Push放在数组的尾部每次Pop,数组尾部取出,取出后最后项目 _array[_size] = null(释放内存),然后size-1C#源码采用数组栈链栈:Top对象保转载 2022-03-25 09:52:47 · 307 阅读 · 0 评论 -
C#数据结构:两栈实现队列,两队列实现栈
两个栈实现队列:栈实现先进先出栈1负责队尾,栈2负责队头每次入队,栈2无元素且栈1无元素,入栈2;否则入栈1每次出队,栈2有元素,出栈2顶;否则把全部栈1入栈2,再出栈2顶bool Pop(ref int value) { if (m_stack2.Count > 0) { value = m_stack2.Pop(); return true; } while (m原创 2022-03-16 20:45:00 · 1013 阅读 · 0 评论 -
c# 遍历字典改key
void test(int cur, int cnt) { List<string> list = new List<string>(m_pptData.dicPpt.Keys); foreach (string key in list) { if (int.Parse(key) > cur) {原创 2017-12-13 02:26:50 · 3956 阅读 · 0 评论 -
C#:冒泡排序,已经排好序的优化
第一层循环,i从 0到max-1第二个循环,j从0到max-i-1每次比较j与j+1的大小,如果发生位置交换,hasExchagend置true如果第一次冒泡没发生交换,hasExchagend == false,说明已经全部是排好顺序的,直接breakpublic static void BubbleSort(int[] array) { bool hasExchagend = false; for (int i = 0; i <原创 2017-04-26 16:53:51 · 531 阅读 · 0 评论 -
c#字典中删除值为某浮点数
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Collections;namespace ConsoleApplication1{ class Program {原创 2017-04-05 23:43:22 · 481 阅读 · 0 评论 -
c#一个list去掉其中重复元素
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Collections;namespace ConsoleApplication1{ class Program {原创 2017-04-05 21:02:34 · 2538 阅读 · 0 评论 -
c# list 去重复
针对数组可以用List.Distinct(),可以过滤掉重复的内容。针对对象中的某个字段只能用Distinct(IEqualityComparer)using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespa原创 2016-06-07 02:46:54 · 3755 阅读 · 0 评论 -
c# list 委托排序
在比较方法中需要实现对象比较规则,这个方法实现后,就可以把这方名字作为参数委托给List的Sort方法,Sort方法在排序时会执行这个方法对List中的对象进行比较using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;原创 2016-06-07 02:09:36 · 876 阅读 · 0 评论 -
C#中的深复制和浅复制(在C#中克隆对象)
C# 支持两种类型:“值类型”和“引用类型”。 值类型(Value Type)(如 char、int 和 float)、枚举类型和结构类型。 引用类型(Reference Type) 包括类 (Class) 类型、接口类型、委托类型和数组类型。如何来划分它们?以它们在计算机内存中如何分配来划分值类型与引用类型的区别?1,值类型的变量直接包含其数据,2,引用类型的转载 2016-06-12 03:26:46 · 10614 阅读 · 0 评论 -
3个骰子求和
给定一个整数,3至18,求3个骰子累加之和为这个整数,打印出这三个骰子各自显示的数// 3RandomSum.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include "time.h"using namespace std;#define myMax(x,y) ( x>y?x:y )#define myMin(原创 2015-12-01 01:02:30 · 1347 阅读 · 0 评论 -
正则表达式编程实例
1.使用c++的正则表达式替换对应内容std::string sKey = it->first; std::string sPattern = "()"; std::regex rPattern(sPattern); std::string sReplace = "$1$2" + it->second + "$4"; sMsg = std::regex_replace(sMs原创 2015-08-22 03:22:54 · 990 阅读 · 0 评论 -
C语言 文件单词的检索与计数
1.设计要求与分析建立一个文本文件,每个单词不包含空行且不跨行。检索单词的出现的行数,与位置。2.具体设计2.1建立文本文件2.1.1定义一个串变量typedef struct{ char cACh[MAXSIZE]; int iLenght;}SEQSTR;这是一个顺序串void fileCreate ( ){ int i; SEQSTR STR;原创 2015-08-27 23:54:52 · 4453 阅读 · 2 评论 -
vector<vector>排序
已知:每类奖励下面不止四种,是不确定数量(至少一种)。要求有可领取奖励的块上移到顶,如果有多个可领奖励块,它们的前后顺序和原来一样。这里每个标题栏和可领取块都是一张map里面的元素。如下图:解:1.std::map表按照标题分类转为一张std::vector>。(最后一行不可遗漏)std::vector vecCard; vecCard.clear(); for (i原创 2015-07-13 23:27:26 · 713 阅读 · 0 评论 -
回溯解决爬楼梯问题
1.问题描述每次爬楼梯有每次可跨1,2,3步,爬上一个N阶楼梯有多少种方式,打印出每种方式。2.源代码// ConsoleApplication6.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include #include using namespace std;typedef std::vector VecS原创 2015-08-23 15:51:35 · 2151 阅读 · 0 评论 -
回溯+栈解决八皇后的问题
1 设计要求与分析在8*8的国际象棋棋盘上放置了八个皇后,要求没有一个皇后能吃掉另一个皇后,即任意两个皇后都不处于棋盘的同一行、同一列或同一对角线上,这是做出这个课题的基础。2.全部程序// 八皇后.cpp : Defines the entry point for the console application.//#include "stdafx.h"#incl原创 2013-01-12 02:52:19 · 1029 阅读 · 0 评论 -
C++实现任意进制转换
使用C++的STL的栈,实现2,8,10,16,36任意进制的数的转换。思路是不管输入什么数,首先把它转换成10进制的数,再从十进制的数转换为别的进制。#include "stdafx.h"#include "JinZhi.h"#include #include "math.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILE原创 2014-11-23 19:24:45 · 6360 阅读 · 0 评论