首页 > 编程语言 >数据结构与算法

数据结构与算法

时间:2024-04-17 21:33:18浏览次数:32  
标签:删除 元素 链表 算法 查找 数据结构 节点

1 数据结构

1.1 动态数组

① 数组特点

存储特点: 连续存储
优点:查找块,访问元素快
缺点:插入、删除元素效率低

② 实现思路

1. 初始化: malloc() 动态分配内存区域
2. 扩展长度: realloc() 重新调整内存区域大小
3. 插入元素: 插入位置,后面所有元素后移
4. 删除元素: 删除位置,后面所有元素前移

1.2 链表

① 链表分类

单向链表
双向链表
循环单向链表
循环双向链表

② 链表特点

存储特点: 分散存储
优点:添加删除节点效率高,链表扩展方便
缺点:查找效率低,需要额外开销(每个节点要存储下一个节点的地址)

③ 实现思路

1. 每个节点需要单独的内存空间, 每个节点存储数据和下一个节点的地址
2. 查找节点:从头结点开始一个一个的数
3. 添加新节点: 上一个节点指向新节点,新节点指向下一个节点
4. 删除节点:直接上上一个节点指向下下个节点(把要删除的节点跳过)
5. 释放内存:遍历挨个释放每个节点的内存

1.3 栈

① 特点

先进后出,后进先出

② 专业名词

栈顶(Stack Top):	   允许插入、删除元素的一端
栈底(Stack Bottom):  不允许插入、删除元素的一端
空栈: 没有元素的栈

进栈(入栈、压栈、Push): 添加新元素
出栈(弹栈、Pop):		  删除(最上面的)栈顶的元素

1.4 队列

① 特点

先进先出,后进后出

② 专业名词

队首(front): 删除元素的一端
队尾(rear):  添加元素的一端
空队列:没有元素的队列

入队(进队、unshift): 从队尾添加元素
出队(离队、shift): 从队首删除元素

2 算法

2.1 算法评价标准

① 时间复杂度

描述程序的执行效率
n值     O(n)执行次数    O(logn)执行次数
1		  1                0
2         2                1
3         3                
4         4                2
5         5
6         6
7         7
8         8                3
O(1) < O(logn) < O(n) < O(n * logn) O(n^2)

② 空间复杂度

描述程序的内存占用情况

2.1 查找算法

1. 顺序查找 (线性查找)
   时间复杂度: O(n)

2. 二分查找
   必须是有序的数组
   时间复杂度:O(logn)

2.2 排序算法

1. 冒泡排序
2. 快速排序

标签:删除,元素,链表,算法,查找,数据结构,节点
From: https://www.cnblogs.com/petard/p/18141822

相关文章

  • 先进先出算法
    一、意义目的解决多个多个呼叫一个应答问题。如何排队,如何出队。常用于缓存多个请求,保持队列,先进先出。好处是有顺序,但是可以结合实际,比如位置比较近要先出,可以将“先进先出”作为排队出队子算法,再去排序,达到效率最高。二、原理:使用数组改变下标方式存入,出栈把后面变量一个......
  • 复杂网络社区发现算法聚类分析全国电梯故障数据和可视化:诊断电梯“安全之殇”|附代码
    参考原文:http://tecdat.cn/?p=2186最近我们被客户要求撰写关于复杂网络社区发现算法的研究报告,包括一些图形和统计输出。物业工程肩负着维持项目各类设施设备的正常运作,保障全体业主的正常生活,令物业保值升值,是项目的心脏部门。拓端数据(tecdat)研究人员根据全国电梯故障上报汇总......
  • 29天【代码随想录算法训练营34期】第七章 回溯算法part05 (491.递增子序列 * 46.全排
    491.递增子序列如果在最前面加一个uset=set(),这个就是给这一层一个usedset,很好用,不错classSolution:deffindSubsequences(self,nums:List[int])->List[List[int]]:result=[]self.backtracking(nums,[],result,0)returnresult......
  • 算法
    冒泡:选择:插入:希尔:归并:快速:堆:计数:桶:基数:......
  • js 搜索查找算法
    线性查找线性查找是最简单的一种查找算法,它的基本思想是从头到尾遍历待查找的数据集,找到对应的元素,时间复杂度为O(n)。代码实现:functionlinearSearch(arr,target){for(leti=0;i<arr.length;i++){if(arr[i]===target){returni;......
  • KMP算法 Java实现
    Problem:28.找出字符串中第一个匹配项的下标目录解题方法思路构建next数组回溯查找复杂度Code解题方法构建next串回溯查找next串,最后下标思路通过最大前缀后缀能找到下一次未查找到后要回溯的位置构建next数组无论如何第一个数的下一次回溯位置肯定是0,因此next[......
  • Python 数据结构和算法实用指南(三)
    原文:zh.annas-archive.org/md5/66ae3d5970b9b38c5ad770b42fec806d译者:飞龙协议:CCBY-NC-SA4.0第七章:哈希和符号表我们之前已经看过数组和列表,其中项目按顺序存储并通过索引号访问。索引号对计算机来说很有效。它们是整数,因此快速且易于操作。但是,它们并不总是对我们很有效......
  • Python 数据结构和算法实用指南(一)
    原文:zh.annas-archive.org/md5/66ae3d5970b9b38c5ad770b42fec806d译者:飞龙协议:CCBY-NC-SA4.0前言数据结构和算法是信息技术和计算机科学工程学习中最重要的核心学科之一。本书旨在提供数据结构和算法的深入知识,以及编程实现经验。它专为初学者和中级水平的研究Python编......
  • 4-01. 升级到 URP 并创建灯光数据结构
    安装URP安装URP创建Settings修改ProjectSettings让素材支持通用渲染管线如果Convert的时候出现报错,继续点击Convert即可注意,如果报错说场景没有加载,需要把场景加载好之后再转换实现全局光照新建Lights然后创建GlobalLight2D白天的灯光效果晚上......
  • Python 数据结构和算法实用指南(二)
    原文:zh.annas-archive.org/md5/66ae3d5970b9b38c5ad770b42fec806d译者:飞龙协议:CCBY-NC-SA4.0第四章:列表和指针结构我们已经在Python中讨论了列表,它们方便而强大。通常情况下,我们使用Python内置的列表实现来存储任何数据。然而,在本章中,我们将了解列表的工作原理,并将研......