![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 68
zhaojj1988
这个作者很懒,什么都没留下…
展开
-
AA树
在上一篇博客中写道红黑树的各种操作,但是它的各种操作,尤其是删除操作分类情况比较多且复杂,不容易编程实现。 因此,Arne Andersson在93年时,在一篇“Balanced search trees made simple”就对这个RBT进行了改进。但是,现在好像应用不是很多。对于这方面介绍的资料也比较少。 我写这篇文章就是想介绍一下AA树以及它的基本操原创 2012-10-28 17:07:08 · 6534 阅读 · 0 评论 -
快速排序的优化
今天,我们组这周小会讲了讲算法导论上的快速排序优化问题;和大家分享,有什么问题,希望大家指正,谢谢!!!1. 快速排序定义:通过一趟排序将待排序数组分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。 它是采用分治思想,进行排序;每次选取一个枢轴,确定枢轴的位置,将原数组分成两部分,进行递原创 2012-11-04 17:49:32 · 1476 阅读 · 3 评论 -
红黑树
昨天刚讲了红黑树,今天趁热打铁,写一下,帮助自己增强记忆,也希望能帮到大家并希望大家留下宝贵建议: 1、红黑树引入的目的: BST查找效率较低:查找最好时间复杂度O(lgn);查找最坏时间复杂度O(n).AVL查找效率较高查找最好、最坏时间复杂度都是O(lgn)要求完全平衡,建立查找结构代价比较大;原创 2012-10-28 10:53:01 · 1477 阅读 · 0 评论 -
最优二叉查找树 次优二叉查找树 最优二叉树
未完成。。在数据结构课本中,查找,作为倒数的章节介绍,不是因为它不重要,而是它本身作为一种数据结构比较简单。但实用用性较强。按照查找的引出的先后顺序介绍:1. 静态查找(树)表以下介绍的是有序表查找,无序表只能顺序查找二分查找作为有序表查找的一种非常普通且实用的方法。大家并不陌生。思想:先确定待查记录所在的范围(区间),然后逐步缩小范围找到或找不到该记录为止。如原创 2012-11-11 21:08:39 · 10091 阅读 · 2 评论 -
指针辨析:悬垂指针、哑指针、野指针、智能指针
悬垂指针: 1:提出的原因:请看下面的代码片段:int *p=NULL;void main(){ int i=10;p=&i; cout<<"第一次:*p = "<<*p<<endl; cout<<"第二次:*p = "<<*p<<endl;}int *p=NULL;void fun(){int i=10转载 2013-04-08 19:08:27 · 12253 阅读 · 4 评论 -
数值的整数次方
前奏在写这个问题时,先说一下对于我们写程序时,应该考虑的问题。代码的规范程度 代码的书写规范程度会影响面试考官阅读代码的兴致,从下图可看出,书写、布局和命名规则都决定着代码的规范性。 首先,规范的代码书写清晰。绝大部分面试都要求应聘者在白纸或者白板上书写。不要因为担心没时间写代码就在纸上写潦草或者简略。通常面试代码量不会超过50行,所以关键是在写代码原创 2013-04-09 11:04:11 · 3121 阅读 · 0 评论 -
打印1到最大的n位数
题目:输入数字n,按顺序打印出1到最大的n位十进制数。比如输入3,则打印出1、2、3一直到最大的3位数即999。方法1//利用case语句使字符++char CharPlus(char a){ char b; switch ( a ) { case '0': b = '1'; break; case '1': b = '2'; break; case '2': b原创 2013-04-09 17:06:43 · 6202 阅读 · 1 评论 -
判断是否存在给定树的子结构
题目:输入两棵二叉树A和B,判断B是不是A的子结构。代码://给定的树结点类型class BinaryTreeNode{public: int m_nValue; BinaryTreeNode* m_pLeft; BinaryTreeNode* m_pRight;};/* 函数功能:判断pRoot1中是否有pRoot2的子结构 1、先找到pRoo原创 2013-04-10 20:30:44 · 972 阅读 · 0 评论 -
求连续子数组最大和
问题输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。例如输入的数组为-2,11,-4,13,-5,-2 和最大的子数组为11,-4,13因此输出为该子数组的和20。解析:本题解法多种多样,时间复杂度可以为:O(n^3),O(n^2),O(nlogn),O(n);我重原创 2013-04-15 10:05:15 · 1570 阅读 · 0 评论 -
求字符串全排列
说明: 方法1:利用STL中现有的排序函数进行排序; 方法2:不考虑字符串是否有重复; 方法3:考虑字符串又重复的情况;#include "stdafx.h"#include #include #include using namespace std;//using STL void print_arrange(string s){ sort(原创 2012-08-25 22:06:20 · 821 阅读 · 0 评论 -
平衡二叉( AVL)
1、AVL的提出目的: AVL的提出是为了提高BST的查找效率,因为BST在最坏情况下时间复杂度为O(lgn),而AVL则保证了在最坏情况下时间复杂度为O(lgn);2、AVL的定义: 1、是一棵BST树; 2、每个结点的左右子树高度差的绝对值不超过1;3、AVL操作的具体代码及实现:(C++)class AvlNode{public: Av原创 2012-10-28 09:39:21 · 799 阅读 · 0 评论 -
快排非递归算法
#include using namespace std;#include #include #include #include typedef struct{ int low; int high;}boundary;template int partition( vector& vec, int low, int high){ T piv原创 2011-12-01 23:14:28 · 577 阅读 · 0 评论 -
Debug和Release区别
VC下Debug和Release区别最近写代码过程中,发现 Debug 下运行正常,Release 下就会出现问题,百思不得其解,而Release 下又无法进行调试,于是只能采用printf方式逐步定位到问题所在处,才发现原来是给定的一个数组未初始化,导致后面处理异常。网上查找了些资料,在这 罗列汇总下,做为备忘~一、Debug 和 Release 的区别 Debu转载 2011-12-19 20:44:40 · 455 阅读 · 0 评论 -
时间函数
介绍 我 们在衡量一个函数运行时间,或者判断一个算法的时间效率,或者在程序中我们需要一个定时器,定时执行一个特定的操作,比如在多媒体中,比如在游戏中等,都 会用到时间函数。还比如我们通过记录函数或者算法开始和截至的时间,然后利用两者之差得出函数或者算法的运行时间。编译器和操作系统为我们提供了很多时间 函数,这些时间函数的精度也是各不相同的,所以,如果我们想得到准确的结果,必须使用合转载 2011-12-19 15:27:11 · 516 阅读 · 0 评论 -
快速排序的扩展
本文来自 http://blog.csdn.net/insistgogo/article/details/77980061、把序列中的正负数分开举例:序列:0,2,-1,4,-2,-3,6,7,-9,10处理好的序列:-9 -3 -1 -2 4 2 6 7 0 10注意:仅仅把正负数分开就好,正数和负数里面不要求次序不要求排序,这里遍历一遍序转载 2012-08-01 19:31:57 · 890 阅读 · 0 评论 -
C++ 类模板 队列基本操作
#include #include using namespace std;templateclass QueuePtr{public:QElemType data;QueuePtr* next;};/*结点元素*/ templateclass LinkQueue{private:QueuePtr* front;/*不要拉掉QElemType*/QueuePtr*原创 2011-12-01 22:54:56 · 835 阅读 · 0 评论 -
C++ 模板类 栈基本操作 数据结构
#include #include using namespace std;templateclass A{public:SElemType data;A* next;};templateclass SqStack{private:A* top;A* base;public:bool InitStack();bool DestroyStack();bool C原创 2011-12-01 22:52:39 · 837 阅读 · 0 评论 -
用辗转相除法求最大公约数
参考资料:http://kuapig.ycool.com/post.2842074.html// 求最大公约数.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include using namespace std;//最大公约数int gcd(int a, int b){ if ( a > b ) { if ( a % b == 0原创 2012-08-27 08:58:18 · 1068 阅读 · 0 评论 -
红黑树代码
为了能更好的理解红黑树,我把我写的关于红黑树代码放在博客里,如果有什么问题,欢迎大家留言,谢谢 定义一个结点部分enum COLOR{RED, BLACK};class CRB_Node{ public: CRB_Node(void); CRB_Node(const int item, CRB_Node * lch,CRB_Node * rch, CRB_Node *par原创 2012-10-29 19:14:48 · 1269 阅读 · 0 评论 -
插排的递归和非递归实现
插排的非递归很简单,用两层循环即可搞定,因此时间复杂度为O(n^2),空间复杂度为O(1)。代码如下:void InsertSort(int* pArr, int len){ if (len<2) return; int key, j; for (int i = 1; i < len; ++i ) { key = pArr[i]; //记录当前要排序原创 2013-10-22 11:01:21 · 1317 阅读 · 0 评论