![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 80
JenaeLi
Running for the sun!
展开
-
堆和栈的区别
1、申请方式stack:由系统自动分配。 例如,声明在函数中一个局部变量 int b; 系统自动在栈中为b开辟空间heap:需要程序员自己申请,并指明大小,在c中malloc函数如p1 = (char *)malloc(10);在C++中用new运算符如p2 = new char[10];但是注意p1、p2本身是在栈中的。2、申请后系统的响应栈:只要栈的剩余空间大于所申请空间,系统将为程序提供内存,否则将报异常提示栈溢出。堆:首先应该知道操作原创 2021-09-08 18:08:50 · 153 阅读 · 0 评论 -
二叉树基本操作以及面试题
1.二叉树的创建2.二叉树的前序遍历——递归,非递归3.二叉树的中序遍历——递归,非递归4.二叉树的后序遍历——递归,非递归5.二叉树的层序遍历6.找双亲节点7.找孩子节点8.求第K层上的节点个数9.求叶子结点的个数10.二叉树的镜像11.节点的查找12.求树的高度13.构造函数14.拷贝构造函数15.赋值运算符重载16.析构函数原创 2017-05-10 15:51:55 · 461 阅读 · 0 评论 -
B-树的基本概念以及代码实现
B-树引入当我们从一堆数据里查找某个数据的时候,常使用如下方法:数据杂乱无规律—>线性搜索 —-> O(N)数据有序—->二分查找—->O(log2N)—>最差情况下退化成单只树O(N)二叉搜索树/AVL树/红黑树—->O(log2N) 其中二叉搜索树、 AVL树、 红黑树都是动态查找树, 典型的二叉搜索树结构,查找的时间复杂度和树的高度相关O(log2N)。 这几种原创 2017-06-03 21:56:44 · 3138 阅读 · 0 评论 -
链表面试题之合并两个有序链表
关于合并两个有序的链表,假定该链表为升序排列,排列后的新表依旧升序。以下提供两种方法进行排列。创建新节点为空,依次后续插入法 Node* MergeTwoList1(Node* pHead1, Node* pHead2) { // 先处理任意一个链表为空的情况 if (pHead1 == NULL) return pHead2原创 2017-07-23 09:59:58 · 595 阅读 · 0 评论 -
链表面试题之判断链表是否带环?若带环求环的长度?若带环求环的入口点?
判断链表是否带环 判断一个链表是否带环我们一般采用快慢指针法。 即,一个慢指针一次走一个节点,一个快指针一次走两个节点 若链表带环,则快指针始终不为空,快慢指针必会在慢指针进入环之后的半圈内相遇。 若不带环,则快指针走到头时为空。 看代码实现 // 两指针相遇时说明带环,返回相遇节点,否则返回空 Node* HasCircle(Node* pHead)原创 2017-07-23 14:19:11 · 740 阅读 · 0 评论 -
链表面试题之复杂链表的复制
我们常用的链表基本都是单链表和双向链表,两种链表不同在于双向链表比单链表多了一个指向当前节点的前一个节点的指针域。 而复杂链表,相比单链表多了一个指向任意位置的随机域。复杂链表的结构如下: struct ComplexNode { int _data; ComplexNode* _next; ComplexNode* _rando原创 2017-07-23 15:05:51 · 491 阅读 · 0 评论