数据结构与算法总结

来源:互联网 发布:关于大数据的毕业设计 编辑:程序博客网 时间:2024/06/17 06:50

一、数据结构

程序设计=数据结构+算法

1.逻辑结构

1)集合:元素之间没有联系。
2)线性结构:元素之间存在前后顺序。
3)树形结构:元素之间存在一对多的父子关系。
4)图状结构:元素之间存在多对多的映射关系。
2.物理结构
1)顺序结构:用连续的空间存放数据元素。
优点:便于随机访问。
缺点:空间利用率低,插入删除不方便。
2)链式结构:用不连续的空间存放数据元素,每个数据元素中处理存放数据意外,还要存放下一个元素的地址。
优点:空间利用率高,插入删除方便。
缺点:随机访问不方便。
3.逻辑结构和物理结构的关系
线性结构(表)- 顺序结构、链式结构
                 (数组)    (链表)
树形结构(树)- 顺序结构、链式结构
图状结构(图)- 复合结构
4.常用数据结构的实现
1)数组、串
2)堆栈:后进先出(LIFO)
3)队列:先进先出(FIFO)
4)链表:单向线性、双向线性、单向循环、双向循环

5)二叉树

1.基本特征
1)树型结构的最简模型,每个节点最多有两个子节点——左子节点和右子节点。
2)单根性,每个子节点有且仅有一个父节点,整棵树有且仅有一个根节点。
3)递归性,以任何一个节点为根都可以看做是一个二叉树,整个二叉树可以看成是由若干子二叉树按照递归的结构复合而成。这种结构的递归性决定了采用递归的算法解决二叉树问题会非常简单。
2.基本操作:按照特定的规则生成,再按照特定的规则遍历,将会产生特定的效果。
3.实现要点(以有序二叉树为例)
有序二叉树:对于树上的任何一个节点,其左子树中的节点都比该节点的值小或等,右子树中的节点都比该节点的值大或等。
50 70 20 60 40 30 10 90 80
         50
      __/  \__
     /|       \
   20 |        70
  /  \|       /  \
10    40    60    90
     /           /
   30          80
  /
10
前序遍历:D-L-R、D-R-L
中序遍历:L-D-R、R-D-L
后序遍历:L-R-D、R-L-D
有序二叉树的中序遍历:
10 20 30 40 50 60 70 80 90

6)图:有向图、无向图

二、堆栈

1.基本特征:后进先出
2.基本操作:压入(push),弹出(pop)
3.实现要点:初始化空间、栈顶指针、判空判满
1234 = 1*8^3 + 2*8^2 + 3*8^1 + 4*8^0

三、队列

1.基本特征:先进先出
2.基本操作:从后端(rear)压入(push),从前端(front)弹出(pop)
3.实现要点:初始化空间、从后端指针压入,从前端指针弹出,循环使用,判空判满

四、链表

1.基本特征:由一系列内存中不连续的节点组成,每个节点除了保存数据以外,还需要保存其前后节点的地址——双向链表。
2.基本操作
1)追加
2)插入
3)删除
4)遍历

5)伪随机访问

二、常用算法技巧

1.冒泡排序

1)算法
A.比较相邻的元素,如果第一个比第二个大就交换它们;
B.对每一对相邻的元素都做同样的工作,从开始的第一对到结尾的最后一对。经过这一步,最后的元素是最大值;
C.针对所有的元素重复以上步骤,除了最后一个;
D.持续每次对越来越少的元素重复以上步骤,直到没有元素需要交换。
2)评价
平均时间复杂度O(N^2),稳定,对数据的有序性敏感。

2.插入排序

12 13 15 20 23 31 19 26 24
1)算法
A.从第一个元素开始,该元素可以认为已经有序;
B.取出下一个元素,在已经排序的元素序列中从后向前扫描;
C.若该元素大于新元素,则将该元素移到下一个位置;
D.若该元素小于或等于新元素,则将新元素插入到该元素之后;
E.重复步骤B,直至处理完所有的元素。
2)评价
平均时间复杂度O(N^2),稳定,对数据的有序性敏感。相对冒泡排序,没有交换而仅仅是移动,略优于冒泡。

3.选择排序

12 13 15 23 20 31 19 26 24
1)算法
首先在未排序序列中找到最小元素,并于该序列的首元素做交换,再从剩余的未排序序列中继续寻找最小元素重复以上过程,直到未排序序列中仅剩一个元素为止。
2)评价
平均时间复杂度O(N^2),稳定,对数据的有序性不敏感。相对冒泡而言,因为交换的次数少,略优于冒泡。
4.快速排序
50
0 10 20 30 40 50 80 70 60 90 100
              i
              p
              j
1)算法
A.从序列中找出一个元素作为基准;
B.从新组织序列,所有小于基准的元素都位于基准的左侧,所有大于基准的元素都位于基准的右侧,与基准相等的元素可位于基准的任一侧;
C.以递归的方式分别对左右两个分组进行排序。
2)评价
平均时间复杂度O(NlogN),不稳定。理论上如果每次都能做到均匀分组,会得到的最快的排序速度。
思考:实现qsort()函数。

4.归并排序

平均时间复杂度O(2NlogN),稳定,对数据有序性不敏感,非就地排序,不适用于对海量数据进行排序。

5.线性查找

1.算法:逐个比较,找到为止。
2.评价:O(N),对数据的有序性没有要求。

6.二分查找

1.算法:假设数据按升序排列,取中间位置值,如果目标等于中值,则查找成功;如果目标小于中值,则在中值左侧继续查找;如果目标大于中值,则在中值右侧继续查找;直到找到或者找不到为止。
2.评价:O(logN),数据必须有序
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 白色漆皮鞋脏了怎么办 对鉴定结果不服怎么办 洗衣机入水口堵塞怎么办 华科办临时饭卡怎么办 血浆乳酸测定高怎么办 olay大红瓶过敏怎么办 饥一顿饱一顿怎么办 朝鲜人向去韩国怎么办? 我是超级大方脸怎么办 被精神病砍断四根筋怎么办 40小时不睡觉怎么办 边防转业军人安置不好怎么办 转业军人孩子读书怎么办玉环 军官证丢了怎么办 飞行学员停飞了怎么办 丹东港债券违约怎么办 对村党支部贿选怎么办 马自达2油耗高怎么办 马自达1.5油耗高怎么办 马自达5停产配件怎么办 期货账户休眠了怎么办 低于二本线怎么办 听力测试不过关怎么办 安装的天正过期怎么办 天正t20v4过期了怎么办 鸡肉菊花一起吃怎么办 孕妇误食马兰头怎么办 孕29周喉咙痛怎么办 哺乳期吃了当归怎么办 哺乳期喝了茶水怎么办 大人感染eb病毒怎么办 下面一直有血怎么办 猫咪吐红色液体怎么办 宝宝拉屎有血水怎么办 屁眼火辣辣的疼怎么办 屁眼拉屎有血怎么办 转业干部退档案怎么办 学校遇到不公待遇怎么办 孕妇受到不公待遇怎么办 强制停机骗局该怎么办 号码被别人举报怎么办