摘要: 题目:对于一棵有N个结点的树,设计在O(N)时间内完成的先序、中序与后序遍历算法一、先序遍历递归实现:void InOrder( SearchTree T ){ if ( T != NULL ) { Visit( T ); InOrder( T->Left )... 阅读全文
posted @ 2014-10-18 17:21 Leptus 阅读(316) 评论(0) 推荐(0) 编辑
摘要: 题目:设计一个执行中序遍历的非递归算法解答:分析:1、使用栈模拟递归调用的过程,即可以实现中序遍历2、在结点中增加指针域,使该指针域指向父节点,通过迭代即可实现中序遍历非递归算法:栈模拟算法版本一:// InOrder Traveraslvoid InOrder( SearchTree T ) { ... 阅读全文
posted @ 2014-10-18 16:18 Leptus 阅读(302) 评论(0) 推荐(0) 编辑
摘要: 题目:给出O(N)运行时间的非递归算法,实现对一个含N个元素的链表的逆转,要求空间复杂度为O(1)代码:/* Assuming List with header and L is not empty */List ReverseList( List L ){ Position CurrentP... 阅读全文
posted @ 2014-10-18 13:57 Leptus 阅读(223) 评论(0) 推荐(0) 编辑
摘要: 题目:使用单链表实现队列,Enqueue与Dequeue操作时间为O(1)代码:struct Node;struct QueueRecord;typedef struct Node * PtrToNode;typedef struct QueueRecord * Queue;struct Node{... 阅读全文
posted @ 2014-10-18 13:52 Leptus 阅读(414) 评论(0) 推荐(0) 编辑
摘要: 题目:使用链表实现栈,Push与Pop操作时间为O(1)解答:代码如下: 1 /* 2 ADT: 栈 3 实现:带头结点的单链表 4 */ 5 6 struct Node; 7 typedef struct Node *PtrToNode; 8 typedef Pt... 阅读全文
posted @ 2014-10-18 13:49 Leptus 阅读(310) 评论(0) 推荐(0) 编辑
摘要: 题目:用两个队列实现一个栈,并分析栈操作运行时间分析:栈的操作只能在表头进行;而队列的入队在表头进行,出队只能在栈尾进行;考虑将栈底元素变为栈顶元素,即进行倒置,就能在表头进行Pop操作;解答:(不考虑溢出)1、使用两个队列A与Tmp,Tmp队列作为中转;2、当进行Push操作时,在队列A中进行入队... 阅读全文
posted @ 2014-10-18 13:41 Leptus 阅读(206) 评论(0) 推荐(0) 编辑
摘要: 题目:用两个栈实现一个队列,并分析相关队列操作的运行时间解答:1、使用两个栈S1与S2;2、通过栈S1的Push执行队列入队操作,通过栈S2的Pop执行队列出队操作3、当栈S2为空后,即S1->Top = S2->Top,转换;栈S2的Push执行入队操作,栈S1的Pop执行出队操作操作时间复杂度:... 阅读全文
posted @ 2014-10-18 13:26 Leptus 阅读(228) 评论(0) 推荐(0) 编辑
摘要: 问题:给定n个整数的集合S和另一个整数X,描述一个运行时间为O(log N)的算法,该算法能够确定S中是否存在两个其和刚好为X的元素算法描述:1、先将集合中元素排序在数组A中2、对于集合中的每一个元素A[i],在排好序的数组A中二分查找 X-A[i]3、查找成功则存在,循环结束后查找未成功则不存在伪... 阅读全文
posted @ 2014-10-18 02:00 Leptus 阅读(240) 评论(0) 推荐(0) 编辑
摘要: 1、二分查找(Binary Search) 二分查找又称折半查找,它是一种效率较高的查找方法。 二分查找要求:线性表是有序表,即表中结点按关键字有序,并且表的存储结构为顺序结构。不妨设有序表是递增有序的。2、二分查找的基本思想 二分查找算法思想: (1)首先确定该区间的中点位置: mid... 阅读全文
posted @ 2014-10-18 01:16 Leptus 阅读(746) 评论(0) 推荐(0) 编辑