计算机二级C语言公共基础知识

数据结构和算法

一 算法

算法是指对解决方案准确而完整的描述,简单的说,算法就是解决问题的操作步骤(有一个很著名的公式 “程序=数据结构+算法”)

算法不等于数学上的计算方法,也不等于程序(程序可以描述算法)

 算法的基本特征

有穷性:算法的指令或者步骤的执行次数和时间都是有限的。

确切性:算法的指令或步骤都有明确的定义。

输入:有相应的输入条件来刻画运算对象的初始情况。

输出:一个算应有明确的结果输出。

可行性:算法的执行步骤必须是可行的。

算法的复杂度

①时间复杂度

算法的时间复杂度是指执行算法所需要的计算工作量

算法的时间复杂度不等于算法程序执行的具体时间

算法所需要的计算工作量是用算法所执行的基本运算次数来度量的(基本运算次数与问题的规模和输入有关)

②空间复杂度

算法的空间复杂度是指执行这个算法所需要的存储空间

执行这个算法所需要的存储空间包括3部分:输入数据所占的存储空间,程序本身所占的存储空间,算法执行过程中所需要的额外空间

为了降低算法的空间复杂度,主要应该减少输入数据所占的存储空间和算法执行过程中所需要的额外空间,通常采用压缩存储技术实现

二 数据结构

数据结构是指相互有关联的数据元素的集合,它包含两个要素,即“数据”和“结构”

数据:数据是需要处理的数据元素的集合(比如,早餐,午餐,晚餐这3个元素有一个共同特征,即他们都是一日三餐,从而构成了“一日三餐”的集合)

结构:所谓的结构就是关系,是集合中各个元素之间的关系,在数据处理领域中通常把数据元素两两之间的关系用前件/后件关系来描述(比如,当考虑一日三餐的顺序关系时,早餐是午餐的前件午餐是早餐的后件,午餐时晚餐的前件,以此类推)

数据结构分为数据的逻辑结构存储结构

逻辑结构:反映数据元素之间的逻辑关系(前件/后件关系)

存储结构:又称数据的物理结构,时数据的逻辑结构在计算机存储空间中的存放方式

数据结构的表示

基本概念含义例子
根节点数据结构中没有前件的节点

图一中早餐时根节点

图二中连长是根节点

终端节点(或叶子节点)数据结构中没有后件的节点

图一中晚餐是终端节点

图二中士兵是终端节点

内部节点数据结构中除了根节点和终端节点以外的节点

图一中午餐时内部节点

图二中排长和班长时内部节点

线性结构和非线性结构

类型含义例子
线性结构

一个非空的数据结构如果满足以下两个条件就成为线性结构:

①有且只有一个根节点

②每一个节点最多有一个前件也最多有一个后件

如(一日三餐图)
非线性结构不满足以上两点的数据结构就成为非线性结构非线性结构主要是指树形结构和网状结构如(部队军职图)

线性结构

①线性表

        简介:数据结构中线性结构习惯成为线性表,线性表是由n(n>=0)个数据元素构成的有限序列表中除了第一个元素外有且只有一个前件,除了最后一个元素外有且只有有个后件,线性表要么是空表,要么可以表示为:(a1,a2,...,ai,...,an),通常线性表可采用顺序存储和链式存储

        非空线性表具有以下特征:

                ①有且只有一个根节点,即节点a1,它无前件

                ②有且只有一个终端节点,即an,它无后件

                ③除了根节点和终端节点外其他节点有且只有一个前件和一个后件

        线性表的顺序存储:

                线性表的顺序存储结构是指用一段地址连续的存储单元依次存储线性表的数据元素。
                       

        线性表的链式存储:

                链式存储时,相邻数据元素可随意存放,但所占存储空间分两部分,一部分存放结点                      值,另一部分存放表示结点间关系的指针

                优点:插入或删除元素时很方便,使用灵活,存储空间利用率高。

                缺点:存储密度小(<1),查找和修改需要遍历整个链表。

