第 2 章 数据结构和算法概述

news2025/1/31 2:48:05

文章目录

  • 2.1 数据结构和算法的关系
  • 2.2 看几个实际编程中遇到的问题
    • 2.2.1 问题一-字符串替换问题
    • 2.2.2 一个五子棋程序
    • 2.2.3 约瑟夫(Josephu)问题(丢手帕问题)
    • 2.2.4 其它常见算法问题:
  • 2.3 线性结构和非线性结构
    • 2.3.1 线性结构
    • 2.3.2 非线性结构

2.1 数据结构和算法的关系

  1. 数据 data 结构(structure)是一门研究组织数据方式的学科,有了编程语言也就有了数据结构.学好数据结构可以编写出更加漂亮,更加有效率的代码。

  2. 要学习好数据结构就要多多考虑如何将生活中遇到的问题,用程序去实现解决.

  3. 程序 = 数据结构 + 算法

  4. 数据结构是算法的基础, 换言之,想要学好算法,需要把数据结构学到位。

2.2 看几个实际编程中遇到的问题

2.2.1 问题一-字符串替换问题

在这里插入图片描述

小结:需要使用到单链表数据结构

2.2.2 一个五子棋程序

在这里插入图片描述

如何判断游戏的输赢,并可以完成存盘退出和继续上局的功能

  1. 棋盘 二维数组=>(稀疏数组)-> 写入文件 【存档功能】
  2. 读取文件-》稀疏数组-》二维数组 -》 棋盘 【接上局】

2.2.3 约瑟夫(Josephu)问题(丢手帕问题)

  1. Josephu 问题为:设编号为 1,2,… n 的 n 个人围坐一圈,约定编号为 k(1<=k<=n)的人从 1 开始报数,数到 m 的那个人出列,它的下一位又从 1 开始报数,数到 m 的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列。

  2. 提示:用一个不带头结点的循环链表来处理 Josephu 问题:先构成一个有 n 个结点的单循环链表(单向环形链表),然后由 k 结点起从 1 开始计数,计到 m 时,对应结点从链表中删除,然后再从被删除结点的下一个结点又从 1 开始计数,直到最后一个结点从链表中删除算法结束。

  3. 小结:完成约瑟夫问题,需要使用到单向环形链表 这个数据结构

2.2.4 其它常见算法问题:

在这里插入图片描述

  1. 修路问题 => 最小生成树(加权值)【数据结构】+ 普利姆算法
  2. 最短路径问题 => 图+弗洛伊德算法
  3. 汉诺塔 => 分支算法
  4. 八皇后问题 => 回溯法

2.3 线性结构和非线性结构

数据结构包括:线性结构和非线性结构。

2.3.1 线性结构

  1. 线性结构作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关系
  2. 线性结构有两种不同的存储结构,即顺序存储结构(数组)和链式存储结构(链表)。顺序存储的线性表称为顺序表,顺序表中的存储元素是连续的
  3. 链式存储的线性表称为链表,链表中的存储元素不一定是连续的,元素节点中存放数据元素以及相邻元素的地址信息
  4. 线性结构常见的有:数组、队列、链表和栈,后面我们会详细讲解.

2.3.2 非线性结构

非线性结构包括:二维数组,多维数组,广义表,树结构,图结构

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1383349.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

利用gulp工具对常规web项目进行压缩打包

前言 对于一个常规的web项目&#xff0c;如下项目目录 |- imgs | - img1.png | - img2.png |- js | - user.js | - utils.js |- css | - index.css | - user.css |- html | - user.html |- index.html可以使用各种构建工具&#xff08;如webpack、gulp、grunt等&#xff09;来…

Java 解析邮箱中的邮件信息保存入库

我们在工作中常常遇到这样的场景&#xff1a; 获取一些其他平台的业务数据&#xff0c;是通过邮件的方式来进行获取的&#xff0c;其他平台通过发送邮件以Excel附件的形式&#xff0c;传输到公司邮箱服务器&#xff1b;我们接收数据是读取服务器中的相关邮件并进行解析&#xf…

