数据结构学习
数据结构需要不断地学习和练习,所以这个专栏用来记录学习笔记和练习题目
别惹我会变开心
谦谦君子,卑以自牧
展开
-
算法学习:二叉树的前中后序遍历(递归与不递归)
文章目录1、二叉树的遍历1.1 先序遍历1.2 中序遍历1.3 后序遍历1、二叉树的遍历二叉树的遍历一般有先序遍历、中序遍历、后序遍历以及层次遍历。1.1 先序遍历递归的方式实现先序遍历void pre_traverse(Node *root){ if(NULL == root) return; //到达空树,递归的边界 //访问根节点root printf("%d \n",...原创 2020-03-03 20:53:30 · 304 阅读 · 0 评论 -
算法学习:堆排序(大顶堆)
1、什么是堆?堆是一种非线性结构,可以把堆看作一个数组,也可以被看作一个完全二叉树,通俗来讲堆其实就是利用完全二叉树的结构来维护的一维数组,按照堆的特点可以把堆分为大顶堆和小顶堆。大顶堆:每个根结点的值都大于或等于其左右孩子结点的值小顶堆:每个根结点的值都小于或等于其左右孩子结点的值假如根节点的下标为x,则左孩子的下标为2x+1,右孩子的下标为2x+22、堆和普通树的区别...原创 2020-03-01 14:02:17 · 808 阅读 · 0 评论 -
算法学习:快速排序法
在无序的数组中,先找一个数字(一般找数组的第0个元素)作为基准值key将比基准值小的放在它的左边,比基准值大的放在它的右边(这样key左边的都比它小,右边的都比它大)对key左边的数据使用同样的方法进行排序,对key右边的数据也使用同样的方法进行排序,什么叫用同样的方法:递归问题:如何将比key小的放到左边,比key大的放在右边?将数组的第0个元素赋值给key(挖坑)从右边往左边找...原创 2020-02-29 21:38:25 · 161 阅读 · 0 评论 -
算法学习:八皇后问题(回溯算法)
国际象棋中,皇后可以在横、竖、斜线上不限步数地吃掉其他棋子。如何将8个皇后放在棋盘上(8*8个方格),使它们谁也不能被吃掉!这就是著名的八皇后问题。已知8皇后问题一共有92组解,即92个不同的皇后串思路:1、从第0行开始,在第0行的第0列放置一个皇后,依次在第1行~第7行的某个位置放置一个皇后,判断该位置能否放置皇后,如果不行,则在该位置后面一个位置再尝试着放一个皇后,如果可以则放一个皇后在...原创 2020-02-29 20:43:37 · 864 阅读 · 0 评论 -
算法题:从一个升序数组中,查找两个数,两数之和等于输入的数。
微软100道算法题-----输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。要求:时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对。思路:设置两个指针,一个指向开头,一个指向结尾,两数相加,如果和大了,则右边的指针往左移,如果和小了,则左边的指针往右移。int main(void){ int arry[] = {1,3,4...原创 2020-02-28 22:28:02 · 1320 阅读 · 0 评论 -
思考:在实际工作中什么时候用数组、链表、栈、队列、平衡二叉树?
数组:当你明确需要存储的数据的个数或者数据的个数一定会在某个范围内的时候(数据的个数最好在1024*1024之内),而且希望直接用下标法访问,希望不需要手动释放存储数据的内存空间!链表:存储的数据的长度是动态的,而且不需要对数据进行排序,数据和数据之间是一对一的关系(满足线性结构)。在实际工作中,数组和链表可以解决大部分的问题!!!栈:需要先进后出的时候队列:需要先进先出的时候在实际工作...原创 2020-02-27 20:21:26 · 3210 阅读 · 0 评论