②栈

                简介:栈是一种特殊的线性表,他所有的插入和删除都限定在同一端,允许插入和删除的一端叫栈顶,不允许插入和删除的一段成为栈底,当栈中没有元素时称为空栈

                栈的运算:栈的修改原则是“先进后出”和“后进先出”

                

                通常指针top用来指示栈顶的位置,指针bottom用来指示栈底的位置,假设栈s=(a1,a2,a3,...,an),则称a1为栈底元素,an为栈顶元素,栈中元素按a1,a2,a3,...,an依次进栈,退栈的第一个元素应该为栈顶元素an。

                栈的基本运算有三种:入栈,退栈和读栈顶元素

                栈和一般线性表的存储方法类似,通常 也可以采用顺序存储和链式存储

③队

                队列的定义:队列是允许在一段插入,在另一端进行删除的线性表,允许进行删除的一端称为队头(排头),允许进行插入运算一端的成为队尾

                队列的运算:与栈相反,“先进先出”后进后出“

                

                若有队列q=(1,2,3,4,5,......,6,7,8),那么1为队头元素,8为队尾元素队列中的元素按照1,2,3,4,5,......,6,7,8的顺序依次入队,退出队列也按照这个顺序退出

                队列的运算:可以采用顺序存储的线性表来表示队列,且队列的顺序存储一般采用循环队列的形式

非线性结构

                树形结构:

①树:是一种简单的非线性结构

                

基本概念含义例子
父节点(根)在树结构中,每一个节点只有一个前件,称为该节点的父节点,没有前件的节点只有一个,称为树的根节点,简称树的根节点A是树的根节点
子节点和叶子节点在树结构中每一个节点可以有多个后件,称为该节点的子节点,没有后件的节点称为叶子节点图中D,H,I,F,G都为叶子节点
在树结构中,一个节点所拥有的后件个数称为该节点的度,所有节点中的最大的度称为树的度图中,根节点A和节点E的度为2,节点B的度为3,节点C的度为一,叶子节点DHIFG,的度为0,所以,该树的度为3
深度定义一棵树的根节点所在的层次为1,其他节点的层次等于它的父节点的层次加一,树的最大层次称为树的深度根节点A的层次为1,节点BC在第二层,节点DEFG在第三层,节点HI在第四层,因此,该树的深度为4
子树在树中,以某节点的一个子节点为根,构成的树称为该节点的一颗子树图中,节点A有两颗子树,他们分别以BC为根节点

②二叉树:二叉树和树不同,但它和树的结构很相似

                二叉树的特点:①二叉树可以为空,空的二叉树没有节点,非空二叉树有且只有有一个根节点

                         ②每个节点最多有两棵子树,即二叉树中不存在度大于2大的节点

                         ③二叉树的子树有左右之分,其次序不能颠倒

满二叉树和完全二叉树:

                ①满二叉树是指出最后一层外,每层上的所有节点都有两个子节点的二叉树

                ②完全二叉树是指除了最后一层外,每一层上的节点数均达到最大值,在最后一层上只缺少右边的若干节点的二叉树

                ③由完全二叉树可知,满二叉树一定是完全二叉树,完全二叉树一般不是满二叉树

二叉树的存储结构:在计算机中,二叉树通常采用链式存储结构

二叉树的遍历:二叉树的遍历是指不重复的访问二叉树中的所有节点,可以分为三种遍历“前序遍历”,“中序遍历”,“后序遍历”

                ①前序遍历:首先访问根节点,然后遍历左子树,最后遍历右子树,并且在遍历左子树和右子树时任然先访问根节点,在访问左子树,在访问右子树,图中遍历顺序为:A,B,D,H,E,I,C,F,G

                ②中序遍历:先遍历左子树,然后访问根节点,最后遍历右子树,并且在遍历左子树和右子树时,任然先遍历左子树,在遍历根节点,最后遍历右子树,图中遍历顺序为:H,D,B,E,I,A,C,G,F

                ③后序遍历:先遍历左子树,然后遍历右子树,最后访问根节点,并且在遍历左子树和右子树时仍然先遍历左子树,右子树,根节点,图中的遍历顺序为:H,D,I,E,B,G,F,C,A

                

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Datawhale 组队学习之大模型理论基础Task9 大模型法律