基于SSM的校园心理健康网站的设计与实现(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; 基于SSM的校园心理健康网站的设计与实现&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;…

扫雷游戏棋盘的打印,判断输赢,深度分析

少年们&#xff0c;大家好&#xff0c;我是博主那一脸阳光&#xff0c;我来分享扫雷的打印和判断输赢&#xff0c;代码如何编写&#xff0c;如何使用&#xff0c;深度理解扫雷的游戏。 数据结构的分析和理论 我上次介绍棋盘的初始化&#xff0c;但是如果不打印出来&#xff0…

二进制与十六进制,二进制与八进制之间的相互转换技巧

目录 1.二进制转换为八进制 2.八进制转换为二进制 3.二进制转换为十六进制 4.十六进制转换为二进制 1.二进制转换为八进制 转换为8进制 第一步&#xff1a;以小数点为分界线&#xff0c;整数部分自右向左&#xff0c;小数部分自左向右每3位取成1位&#xff1a; 整数部分…

P1563 [NOIP2016 提高组] 玩具谜题————C++

目录 [NOIP2016 提高组] 玩具谜题题目背景题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 样例 #2样例输入 #2样例输出 #2 提示 解题思路Code运行结果 [NOIP2016 提高组] 玩具谜题 题目背景 NOIP2016 提高组 D1T1 题目描述 小南有一套可爱的玩具小人&#xff0c;它…

GUI编程(函数解析以及使用)

1.介绍 AWT&#xff08;Abstract Window Toolkit&#xff09;和Swing 是 Java 提供的用于创建图形用户界面&#xff08;GUI&#xff09;的类库。 AWT&#xff1a;AWT 是 Java 最早提供的 GUI 类库&#xff0c;它基于本地平台的窗口系统&#xff0c;使用操作系统的原生组件进行…

git 中分支的概念及使用

git 中分支的概念及使用 分支模型是 Git 中的 “必杀技特性”&#xff0c; Git 处理分支的方式非常轻量&#xff0c;创建新分支这一操作几乎能在瞬间完成&#xff0c;并且在不同分支之间的切换操作也是一样便捷。 理解和精通这一特性&#xff0c;我们便会意识到 Git 是如此的强…

使用mamba替换conda和anaconda配置环境安装软件

使用mamba替换miniconda和anaconda&#xff0c;原因是速度更快&#xff0c;无论是创建新环境还是激活环境 conda、mamba、anaconda都是蟒蛇的意思… 下载mambaforge wget https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-Linux-x86_64.sh ba…

浅谈项目周报的核心要点

相信很多朋友都写过周报&#xff0c;无论什么岗位&#xff0c;而其中项目周报对于项目管理人员极其重要&#xff0c;项目周报是一种重要的沟通工具&#xff0c;用于向相关人员汇报项目的进展情况、存在的问题和下一周的工作计划。以下是一些关于如何编写项目周报的核心要点&…

SpringBoot 入门 SpringBoot 与其他项目整合 集成 Druid 数据库连接池 集成 Log 日志 配置修改

目录 1.SpringBoot简介 1.1.什么是SpringBoot 1.2.特点 2.SpringBoot快速入门 2.1.创建SpringBoot项目 2.2.项目目录介绍 2.3.配置修改 2.4.启动SpringBoot 3.SpringBoot与其他项目整合 3.1.整合JDBC 3.2.整合Druid数据库连接池 3.3.整合MyBatis 3.4.整合Log日志 …

【Kafka-3.x-教程】-【六】Kafka 外部系统集成 【Flume、Flink、SpringBoot、Spark】

【Kafka-3.x-教程】专栏&#xff1a; 【Kafka-3.x-教程】-【一】Kafka 概述、Kafka 快速入门 【Kafka-3.x-教程】-【二】Kafka-生产者-Producer 【Kafka-3.x-教程】-【三】Kafka-Broker、Kafka-Kraft 【Kafka-3.x-教程】-【四】Kafka-消费者-Consumer 【Kafka-3.x-教程】-【五…

TLC Nand Flash 存储单元的读取原理

我们知道Nand Flash使用浮栅晶体管作为存储单元&#xff08;memory cell&#xff09;来存储数据&#xff0c;浮栅晶体管物理结构如图1所示&#xff1a; 图1 浮栅晶体管 对于普通的晶体管&#xff08;去掉浮栅晶体管中的浮栅层&#xff0c;floating gate&#xff09;&#xff0…

Redis数据缓存

缓存 一 缓存基础 1 缓存的概念和作用 缓存就是数据交换的缓冲区&#xff08;称作Cache&#xff09;&#xff0c;是存贮数据的临时地方&#xff0c;一般读写性能较高 2 缓存的使用 之前没有使用缓存是的模型 3 项目说明 当我们查询商家信息的时候&#xff0c;直接从mysql中…

FFmpeg 的使用与Docker安装流媒体服务器

本文阐述的均为命令行的使用方式&#xff0c;并不牵扯FFmpeg 的 C音视频开发内容&#xff0c;补充一句&#xff0c;C的资料真的少&#xff0c;能把C学好的人&#xff0c;我真的是觉得巨佬。 我主要是使用FFmpeg 推流方面的知识&#xff0c;案例大都是靠近这方面。 一、FFmpeg…

寻找最富裕的小家庭 - 华为OD统一考试

OD统一考试(C卷) 分值: 100分 题解: Java / Python / C++ 题目描述 在一棵树中,每个节点代表一个家庭成员,节点的数字表示其个人的财富值,一个节点及其直接相连的子节点被定义为一个小家庭现给你一棵树,请计算出最富裕的小家庭的财富和。 输入描述 第一行为一个数N,…

系列十、Spring Security登录接口添加验证码

一、Spring Security登录接口添加验证码 1.1、概述 一般企业开发中&#xff0c;登录时都会有一个验证码&#xff0c;基于Spring Security的登录接口默认是没有验证码的&#xff1f;那么如何把验证码功能集成到Spring Security的登录接口呢&#xff1f;请看下文&#xff01; 1.…

SpringBoot视图渲染技术:整合Freemarker,常见指令和数据类型

目录 1.Freemarker 1.1.什么是Freemarker 1.2.Freemarker模板组成部分 1.3.优点 2.SpringBoot整合Freemarker 2.1.配置 2.2.数据类型 2.2.1.字符串 2.2.2.数值 2.2.3.布尔值 2.2.4.日期 2.3.常见指令 2.3.1.处理不存在的值 2.3.2.assign 2.3.3.if/elseif/else …

物联网中的通信技术

阅读引言&#xff1a; 本文主要大致为大家带来物联网中的常见的通信方式的知识梳理。 目录 一、概述 二、无线通信技术 1.物联网电子标签 RFID 1.1 RFID 概念 1.2 RFID 系统组成 2.WI-FI技术 3.UWB技术 4.ZigBee技术 5.NFC技术 6.蓝牙技术 7.EnOcean技术 一、概述 物…

ssm基于VUE.js的在线教育系统论文

摘 要 随着学习压力越来越大&#xff0c;课外参加补习班的学生越来越多。现在大多数学生采用请家教、自学、报名补习班的方式进行课外的额外学习。请家教费用昂贵&#xff0c;自学效率低&#xff0c;碰到自己不会的知识不能及时得到解达&#xff0c;报名补习班需要时间、地点的…