数据结构底子知识1

[复制链接]
发表于 2026-1-14 12:34:36 | 显示全部楼层 |阅读模式
1. 数据结构先容

数据结构(英语:data structure)是盘算机中存储、构造数据的方式。
数据结构是一种具有肯定逻辑关系,在盘算机中应用某种存储结构,而且封装了相应操纵的数据元素聚集。它包罗三方面的内容,逻辑关系、存储关系及操纵。
简单来说,数据结构是对大规模的数据举行一个公道的规划,进步操纵服从。

常见的数据结构


  • 栈(Stack):栈是一种特别的线性表,它只能在一个表的一个固定端举行数据结点的插入和删除操纵。
  • 队列(Queue):队列和栈类似,也是一种特别的线性表。和栈差别的是,队列只允许在表的一端举行插入操纵,而在另一端举行删除操纵。
  • 数组(Array):数组是一种聚合数据范例,它是将具有雷同范例的多少变量有序地构造在一起的聚集。
  • 链表(Linked List):链表是一种数据元素按照链式存储结构举行存储的数据结构,这种存储结构具有在物理上存在非连续的特点。
  • 树(Tree):树是范例的非线性结构,它是包罗,2 个结点的有穷聚集 K。
  • 图(Graph):图是另一种非线性数据结构。在图结构中,数据结点一样平常称为顶点,而边是顶点的有序偶对。
  • 堆(Heap):堆是一种特别的树形数据结构,一样平常讨论的堆都是二叉堆。
  • 散列表(Hash table):散列表源自于散列函数(Hash function),其头脑是假如在结构中存在关键字和T相称的记录,那么肯定在F(T)的存储位置可以找到该记录,如许就可以不消举行比力操纵而直接取得所查记录。       
    2.时间复杂度
形貌算法运行时间的函数。

假设算法要处置惩罚的数据总量为x,x富足大。算法为了某种目的(查找,删除,添加...)斲丧的盘算次数为y.

  • y=ax+b   a是系数,b是常数       当x富足大,a b的值不敷以影响x   y和x直接干系   y=x  O(n)
  • y=ax^2+bx+c    ab是系数,c是常数    当x富足大,abc的值不敷以影响x  y和x^2直接干系  y=x^2  O(n^2)
  • y=a  a是常数     当x富足大,a 的值不敷以影响x   y和x无关   y=1  O(1)
  • a^y=x  y=logax         O(logn)

2.1 长度为x的无序数组,从中找一个值a,求时间复杂度

 

第一个:查找的次数为1
第二个:查找的次数为2
....
末了一个:查找次数x

取匀称:x/2
y=x/2                 y=x            O(n)
2.2 从1加到n求时间复杂度

x=1
for(int i=2;i<=n;i++){
        x=x+i;
}
y=x     O(n)
用等差数列求和公式
sum=(1+n)*n/2
y=1   O(1)
2.3 冒泡排序  对数组举行排序


原理:前后两两数据举行比力,大的数据今后走,小的数据往前走,一轮竣事之后,一个数据到达精确位置。
第一轮:比力了x-1
第二轮:比力了x-2
第三轮:比力了x-3

第x-1轮:1
y=(x-1)+(x-2)+(x-3)+...+1
y=(x-1+1)*(x-1)/2=x*(x-1)/2=x^2/2-x/2
y=x^2      O(n/2)
2.4 有序数组用二分查找法查找数据


mid=(left+right)/2
left<=right
right=mid-1
left=mid+1
第一轮:left和right所取范围内数据总量为x  x/2^0  比力次数为1
第二轮:left和right所取范围内数据总量为x/2   x/2^1  比力次数为1
第三轮:left和right所取范围内数据总量为x/2/2   x/2^2  比力次数为1
第四轮:left和right所取范围内数据总量为x/2/2/2   x/2^3  比力次数为1
...
第k轮:left和right所取范围内数据总量为...     1       比力次数为1     y=log2x    O(logn)
                                                                x/2^(k-1)
x/2^(k-1)=1
2^(k-1)=x
k=log2x


总结:
快速判断时间复杂度:
确定命据总量n
直接对数据规模动手 O(n)
k层关于n的循环  O(n^k)
循环减半O(logn)

2.5 数组

根据下标获取值O(1)
无序数组查找O(n)


 
2.5.1 无序数组查找低沉时间复杂度

方法一:有序数组二分查找法O(logn)
排序O(n^2)+二分查找O(logn)

方法二:通过某一个算法决定命据要插入的位置---->位置=n%arr.length
哈希算法

哈希表
两个差别的数值盘算出来在同一个位置----->拉链法:在这个位置到场链表
哈希碰撞
链表长度不长O(1),链表很长O(n)
2.5.1.1 链表


单向链表 

双向链表
 


 
 方法三:有序二叉树
一个节点左边的值要比当前节点小,右边节点的值要比当前节点值大
10 5 20 8 15 30 1

第一层  1  2^0
第二层  2   2^1
第三层  4  2^2
第四层   8  2^3
....
第k层       2^(k-1)
x=2^0+2^1+2^2+...+2^(k-1)
x=2^k-1
k=log2x      O(logn)

1 2 3  4 5 6

不稳固
平衡二叉树
一个节点左边的值要比当前节点小,右边节点的值比当前节点值大
一个节点左边子树的高度  和右边子树的高度  高度差的绝对值不凌驾1
LL     LR     RR   RL 
LL

LR型旋转

RR型旋转

RL型旋转


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表