第11章 大模型法律 11.1 简介 此内容主要探讨法律对大型语言模型的开发和部署有何规定。 先看看法律的特点&#xff1a; 法律就如我国法律教材所给出的一样&#xff0c;有依靠国家强制力保证实施的特点。 而法律在大模型中也是不可或缺的&#xff0c;缺少了法律的约束&…

使用Hutool工具包解析、生成XML文件

说明&#xff1a;当我们在工作中需要将数据转为XML文件、或者读取解析XML文件时&#xff0c;使用Hutool工具包中的XMLUtil相关方法是最容易上手的方法&#xff0c;本文介绍如何使用Hutool工具包来解析、生成XML文件。 开始之前&#xff0c;需要导入Hutool工具包的依赖 <de…

通过Demo学WPF—数据绑定(一)✨

前言✨ 想学习WPF&#xff0c;但是看视频教程觉得太耗时间&#xff0c;直接看文档又觉得似懂非懂&#xff0c;因此想通过看Demo代码文档的方式进行学习。 准备✨ 微软官方其实提供了WPF的一些Demo&#xff0c;地址为&#xff1a;microsoft/WPF-Samples: Repository for WPF …

MySQL:MVCC原理详解

MySQL是允许多用户同时操作数据库的&#xff0c;那么就会出现多个事务的并发场景。那么再并发场景会出现很多问题&#xff1a;脏读、不可重复读、幻读的问题。 而解决这些问题所用到的方法就是&#xff1a;MVCC 多版本并发控制。而这个MVCC的实现是基于read_view、undoLog 如…

Linux部署lomp环境,安装typecho、WordPress博客

部署lomp环境&#xff0c;安装typecho、WordPress博客 一、环境要求1.1.版本信息1.2.准备阿里云服务器【新用户免费使用三个月】1.3.准备远程工具【FinalShell】 二、Linux下安装openresty三、Linux下安装Mysql四、安装Apache【此步骤可省略】4.1.安装Apache服务及其扩展包4.2.…

《HTML 简易速速上手小册》第9章:HTML5 新特性(2024 最新版)

文章目录 9.1 HTML5 新增标签和属性9.1.1 基础知识9.1.2 案例 1&#xff1a;创建一个结构化的博客页面9.1.3 案例 2&#xff1a;使用新的表单元素创建事件注册表单9.1.4 案例 3&#xff1a;创建一个具有高级搜索功能的搜索表单 9.2 HTML5 表单增强9.2.1 基础知识9.2.2 案例 1&a…

制冷机组主要组成元件和功能

组主要组成元件的功能如下&#xff1a; 1&#xff09; 压缩机&#xff1a;主要起吸排气作用&#xff0c;将蒸发后的制冷剂气体吸入压缩机并进行压缩,再排到油分离中&#xff1b; 2&#xff09; 减震管&#xff1a;可有效地防止压缩机的震动传递到管路部分&#xff1b; 3&am…

自然语言处理(NLP)技术使用

自然语言处理&#xff08;NLP&#xff09;技术使用 以下是一些自然语言处理&#xff08;NLP&#xff09;技术的例子&#xff1a;以上只是一些NLP技术的例子&#xff0c;还有许多其他的技术和应用&#xff0c;如文本分类、文本生成、问答系统等。NLP技术的发展正逐渐改变人们与计…

c#窗体捕捉方向键

方法1 实现方法参考代码&#xff1a; private void Form1_Load(object sender, EventArgs e){this.KeyPreview true;}protected override bool ProcessDialogKey(Keys keyData){if (keyData Keys.Left || keyData Keys.Right || keyData Keys.Up || keyData Keys.Down){s…

23种设计模式-结构型模式

1.代理模式 在软件开发中,由于一些原因,客户端不想或不能直接访问一个对象,此时可以通过一个称为"代理"的第三者来实现间接访问.该方案对应的设计模式被称为代理模式. 代理模式(Proxy Design Pattern ) 原始定义是&#xff1a;让你能够提供对象的替代品或其占位符。…

