数据结构和算法
小强19920310
这个作者很懒,什么都没留下…
展开
-
利用栈实现车厢重排
入轨道上的车厢为无序的,出轨道车厢为从右向左递增排序,使的在对应经过车站时可以直接卸载下尾部车厢而不用调整其他车厢。思路:首先要确定出轨道上下一个应来的车厢序号:nextCarToOutput,到达后令其递增缓冲轨道上存入轨道上进来但还不能进入出轨道的车厢,每一个缓冲轨道中从顶部到底部数据递增,如果一个数据进入缓冲轨道,如果所有缓冲轨道顶部的数据都大于这个数据,那么其进入这些数据中最小的对应的缓冲...原创 2018-03-07 12:58:51 · 803 阅读 · 0 评论 -
冒泡排序,选择排序,插入排序,快速排序
一:冒泡排序冒泡排序算法的运作如下:(从后往前)比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。针对所有的元素重复以上的步骤,除了最后一个。持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。冒泡排序总的平均时间复杂度为 。相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定...原创 2018-03-03 17:28:12 · 326 阅读 · 0 评论 -
C++中字符串反转
一:#include <iostream> using namespace std;void Reverse(char *s) { int n = strlen(s); for (int i = 0, j = n - 1; i<j; i++, j--) { char c = s[i]; s[i] = s[j]; s[j] = c; }}int ma...原创 2018-03-03 16:46:25 · 427 阅读 · 0 评论 -
反转链表
/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/ListNode* ReverseList(ListNode* pHead){ListNode *p;ListNode*p1=head;ListNode *p2=NULL...原创 2018-03-02 10:39:46 · 122 阅读 · 0 评论 -
利用栈离线等价类问题
思路:(1)建立n个表存储关系对,对于关系对(i,j)i在list[j]中j在list[i]中(2)寻找等价类时间复杂度为:O(n)int main(){ int n; int r; cout << "输入元素个数" << endl; cin >> n; if(n<2) { cout << "元素个数太小" <&a原创 2018-03-07 20:30:53 · 604 阅读 · 0 评论 -
网易:迷路的牛牛
牛牛去犇犇老师家补课,出门的时候面向北方,但是现在他迷路了。虽然他手里有一张地图,但是他需要知道自己面向哪个方向,请你帮帮他输入描述: 每个输入包含一个测试用例。 每个测试用例的第一行包含一个正整数,表示转方向的次数N(N<=1000)。 接下来的一行包含一个长度为N的字符串,由L和R组成,L表示向左转,R表示向右转。输出描述: 输出牛牛最后面向的方向,N表示北,S表示南,E...原创 2018-05-04 22:58:04 · 196 阅读 · 0 评论 -
网易:安置路灯
小Q正在给一条长度为n的道路设计路灯安置方案。为了让问题更简单,小Q把道路视为n个方格,需要照亮的地方用’.’表示, 不需要照亮的障碍物格子用’X’表示。小Q现在要在道路上设置一些路灯, 对于安置在pos位置的路灯, 这盏路灯可以照亮pos - 1, pos, pos + 1这三个位置。小Q希望能安置尽量少的路灯照亮所有’.’区域, 希望你能帮他计算一下最少需要多少盏路灯。 ## 输...原创 2018-05-04 23:00:25 · 172 阅读 · 0 评论 -
网易: 被3整除
小Q得到一个神奇的数列: 1, 12, 123,…12345678910,1234567891011…。并且小Q对于能否被3整除这个性质很感兴趣。小Q现在希望你能帮他计算一下从数列的第l个到第r个(包含端点)有多少个数可以被3整除。 ## 输入描述: 输入包括两个整数l和r(1 <= l <= r <= 1e9), 表示要求解的区间两端。输出描述: 输出一个整数...原创 2018-05-04 23:01:28 · 506 阅读 · 0 评论 -
利用递归返回数组中的最大值
int theMax(int a[],int n){int t;if(n>1){t=f(a,n-1);return t>a[n-1]?t:a[n-1];}elsereturn a[0];}原创 2018-05-05 22:22:25 · 849 阅读 · 0 评论 -
迷宫寻址问题
思路:(1)首先为了解决边界问题在一个矩形迷宫的四周围上“一堵墙”,然后不能走,这样就不用特殊处理边界问题了:(2)对迷宫的各个元素可以用一个bool型的二维数组表示,这样可以减少占用的内存空间,0表示可以走,1表示不可以走;(3)对每一个迷宫位置表示为(i,j),对应的矩阵表示为maze[i][j];(4)每个位置相邻有四个方向,每次要选择一个可以走得通没有障碍物的方向行走。所以需要建立一个表示...原创 2018-03-11 16:55:01 · 286 阅读 · 0 评论 -
将两个有序链表合并为一个
template <class T>struct ListNode{T data;struct ListNode *next;}非递归方法:Struct ListNode *(ListNode*head1,ListNode *head2){struct ListNode *head=new ListNode;struct ListNode *p1=head1;...原创 2018-03-13 23:00:26 · 264 阅读 · 0 评论 -
二维数组指针指向问题
&a为取的整个数组的地址,故&a+1为数组后的地址,ptr-3为数组中倒数第三个元素的地址。故值为9p为数组指针,指向含有三个整形元素的数组:p[0]为数组第一行首地址,p[0]+1即为&p[0][1],*(p[0]+1)即为n[0][1]=20p为二级指针,*p为数组第一行首地址即为p[0],(*p)[2]即为p[0][2]=n[0][2]=30在C语言中,若有定义:in...原创 2018-03-05 23:17:49 · 326 阅读 · 0 评论 -
利用栈实现括号匹配
(1)右括号总是与最近的左括号匹配(2)从左往右遍历字符串,遇到左括号就入栈,然后遇到右括号时就把它与栈顶出元素对应的左括号匹配(3)当栈为空时遇到右括号则此右括号无匹配的左括号(4)当最终右括号匹配完毕后栈内还有剩余元素则表明这些位置的左括号没有与之匹配的右括号void printMatchedPairs(string exper){int length=(int) exper.size...原创 2018-03-06 18:57:30 · 5205 阅读 · 0 评论 -
利用栈结合递归解决汉诺塔问题
三个数组栈,分别代表三个汉诺塔,刚开始碟子都在汉诺塔1中,要把其移动到2中,利用3作为中转,碟子在塔中从上到下为从小到大,越往下的碟子越大,这里用数字表示大小1~n1->3->2(最底下的一个到2)3->1->2(最底下的一个到2)//全局变量arrayStack<int>tower[4];moveAndShow(int n,int x,int y,in...原创 2018-03-06 20:03:25 · 1236 阅读 · 0 评论 -
各种排序算法时间复杂度
各种排序算法比较 各种常用排序算法类别排序方法时间复杂度空间复杂度稳定性复杂性特点最好平均最坏辅助存储 简单 插入排序直接插入O(N)O(N2)O(N2)O(1)稳定简单 希尔排序O(N)O(N1.3)O(N2)O(1)不稳定复杂 选择排序直接选择O(N)O(N2)O(N2)O(1)不稳定 堆排序O(N*log2N)O(N*log2N)O(N*log2N)O(1)不稳定复杂 交换排序冒泡排序...转载 2018-03-18 17:43:34 · 759 阅读 · 0 评论 -
二叉树
二叉树的镜像利用栈实现void MirrorNonRecurively(BinaryTreeNode *pNode) { if(NULL == pNode) return; stack<BinaryTreeNode *> stackTreeNode; stackTreeNode.push(pNode); while(stac...原创 2018-03-20 21:30:33 · 161 阅读 · 0 评论 -
字符串匹配
在文本中查找对应的模式成为字符串匹配:文本:T模式:P一:朴素的字符串匹配算法思路:(1)首先有两个游标i,j指向文本和模式的位置(2)当T[i]=P[j]时i++,j++,继续往下比较。(3)当T[i]!=P[j]时,i回溯到上次开始比较的下一位,j回溯到0(4)当找到一段连续的字符与模式字符串匹配最终模式字符串匹配成功,返回此次开始比较的文本位置。int native_stringmatch(...原创 2018-03-28 21:47:51 · 192 阅读 · 0 评论 -
堆排序
(1)堆排序为选择排序的一种,适合于大量数据的排序,不稳定的算法,时间复杂度为O(logn);(2)大根堆为一个完全二叉树,根节点的关键字值大于子节点,整个树的根节点为最大值,用数组表示R[1....n],R[1]为最大,将R[1]和R[n]互换,但此时从1到n-1依然是无序。需要对其进行重新调整处理;(3)建堆-》取首元素-》调整为大根堆//堆排序void HeapSort(int A[], ...原创 2018-04-04 17:13:18 · 109 阅读 · 0 评论 -
图的深度优先遍历和广度优先遍历
BFS思路广度优先遍历中从一个节点出发,例如1,先找到其邻接至的节点,如2,3,4然后依次把2,3,4放入队列,再从队列中依次取出每一个节点,找到其邻接至的节点插入到队列尾部最终当队列中元素为空时就找到了1可以到达的所有路径代码:virtual void bfs(int v,int reach[],int label)//所有图的表示方法都可以直接用的广度优先搜索方法...原创 2018-05-22 23:13:09 · 340 阅读 · 0 评论