数据结构
文章平均质量分 75
花落留香
超越仅发生在弯道时最省力
展开
-
指针函数
一点一点积累。。。。 常规程序中,函数返回的指针通常应该是: (1)指向静态(static)变量; (2)指向专门申请分配的(如用malloc)空间; (3)指向常量区(如指向字符串"hello"); (4)指向全局变量; (5)指向程序代码区(如指向函数的指针)。原创 2014-10-06 11:55:04 · 573 阅读 · 0 评论 -
二叉树遍历算法
void PreOrderUnrec(Bitree *t) { Stack s; StackInit(s); Bitree *p=t; while (p!=NULL || !StackEmpty(s)) { while (p!=NULL) //遍历左子树 { visit转载 2014-10-04 09:20:50 · 673 阅读 · 0 评论 -
排序方法之美
回到主题,现在分析一下常见的排序算法的稳定性,每个都给出简单的理由。 (1)冒泡排序 冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以,如果两个元素相等,我想你是不会再无聊地把他们俩交换一下的;如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相邻起来,这时候也不会交换,所以相同元素的前后顺序并转载 2014-10-15 16:32:02 · 603 阅读 · 0 评论 -
找出两个链表中的第一个公共结点
问题描述:给定两个单向链表,找出它们的第一个公共节点。链表的节点定义如下: 问题分析:这是一道微软的面试题。微软非常喜欢与链表相关的题目,因此在微软的面试题中,链表出现的概率非常高。如果两个单向链表有公共的节点,也就是说两个链表从某一个节点开始,它们的m_pNext都指向同一个节点。但由于是单向链表的节点,每个节点只有一个m_pNext,因此从第一个公共节点开始,之后它们所有的节点都是重合的转载 2014-10-15 17:27:12 · 699 阅读 · 0 评论 -
排序练习题
排序试题汇总 一、填空题(每空1分,共24分) 1. 大多数排序算法都有两个基本的操作: 比较(两个关键字的大小) 和 移动(记录或改变指向记录的指针) 。 2. 在对一组记录(54,38,96,23,15,72,60,45,83)进行直接插入排序时,当把第7个记录60插入到有序表时,为寻找插入位置至少需比较 3 次。(可约定为,从后向前比较) 3转载 2014-10-15 16:11:11 · 11594 阅读 · 0 评论 -
散列表--线性探测法
最近复习了下数据结构中的哈希表,发现在计算等概率情况下查找不成功的平均查找长度时比较迷茫,不知道到底是怎么计算出来的。现在通过查阅资料终于知道如何计算了,所以记录下来以供以后查阅。 下面看下2010年2010年全国硕士研究生入学统一考试计算机科学与技术学科联考计算机学科专业基础综合试题中一个考哈希表的题。 Question1: 将关键字序列(7、8、30、11、18、9、1转载 2014-10-13 15:36:49 · 8565 阅读 · 2 评论 -
线索二叉树
一、线索二叉树的原理 通过考察各种二叉链表,不管儿叉树的形态如何,空链域的个数总是多过非空链域的个数。准确的说,n各结点的二叉链表共有2n个链域,非空链域为n-1个,但其中的空链域却有n+1个。如下图所示。 因此,提出了一种方法,利用原来的空链域存放指针,指向树中其他结点。这种指针称为线索。 记ptr指向二叉链表中的一个结点,以下是建立线索的规转载 2014-10-13 17:54:11 · 832 阅读 · 0 评论 -
散列表-拉链法
拉链法 (1)拉链法解决冲突的方法 拉链法解决冲突的做法是:将所有关键字为同义词的结点链接在同一个单链表中。若选定的散列表长度为m,则可将散列表定义为一个由m个头指针组成的指针数组T[0..m-1]。凡是散列地址为i的结点,均插入到以T[i]为头指针的单链表中。T中各分量的初值均应为空指针。在拉链法中,装填因子α可以大于1,但一般均取α≤1。 【例9.2】已知一组关键字和选定的转载 2014-09-30 11:48:29 · 3928 阅读 · 0 评论 -
最大子序列 分治法
static int MaxSubSum(const int a[],int Left,int Right) { int MaxLeftSum,MaxRightSum; int MaxLeftBorderSum,MaxRightBorderSum; int Center; if(Left==Right) if(a[Left]>0)原创 2015-09-23 13:02:29 · 1477 阅读 · 0 评论