ArcGIS Pro 如何计算长度和面积等数据?

要素的几何属性属于比较重要的信息&#xff0c;作为一款专业的GIS软件&#xff0c;ArcGIS Pro自然也是带有计算几何的功能&#xff0c;这里为大家介绍一下计算方法&#xff0c;希望能对你有所帮助。 数据来源 教程所使用的数据是从水经微图中下载的矢量数据&#xff0c;除了矢…

Apache Commons Collection3.2.1反序列化分析(CC1)

Commons Collections简介 Commons Collections是Apache软件基金会的一个开源项目&#xff0c;它提供了一组可复用的数据结构和算法的实现&#xff0c;旨在扩展和增强Java集合框架&#xff0c;以便更好地满足不同类型应用的需求。该项目包含了多种不同类型的集合类、迭代器、队…

备战蓝桥杯---二分(入门)

话不多说&#xff0c;先来个模板题来回顾一下上次讲的&#xff1a; 下面是AC代码&#xff1a; 下面进入正题&#xff1a; 本题对1&#xff0c;2行与3&#xff0c;4行组合&#xff0c;再用二分查找即可实现n^2logn的复杂度。 下面是AC代码&#xff1a; 接题&#xff1a; 让我们…

【Python】03快速上手爬虫案例三:搞定药师帮

文章目录 前言1、破解验证码2、获取数据 前言 提示&#xff1a;通过用户名、密码、搞定验证码&#xff0c;登录进药师帮网站&#xff0c;然后抓取想要的数据。 爬取数据&#xff0c;最终效果图&#xff1a; 1、破解验证码 使用药师帮测试系统&#xff1a;https://dianrc.ysb…

Linux多线程详解

Linux线程和多线程 Linux线程概念什么是线程二级页表线程异常 Linux进程VS线程进程的多个线程共享进程和线程的关系 Linux线程控制线程创建获取线程ID线程终止 分离线程线程ID及进程地址空间布局线程ID及进程地址空间布局 Linux线程概念 什么是线程 在一个程序里的一个执行路…

Docker(第三部分)

1&#xff0c;Docker复杂安装说明 今天的优势会被明天趋势所取代 一切在云端 安装mysql主从复制 主从复制原理&#xff0c;默认你懂 主从搭建步骤 1&#xff0c;新建主从服务器容器实例3307 docker run -p 3307:3306 --name mysql-master\ -v /mydata/mysql-master/log:…

Spring Boot使用七牛云

一、引入和配置 //maven配置 <dependency><groupId>com.qiniu</groupId><artifactId>qiniu-java-sdk</artifactId><version>7.7.0</version> </dependency>#七牛云application.yml配置 qiniu:# 配置accessKeyaccessKey: &qu…

Flask框架小程序后端分离开发学习笔记《5》简易服务器代码

Flask框架小程序后端分离开发学习笔记《5》 Flask是使用python的后端&#xff0c;由于小程序需要后端开发&#xff0c;遂学习一下后端开发。 简易服务器代码 接口解析那一块很关键&#xff0c;学后端服务器这一块&#xff0c;感觉主要就是学习相应地址的接口怎么处理。 然后…

计算机毕业设计 | vue+springboot 超市账单管理系统(附源码)

1&#xff0c;绪论 1.1 开发背景 世界上第一个购物中心诞生于美国纽约&#xff0c;外国人迈克尔库伦开设了第一家合作商店&#xff0c;为了更好地吸引大量客流量&#xff0c;迈克尔库伦精心设计了低价策略&#xff0c;通过大量进货把商品价格压低&#xff0c;通过商店一次性集…

第 6 章:Linux中使用时钟、计时器和信号

在本章中&#xff0c;我们将开始探索Linux环境中可用的各种计时器。随后&#xff0c;我们将深入了解时钟的重要性&#xff0c;并探讨UNIX时间的概念。接下来&#xff0c;我们将揭示在Linux中使用POSIX准确测量时间间隔的方法。之后&#xff0c;我们将进入std::chrono的领域&…