![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 70
run_bear
但凡未得到,但凡是失去,总是最登对
展开
-
用JavaScript实现一个简单的网页版计算器
背景实现效果最终展现的页面如下图用到的技术实现思路具体实现代码原创 2021-08-05 20:59:34 · 9474 阅读 · 9 评论 -
删除无头单链表的非尾节点
删除无头单链表的非尾节点:可以转化为删除该节点的下一个节点,删除之前把之传给该节点即可。可以不要返回值,此处我加上返回值信息是为了判断是否删除成功。 int DelNotTail(Node* pos) //删除非尾节点{ if(pos == NULL || pos->_next == NULL) return -1; else //让pos保存po...原创 2017-07-20 14:52:38 · 284 阅读 · 0 评论 -
合并两个有序的单链表
题目:合并两个递增的单链表,使合并后的新链表中的节点依然是按照递增排序的。链表结点定义如下:struct ListNode{ int val; ListNode next;};分析:我们从链表头结点开始分析,如果链表1头结点的值小于链表2头结点的值,那么链表1的头结点就是合并后新链表的头结点。 我们继续合并两个链表中剩余的结点,依旧是比较两个链表头结点的值,找原创 2017-08-22 23:29:09 · 521 阅读 · 0 评论 -
判断一棵二叉树是不是完全二叉树
判断是否是完全二叉树:找到第一个度不为2的节点标记起来,如果后面的节点还有孩子则不是完全二叉树bool _IsCompleteBinaryTree(Node* _pRoot) { if (_pRoot == NULL) return true; Node* pCur = _pRoot; if ((pCur->_pLeft == NULL) && (pCur->_pRigh原创 2017-07-27 14:37:31 · 450 阅读 · 0 评论 -
二叉树的镜像(递归和非递归)
二叉树的镜像原理很简单,就是左子树变成右子树,每个节点都遵循这个原则就是镜像,直接来看代码 //二叉树镜像(递归) void _GetBinaryMirror(Node* _pRoot) { if (_pRoot == NULL) return; Node* pCur = _pRoot; if (pCur->_pLeft == NULL && pCur->_pR原创 2017-07-27 14:35:30 · 750 阅读 · 0 评论 -
二叉树的几种遍历方式
二叉树遍历可以分为深度优先遍历和广度优先遍历;其中深度优先又可根据访问根节点的次序不同分为:先序遍历(前序遍历)、中序遍历和后序遍历;前序遍历:根----->左子树---->右子树中序遍历:左子树---->根----->右子树后序遍历:左子树---->右子树----->根以下是递归的代码://前序遍历(递归)void _PreOrder(Node* _pRoot)原创 2017-07-27 14:31:39 · 327 阅读 · 0 评论 -
用两个栈实现一个队列
栈的顺序是先进后出,队列则是先进先出。假设两个栈分别为stack1和stack2,入队列相当于在stack1中入栈,出队列时将stack1中的元素全部搬到stack2中,然后在stack2中出栈,如果stack2中没有元素了,就去stack1中搬元素。template class CQueue{public: CQueue(); ~CQueue(); void push_queu原创 2017-07-21 15:22:51 · 229 阅读 · 0 评论 -
面试题----判断两个链表是否相交(可能带环)
判断两个链表是否相交(可能带环):这个问题我们可以根据是否带环来分三种情况,情况一:两个链表都不带环; 情况二:其中有一个链表带环; 情况三:两个链表都带环。下面我用一张图片来进行更详细的分类,之后写代码也是按照这种划分思想。原创 2017-07-17 14:48:18 · 472 阅读 · 0 评论 -
面试题---从尾到头打印链表
看到这道题,我们肯定会想到要遍历链表。遍历链表的顺序是从头到尾,输出却要从尾到头,相当于说第一个遍历的节点最后一个输出,最后遍历的节点第一个输出。这样我们会想到先进后出----栈,先让所有元素都入栈,出栈的时候顺便打印输出就可以了。而递归本质上也是一个栈结构,所以递归也可以解决问题。void PrintListTailToFront_Stack(Node* pHead) //从尾到头打印原创 2017-07-20 14:57:01 · 262 阅读 · 0 评论 -
面试题----单链表带环问题
关于单链表带环问题:1、怎样判断一个单链表是否带环; 2、如果带环,环的长度怎么计算;3、如果带环,怎么求环的入口;1、怎样判断一个单链表是否带环:我们知道,单链表如果带环,那么从链表头开始遍历就会进入死循环。其实我们可以用上篇博客中提到的两个指针移动的思想来求解,在这里可以让两个指针移动速度不同,首先令两个指针fast和slow同时指向链表头部,然后每次使fast走两步原创 2017-07-17 01:18:18 · 364 阅读 · 0 评论 -
查找单链表中倒数第k个节点
查找单链表中倒数第k个节点,拿到这道题,我们首先肯定能想到先遍历链表得到节点总数n,然后再去从头往后走n-k+1步就能得到想要的节点。这种方法当然是可行的,也是比较容易想到的方法,但是有的宝宝就会想这样做要遍历两次链表,有没有什么方法只遍历一次链表就能找到节点办法当然还是有的,我们可以利用两个指针遍历链表。刚开始把两个指针pAhead和pBhead都放在链表的头指针处,让pAhead向后走k步原创 2017-07-15 19:23:21 · 2019 阅读 · 1 评论 -
单链表的逆置(翻转)
给定一个单链表,我们怎么让它逆置呢?我的思想是利用指针的移动来做。当然首先我们必须考虑到一种特殊情况:这个链表中没有元素或者只有一个元素,那么这个链表逆置之后的结果仍然是原链表,所以如果遇到这种情况,我们就可以直接返回这个链表的头指针。除去这种特殊情况,我们来到了至少有两个元素的链表的处理,首先我们需要有两个指针pRev和pCur,令pCur指向头结点,pRev指向pCur(头结点)之原创 2017-07-15 10:45:44 · 3809 阅读 · 2 评论 -
合并两个有序链表
给出两个有序链表,合并成一个链表之后依然有序,这里给了两种方法,分别是非递归和递归,代码如下:Node* MergeList_Nor(Node* pHead1, Node* pHead2) //合并单链表(非递归){ if(pHead1 == NULL) return pHead2; if(pHead2 == NULL) return pHead1; Node* pHead =原创 2017-07-14 16:28:13 · 312 阅读 · 0 评论 -
AVL树旋转总结
原创 2017-06-07 01:20:38 · 214 阅读 · 0 评论