当前位置: 首页 > news >正文

青岛大学数据结构与算法——第2章

一 概述

  • 线性表的定义和特点
  • 线性表示例
  • 线性表的类型定义
  • 线性表的顺序表示和实现
  • 线性表的链式表示和实现
  • 顺序表和链式表的比较
  • 线性表的应用
  • 案例分析与实现

二 线性表的定义和特点

2.1 定义和特点

2.2 示例

  • 26个英文字母表
  • 学生登记表
  • 12星座

三 线性表示例

  • 1元多项式运算
  • 稀疏多项式运算
  • 图书管理系统

四 线性表的类型定义

4.1 抽象数据类型ADT定义

4.2 基本操作

  • InitList
  • DestoryList
  • ClearList
  • ListEmpty
  • ListLength
  • GetElem
  • LocateElem
  • PriorElem
  • NextElem
  • ListInsert
  • ListDelete
  • ListTraverse

五 线性表的顺序表示和实现

5.1 C语言补充

  • 数组分配:数组静态分配,数组动态分配
  • 动态分配相关函数:malloc、sizeof、free
  • C++:new 动态分配、delete
  • 参数传递方式:
    • 传值方式:整形、实型、字符型
    • 传址方式:指针、引用、数组

5.2 线性表(一维数组)

  • 依次存储
  • 地址连续
  • 中间没有空出存储单元
  • 第i和第i+1之间满足关系
  • 随机存储
  • 类型相同

5.3 示例

  • 顺序表基本操作的实现
    • 线性表L的初始化
    • 销毁线性表L
    • 求线性表L的长度
    • 判断线性表L是否为空
    • 顺序表的取值
    • 顺序表的查找分析法(ASL)
    • 插入不同位置(头部/中间/尾部)演示
    • 删除不同位置(头部/中间/尾部)演示
  • 图书表第顺序存储结构表示
  • 多项式顺序存储结构表示

5.4 线性表的总结

  • 优点:存储密码大、可以随机存取表中任一元素
  • 缺点:插入、删除元素,需要移动大量元素;浪费存储空间;静态存储,不能自由扩充

六 线性表的链式表示和实现

6.1 链式表示

  • 物理位置任意
  • 可以连续,可以不连续

6.2 示例

  • 姓名(链式表示)
  • 26个字母表(链式表示)

6.3 相关术语

  • 节点:数据域、指针域
  • 链表:n个节点
  • 分类:单链表、双链表、循环链表
  • 头指针/头节点/首元节点
  • 存储结构:点头节点/不带点头节点
  • 空表

6.4 单链表

  • 单链表的存储结构
  • 单链表的表示
  • 单链表的操作:初始化、判空、销毁DestoryList_L、清空ClearList、表长ListLength_L、第i个元素的内容GetElem_L、按值查找位置LocateElem_L、在第i个节点前插入值为e的新节点ListInert_L、删除第i个节点ListDelete_L、建立单链表:头插法CreateList_H、尾插法Create_R

6.5 循环链表

概念:

  • 头尾相连的链表
  • 循环条件:p!=NULL、p->next!=NULL;
  • 时间复杂度O(1)

操作:循环链表合并

6.6 双向链表

  • 结构:prior、data、next
  • 双向链表:双向循环链表
  • 双向循环链表操作:插入ListInsert_Dul、删除ListDelete_Dul

七 顺序表和链表的比较

  • 单链表、循环链表、双向链表比较
  • 顺序链表和链表比较

八 线性表的应用-合并

  • 线性表的合并union
  • 有序表的合并-顺序表实现MergeList_Sq
  • 有序表的合并-链表实现MergeList_L

九 案例分析与实现

  • 一元多项式的运算-相加
  • 稀疏多项式运算
  • 图书管理系统

十 图示

相关文章:

  • tf.math
  • GBase 8c向表中插入数据
  • 想要软考,一般需要多少复习时间?
  • 一起误删cni0虚拟网卡引发的k8s事故
  • QT软件开发-基于FFMPEG设计录屏与rtsp、rtmp推流软件(支持桌面与摄像头)(四)
  • redux中间件函数
  • 【前端面试知识题】- 4.1 JavaScript
  • 客户端架构
  • iOS Xcode 14 创建新项目Pod init及Pod install 报错
  • 金融行业借力泛微今承达,合同统一数字化管理、风险全过程把控
  • 计算机视觉项目实战-基于特征点匹配的图像拼接
  • 软件过程与建模学习之:Individuals,Motivation and Teams
  • 【某南方·高中梦校面试】
  • 三分钟细数几款可视化前端开发工具
  • 【定制项目】【M15 消防安全宣传】主要模块:视频 + 音频 + 图标 + 问答游戏
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • 07.Android之多媒体问题
  • Android 架构优化~MVP 架构改造
  • Docker: 容器互访的三种方式
  • Idea+maven+scala构建包并在spark on yarn 运行
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • SpiderData 2019年2月23日 DApp数据排行榜
  • spring学习第二天
  • storm drpc实例
  • Yeoman_Bower_Grunt
  • 大整数乘法-表格法
  • 高性能JavaScript阅读简记(三)
  • 技术胖1-4季视频复习— (看视频笔记)
  • 近期前端发展计划
  • 聚类分析——Kmeans
  • 日剧·日综资源集合(建议收藏)
  • 实现简单的正则表达式引擎
  • 追踪解析 FutureTask 源码
  • 【云吞铺子】性能抖动剖析(二)
  • 从如何停掉 Promise 链说起
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • #100天计划# 2013年9月29日
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • ${factoryList }后面有空格不影响
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (day 12)JavaScript学习笔记(数组3)
  • (二)Eureka服务搭建,服务注册,服务发现
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (四)鸿鹄云架构一服务注册中心
  • (已解决)什么是vue导航守卫
  • .form文件_SSM框架文件上传篇
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .NET 简介:跨平台、开源、高性能的开发平台
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)
  • .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(二)...