
简单数据结构
夏夕阳
这个作者很懒,什么都没留下…
展开
-
求带环单链表的入口点
我们可以设置两个指针,pFast和pSlow开始时都指向头结点,然后pFast一次向后移动两个节点,pSlow一次向后移动一个节点直到他们相遇 这样我们就得到了一个相遇点,如上图所示: 我们可以得到这样一个结论: 2(L+x) = L + nR + x L + x = nR 取极值n=1可得: L = R - x; 也就是说从相遇点到交点的距离和头结点到交点的距离相等 然后把原创 2017-03-15 16:14:03 · 507 阅读 · 0 评论 -
链表实现
////////////////////////////////////////////////// //初始化 #include #include #include void InitList(PNode *pHead) { *pHead = NULL; } //创建新节点 PNode BuyNode(DataType data) { PNode pCur = (PNo原创 2017-03-12 21:54:17 · 301 阅读 · 0 评论 -
求两个单链表的交点(可能带环)
先简单分析: 两个单链表相交分如图几种情况: 实现如下:原创 2017-03-15 21:38:01 · 725 阅读 · 0 评论 -
递归形式二分查找
在进行二分查找时,最需要注意的有以下几点:原创 2017-04-14 22:09:44 · 486 阅读 · 0 评论 -
二叉树中序遍历
递归版本: void _InOrderR(Node* pRoot) { if (NULL == pRoot)//出口 return; _InOrderR(pRoot->LC);//访问左子树 cout data << " ";//访问结点 _InOrderR(pRoot->RC);//访问右子树 } 非递归版本: void _InOrderNor(Node* pRo原创 2017-05-12 15:47:15 · 430 阅读 · 0 评论 -
二叉树前序遍历
递归版本: void _PreOrderR(Node* pRoot) { if (NULL == pRoot)//出口 return; cout data << " ";//对节点进行访问 _PreOrderR(pRoot->LC);//访问左子树 _PreOrderR(pRoot->RC);//访问右子树 } 非递归版本: 基本思想,先对结点进行访问,在原创 2017-05-12 15:30:22 · 317 阅读 · 0 评论 -
AVL树的实现
AVL树: AVL树也成为平衡二叉树,它是这样定义的: 一棵AVL树或者是空树,或者是具有以下性质的二叉搜索树: 1、它的左右子树都是AVL树 2、左子树和右子树高度之差(简称平衡因子)的绝对值不超过1(-1、0、1) AVL树的插入: 在插入节点后会造成父节点的平衡因子发生改变,需要从下往上更新平衡因子,若某一节点的平衡因子的绝对值大于1,说明以这个结点为根的树已经不原创 2017-05-24 00:49:02 · 505 阅读 · 0 评论 -
二叉树后序遍历
递归版本: void _PostOrderR(Node* pRoot) { //递归出口 if (NULL == pRoot) return; //遍历左子树 _PostOrderR(pRoot->LC); //遍历右子树 _PostOrderR(pRoot->RC); cout data << " "; } 非递归版本: void _PostOrd原创 2017-05-06 00:37:33 · 394 阅读 · 0 评论