摘要:○⇢○⇢○⇢○⇢NULL 这里先不关注怎么实现,而是考察一下链表有多少种操作的可能。基本操作:创建,插入,删除,遍历,合并...等等
阅读全文
随笔分类 - Data Structure
摘要:删除分为两种可能:1.只有左子树,或右子树,或叶结点。 叶结点、只有右子树的情况相似。2.有左子树和右子树的情况 先看完整代码: int Delete(Tree &p) { Tree q,s; if(p->right==NULL)/*只有左子树*/ { q=p; p=p->left; free(q)
阅读全文
摘要:二叉排序树,又称为二叉查找树。它或者是一棵空树,或者具有下列性质:1.若它的左子树不为空,则左子树上所有结点的值均小于它的根结点的值2.若它的右子树不为空,则右子树上所有结点的值均大于它的根结点的值3.它的左、右子树也分别为二叉排序树 简言而之:中序遍历就一定会得到从小到大排列的序列! 查找操作:首
阅读全文
摘要:主要对mid的计算进行改进,未改进之前的计算公式:改进后的公式:修改代码后:
阅读全文
摘要:来源于书本,这个小技巧还是记录一下,其实它所表达的意思就是,for循环和while循环的一点微妙区别。在for循环中,比如: 比较、自增、加上边界的判定,一共需3步,而while循环,则只需要两步,减去了边界判定的一步。
阅读全文
摘要:这种查找方法要求查找表的数据是线性结构保存,并且还要求查找表中的数据是按关键字从小到大有序排列的。二分查找是一种递归过程,每折半查找一次,可使查找范围缩小一半,当查找范围缩小到只剩下一个元素,而仍不等于关键字,说明查找失败,在最坏的情况下,折半查找所需要的比较次数为O(nlog2n)..
阅读全文
摘要:题目:求字符串[(())]的括号是否匹配,这个题相对比较简易,也记录一下。思路,左括号就入栈,遇到右括号就出栈一个元素进行匹配判定,构造一个switch。同时,设置一个监视flag,初始置1,一旦不匹配就将之置为0,也就是以后就不用再比较了。
阅读全文
摘要:/*-------完整代码----映雪-------*/ #include using namespace std; void sort(int left,int right,int a[]) { int i,j,t,temp; if(left>right) return; temp=a[left]; i=left; j=right; ...
阅读全文
摘要:图由数据元素和连接数据元素的线构成。在图中数据元素称为顶点(Vertex),连接顶点的线称为边(Edge)。一个图是由顶点集合和边集合组成的。一般记为形式:G=(V,E),或G=(V(G),E(G))。 1.有向图和无向图无向图:边没有方向。例(V1,V2),也可写为(V2,V1)。有向图:边有方向
阅读全文
摘要:/* 完整代码@映雪 */ #include <iostream> using namespace std; #define change(x,y); \ a[x]=a[x]+a[y];\ a[y]=a[x]-a[y];\ a[x]=a[x]-a[y]; void f(int a[],int l,i
阅读全文
摘要:选择排序的基本思想:对n个记录进行扫描,选择最小的记录,将其输出,接着在剩下的n-1个记录中扫描,选择最小的记录将其输出,不断重复这个过程,直到只剩一个记录为止... 简单选择排序法类似人的排序习惯:从数据中选择最小(或最大)的一个数据,然后将该数与第1个数交换,接下来从剩下数据中选择最小(或最大)
阅读全文
摘要:冒泡排序法是一种相邻数据交换的排序方法。基本思想是:对待排序记录关键字从后往前(逆序)进行多遍扫描,当发现相邻两个关键字的次序与排序要求的规则不符时,就将这两个记录进行交换。这样,关键字较小的记录将逐渐从后面向前面移动,就像气泡在水中向上浮一样。 改进算法:设置一个标志变量flag,在每一遍扫描之前
阅读全文
摘要:除此之外,并集的这个思路还可以求两个集合的相同元素,例,A={1,3,5,7},B={2,3,7},求两数组的相同元素
阅读全文
摘要:首先,把书上的算法简化一下,直接用数组研究更直观。 定义一个数组: 它假设第一个元素是有序的,然后用第二个元素(下一个元素)和它进行比较,通过循环移动判定,得到一个有序列。得到一个有序列之后,再用下一个元素和这个有序列进行比较,这里的比较,就是局部比较,采用的是尾插法,从后往前。 比如,前两个元素排
阅读全文
摘要:题目:表A 1 3 5,表B 2 4 6,都呈非递减排序,现将两个表合并成一个表,也呈非递减排序,存放在A中(或者B中),言外之意是不能开辟新表!拿出B中数据,沿着A的后面一直往前比较,如果小于就一直比,如果不小于就插入数据。 这样就相当于数组中的元素两两移动 现在出现一种情况,假如A的元素值一直大
阅读全文
摘要:四则运算:http://www.cnblogs.com/tinaluo/p/5282045.html ..
阅读全文
摘要:链栈和顺序栈的区别在于,链栈不受空间限制,根据链表生成,如图,首先观察它的特点: 灰色表示真实数据,而top指向的结点,称之为头结点,它的数据项没存入数据,仅仅是做为一个头结点存在。在链栈的初始化中,首先创建了一个头结点,但是里面没有存放数据,如果可能,存放链栈的长度也是可以的。 如果初始化不创建头
阅读全文
摘要:摘要: 摘要: 根据树的原理做的一个单链表,这里,把单链表看做【树】的简化版。 在树的递归创建中,首先创建是头结点,所以单链表也是一样; 单链表的结构: typedef struct node{ int data; struct node *next; }*List,Node; 创建摘要: 根据树的
阅读全文
摘要:循环队列并不复杂,把几个位置规定清楚是关键!比如,front和rear各指向哪?还有一些小细节,首先观察图:从书上来看,尾端rear必定为空(特意留下一个空位置),front总是指向队头,而rear指向尾。接着是几个重要的公式 判定队列满的公式队列长度的计算公式 下面以入队列说明,首先判定队列是否满
阅读全文
摘要:结构(带头结点) 初始化 创建(n个结点) 插入 删除 遍历 销毁 结构: 判空:(head->next==head) 初始化:主要注意链表为空的条件,执行语句:L->next=L; 创建:借助一个游标p进行移动、 插入:在第i个位置处插入e,先把指针移到i-1处,然后进行操作。此外,p从头结点开始
阅读全文