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

计算机基础知识——数据结构与算法(二)(山东省大数据职称考试)

  大数据分析应用-初级

第一部分 基础知识

       一、大数据法律法规、政策文件、相关标准

       二、计算机基础知识

       三、信息化基础知识

       四、密码学

       五、大数据安全

       六、数据库系统

       七、数据仓库.

第二部分 专业知识

       一、大数据技术与应用

       二、大数据分析模型

       三、数据科学


大数据相关标准

  • 大数据分析应用-初级
  • 前言
  • 一、线性表的概念
  • 二、堆栈、队列、跳表和散列的描述方法与应用
  • 练习题目

前言

数据结构与算法

2、掌握线性表的概念,掌握堆栈、队列、跳表和散列的描述方法与应用。


一、线性表的概念

概念

线性表是由 n(n≥0)个相同类型的数据元素组成的有限序列。它是一种最基本、最简单的数据结构,数据元素之间存在着一对一的线性关系。当 n = 0 时,线性表为空表。

描述方法

  • 顺序存储结构(顺序表):用一组连续的存储单元依次存储线性表中的各个元素,可以通过数组来实现。例如在 C 语言中,可以定义如下结构体来表示顺序表:
    #define MAXSIZE 100  // 定义最大长度
    typedef struct {int data[MAXSIZE];  // 存储元素的数组int length;  // 线性表当前长度
    } SqList;
  • 链式存储结构(链表):通过节点来存储元素,每个节点包含数据域和指针域,指针域指向下一个节点,节点之间通过指针链接形成线性表。以单链表为例,C 语言代码如下:
    typedef struct LNode {int data;  // 数据域struct LNode *next;  // 指针域,指向下一个节点
    } LNode, *LinkList;
  • 顺序表应用:比如学生成绩管理系统,将每个学生的成绩依次存储在顺序表中,方便按照学号等顺序进行查找、修改成绩等操作。
  • 链表应用:在操作系统中,进程调度队列可以用链表来实现,每个节点代表一个进程,便于动态地插入新进程和移除已完成的进程。

二、堆栈、队列、跳表和散列的描述方法与应用 

堆栈

概念

堆栈(Stack)是一种只能在一端进行插入和删除操作的特殊线性表,允许操作的一端称为栈顶,另一端称为栈底。遵循后进先出(LIFO,Last In First Out)的原则。

描述方法
  • 顺序栈:同样基于数组实现,利用一个指针(通常称为栈顶指针)来指示栈顶元素的位置。以下是简单的 C 语言顺序栈结构体定义:
#define MAXSIZE 50  // 栈的最大容量
typedef struct {int data[MAXSIZE];int top;  // 栈顶指针,初始化为 -1
} SqStack;
 
  • 链栈:采用链表结构,栈顶作为链表的表头,入栈和出栈操作都在表头进行。用 C 语言表示链栈节点的结构体如下:
typedef struct StackNode {int data;struct StackNode *next;
} StackNode, *LinkStack;
应用
  • 函数调用栈:在程序运行时,当一个函数调用另一个函数时,会将当前函数的执行上下文(如局部变量、返回地址等)压入栈中,被调用函数执行完毕后,再从栈顶弹出相应的执行上下文,恢复到原函数继续执行,实现了函数调用的嵌套管理。
  • 表达式求值:例如对算术表达式 “3 + 4 * 2” 求值时,可以利用栈来辅助实现运算符和操作数的处理,根据运算符优先级将操作数和运算符依次入栈、出栈进行计算。

队列

概念

队列(Queue)也是一种特殊的线性表,它只允许在一端进行插入操作(队尾),在另一端进行删除操作(队头),遵循先进先出(FIFO,First In First Out)的原则。

描述方法
  • 顺序队列:使用数组来存储队列元素,通过两个指针分别指示队头和队尾的位置。不过顺序队列存在假溢出问题,实际应用中常采用循环队列来解决。循环队列的 C 语言结构体示例如下:
#define MAXSIZE 100  // 队列最大容量
typedef struct {int data[MAXSIZE];int front;  // 队头指针int rear;  // 队尾指针
} SqQueue;
 
  • 链队列:由一个带头节点的单链表实现,队头指针指向头节点,队尾指针指向链表的最后一个节点。其节点结构体和队的结构体定义大致如下:
typedef struct QNode {int data;struct QNode *next;
} QNode, *QueuePtr;typedef struct {QueuePtr front;  // 队头指针QueuePtr rear;  // 队尾指针
} LinkQueue;
应用
  • 操作系统中的作业排队:在多道程序设计环境下,多个作业等待 CPU 处理时,会按照提交的先后顺序排成队列,先提交的作业先进入 CPU 执行,体现了先进先出的特点。
  • 打印机任务队列:当多个文档需要打印时,它们会按照发送打印请求的先后顺序在队列中排队,打印机依次从队列头取出任务进行打印。

跳表

概念

跳表(Skip List)是一种基于有序链表改进的数据结构,通过增加多级索引来提高查找效率,它以概率的方式来构建索引层,使得查找、插入和删除操作的平均时间复杂度可以达到 ,其中 n 是元素个数。

描述方法

跳表由多层有序链表组成,最底层的链表包含了所有的元素,每一层链表都是下一层链表的一个子集,并且元素间隔逐渐变大,高层的索引链表能够快速跳过一些节点,加速查找过程。例如,一个简单的跳表节点结构体在 C 语言中可以这样定义:

 
typedef struct SkipListNode {int key;int value;struct SkipListNode *forward[1];  // 指针数组,用于指向不同层的下一个节点
} SkipListNode;typedef struct SkipList {SkipListNode *header;  // 头节点int level;  // 跳表当前层数
} SkipList;
应用
  • 数据库索引:在一些数据库系统中,对于频繁进行查找操作的数据表,可以采用跳表来构建索引,加快数据查询速度,比如在内存数据库中查找特定键值对应的记录时,跳表能高效地定位到目标记录。
  • 分布式系统中的数据查找:在分布式缓存等场景下,需要快速查找某个键对应的缓存值,跳表可作为一种有效的存储结构来提高查找性能。

散列

概念

散列(Hash)又称哈希,是通过散列函数将数据元素的关键字映射为散列表中的一个地址,根据这个地址来存储和查找元素,理想情况下可以实现  的时间复杂度来进行插入、查找和删除操作,但可能存在冲突情况(不同关键字通过散列函数得到相同的地址),需要解决冲突。

描述方法
  • 散列函数的选择:常见的散列函数有直接定址法(例如Hash(key) = a * key + b,a、b 为常数)、除留余数法(Hash(key) = key % p,p 通常为小于散列表长度的质数)等。
  • 解决冲突的方法
    • 开放定址法:发生冲突时,按照一定的探测序列去寻找下一个空闲的存储单元,比如线性探测(Hi = (Hash(key) + i) % m,m 为散列表长度,i 依次递增)、二次探测等。
    • 链地址法:将散列到同一地址的所有元素构成一个链表,存储在散列表对应的槽位中。例如用 C 语言实现链地址法的散列表节点和散列表结构体可以如下:
typedef struct HashNode {int key;int value;struct HashNode *next;
} HashNode;typedef struct HashTable {HashNode **table;  // 指针数组,每个元素指向一个链表头节点int size;  // 散列表大小
} HashTable;
应用
  • 编译器中的符号表管理:在编译程序时,对于程序中定义的变量名、函数名等符号,通过散列函数将它们映射到符号表中的地址进行存储,方便后续在编译过程中快速查找符号对应的属性(如变量类型、作用域等)。
  • 缓存系统中的键值存储:像网页缓存,以网页的 URL 作为关键字,经过散列后存储对应的网页内容在缓存中,下次访问相同 URL 时能快速通过散列地址找到缓存内容,提高访问效率。

练习题目

一、单选题

1.线性表是( )
A. 一个有限序列,可以为空
B. 一个无限序列,不能为空
C. 一个有限序列,不能为空
D. 一个无限序列,可以为空

答案:A

解析:线性表是由 n(n≥0)个相同类型的数据元素组成的有限序列。当 n = 0 时,线性表为空表,所以线性表是一个有限序列,可以为空。

2.栈的操作原则是( )
A. 先进先出
B. 后进先出
C. 只能删除
D. 只能插入

答案:B

解析:栈是一种只能在一端进行插入和删除操作的特殊线性表,遵循后进先出(LIFO)的原则。就像往一个桶里放东西,最后放进去的东西会最先被拿出来。

3.队列操作的原则是( )
A. 先进先出
B. 后进先出
C. 只能删除
D. 只能插入

答案:A

解析:队列只允许在一端进行插入操作(队尾),在另一端进行删除操作(队头),遵循先进先出(FIFO)的原则。例如排队买票,先排队的人先买到票离开。

4.散列存储中处理冲突的方法有( )
A. 仅开放定址法
B. 仅链地址法
C. 开放定址法和链地址法
D. 重新散列法

答案:C

解析:在散列存储中,开放定址法是发生冲突时,按照一定的探测序列去寻找下一个空闲的存储单元;链地址法是将散列到同一地址的所有元素构成一个链表,存储在散列表对应的槽位中。这两种都是常见的处理冲突的方法。

5.跳表的平均查找时间复杂度是( )

答案:B

解析:跳表通过增加多级索引来提高查找效率,以概率的方式来构建索引层,使得查找、插入和删除操作的平均时间复杂度可以达到O(logn),其中 n 是元素个数。

二、多选题

1.线性表的存储结构可以是( )
A. 顺序存储
B. 链式存储
C. 索引存储
D. 散列存储

答案:AB

解析:线性表主要有两种存储结构,顺序存储结构(顺序表)和链式存储结构(链表)。顺序存储是用一组连续的存储单元依次存储线性表中的各个元素;链式存储是通过节点来存储元素,每个节点包含数据域和指针域,指针域指向下一个节点,节点之间通过指针链接形成线性表。

2.以下属于栈的应用的是( )
A. 函数调用栈
B. 表达式求值
C. 作业排队
D. 网页缓存

答案:AB

解析:在程序运行时,函数调用栈用于管理函数调用的嵌套;表达式求值可以利用栈来辅助实现运算符和操作数的处理。作业排队是队列的应用,网页缓存主要是散列的应用。

3.队列的存储结构可以是( )
A. 顺序存储
B. 链式存储
C. 索引存储
D. 散列存储

答案:AB

解析:队列可以用顺序存储结构(如顺序队列、循环队列)和链式存储结构(链队列)来实现,索引存储和散列存储不是队列常见的存储实现方式用于体现队列的特性。

4.散列函数的常见构造方法有( )
A. 直接定址法
B. 除留余数法
C. 平方取中法
D. 折叠法

答案:ABCD

解析:直接定址法是一种简单的散列函数构造方法,如Hash(key) = a * key + b;除留余数法Hash(key) = key % p(p 通常为小于散列表长度的质数)比较常用;平方取中法是将关键字平方后,取中间几位作为散列地址;折叠法是将关键字分割成位数相同的几部分,然后取它们的叠加和作为散列地址。

5.跳表的组成部分包括( )
A. 多层有序链表
B. 头节点
C. 索引节点
D. 数据节点

答案:ABC

解析:跳表由多层有序链表组成,最底层的链表包含了所有的元素。有头节点用于方便操作,并且通过索引节点构建索引层来加速查找过程,跳表中的节点没有专门区分数据节点和其他节点的说法,节点既包含数据也包含索引相关的指针。

三、判断题

1.线性表中的元素必须是数字。( )
答案:错误

解析:线性表中的元素可以是任何相同类型的数据,如字符、字符串、结构体等,不一定是数字。

2.栈和队列都是线性表的特殊形式。( )
答案:正确

解析:栈和队列都是在基本线性表的基础上,对插入和删除操作进行了限制而形成的特殊线性表。栈限制在一端进行插入和删除操作,队列限制在两端分别进行插入和删除操作。

3.散列函数计算出来的地址一定不会冲突。( )
答案:错误

解析:散列函数可能会产生冲突,因为关键字的集合通常比散列表的地址空间大得多,不同的关键字可能通过散列函数映射到相同的地址。

4.跳表在最坏情况下的查找时间复杂度和链表一样。( )
答案:正确

解析:在最坏情况下,跳表的索引层没有起到作用,就相当于在底层的链表进行查找,时间复杂度和普通链表一样,为。

5.顺序队列不存在队列满的情况。( )
答案:错误

解析:顺序队列有容量限制,当队尾指针到达数组末尾,即使队头前面还有空闲空间,也会出现队满的假溢出情况,不过可以通过循环队列来解决这个问题。

相关文章:

计算机基础知识——数据结构与算法(二)(山东省大数据职称考试)

大数据分析应用-初级 第一部分 基础知识 一、大数据法律法规、政策文件、相关标准 二、计算机基础知识 三、信息化基础知识 四、密码学 五、大数据安全 六、数据库系统 七、数据仓库. 第二部分 专业知识 一、大数据技术与应用 二、大数据分析模型 三、数据科学 大数据相关标准…...

docsify

macos ➜ ~ node -v v16.20.2➜ ~ npm --version 8.19.4全局安装 docsify-cli 工具 npm i docsify-cli -g➜ ~ docsify -vdocsify-cli version:4.4.4初始化项目 docsify init ./docsls -ah docs . .. .nojekyll README.md index.htmlindex.html 入口文件README.md 会…...

GEE教程——使用 CHIRPS 和 GSMaP 数据集计算并可视化了特定区域的降水量

目录 简介 函数 ee.Image.pixelLonLat() No arguments. Returns: Image visualize(bands, gain, bias, min, max, gamma, opacity, palette, forceRgbOutput) Arguments: Returns: Image 代码解释 代码 结果 简介 GEE教程——使用 CHIRPS 和 GSMaP 数据集计算并可视…...

前端实现页面自动播放音频方法

前端实现页面视频在谷歌浏览器中自动播放音频方法 了解Chrome自动播放策略 在Chrome和其他现代浏览器中,为了改善用户体验,自动播放功能受到了限制。Chrome的自动播放策略主要针对有声音的视频,目的是防止页面在用户不知情的情况下自动播放声…...

【Nginx-5】Nginx 限流配置指南:保护你的服务器免受流量洪峰冲击

在现代互联网应用中,流量波动是常态。无论是突发的用户访问高峰,还是恶意攻击,都可能导致服务器资源耗尽,进而影响服务的可用性。为了应对这种情况,限流(Rate Limiting)成为了一种常见的保护措施…...

【芯片设计- RTL 数字逻辑设计入门 番外篇 7.1 -- 基于ATE的IC测试原理】

文章目录 ATE 测试概述Opens/Shorts测试Leakage测试AC测试转自:漫谈大千世界 漫谈大千世界 2024年10月23日 23:17 湖北 ATE 测试概述 ATE(Automatic Test Equipment)是用于检测集成电路(IC)功能完整性的自动测试设备。它在半导体产业中扮演着至关重要的角色,主要用于检…...

SurfaceFlinger 学习

Android 图形系统之七:SurfaceFlinger-CSDN博客 CSDN...

Flink SQL 从一个SOURCE 写入多个Sink端实例

一. 背景 FLINK 任务从一个数据源读取数据, 写入多个sink端. 二. 官方实例 写入多个Sink语句时,需要以BEGIN STATEMENT SET;开头,以END;结尾。--源表 CREATE TEMPORARY TABLE datagen_source (name VARCHAR,score BIGINT ) WITH (connector datagen …...

python飞机大战游戏.py

python飞机大战游戏.py import pygame import random# 游戏窗口大小 WINDOW_WIDTH 600 WINDOW_HEIGHT 800# 颜色定义 BLACK (0, 0, 0) WHITE (255, 255, 255)# 初始化Pygame pygame.init()# 创建游戏窗口 window pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT))…...

【C++】14___String容器

目录 一、string基本概念 二、string赋值操作 三、字符串拼接 四、 string查找和替换 五、 string字符串比较 六、string插入和删除 七、string子串 一、string基本概念 本质:string是C风格的字符串,而string本质上是一个类 string和char*区别&am…...

数据特性库 前言

文章目录 一、num-traits库简介二、核心功能三、更新功能四、使用方式五、应用示例六、结论 一、num-traits库简介 num-traits是Rust编程语言中的一个开源库,专注于为数值类型提供一系列的数学运算特性和接口。它支持泛型数学计算,允许开发者在不指定具…...

jdk和cglib动态代理区别

目标类不同 jdk目标类需要实现接口。 cglib不需要。 代理类生成方式不同 jdk内部字节码生成代理类。 cglib使用ASM字节码生成库生成代理类。 代理类和目标类关系不同 jdk代理类实现目标类接口,jdk无法代理目标类中static或private的方法。 cglib 代理类继承目标类…...

部署Mysql、镜像和容器、常见命令

目录 部署Mysql 镜像和容器 常见命令 部署Mysql 可以有多个容器 docker run -d \--name mysql \-p 3306:3306 \-e TZAsia/Shanghai \-e MYSQL_ROOT_PASSWORD123 \mysql docker run -d \--name mysql2 \-p 3307:3307 \-e TZAsia/Shanghai \-e MYSQL_ROOT_PASSWORD123 \mys…...

【数学】P2671 [NOIP2015 普及组] 求和

题目背景 NOIP2015 普及组 T3、深入浅出进阶1-5 题目描述 一条狭长的纸带被均匀划分出了 n n n 个格子,格子编号从 1 1 1 到 n n n。每个格子上都染了一种颜色 c o l o r i color_i colori​ 用 [ 1 , m ] [1,m] [1,m] 当中的一个整数表示)&…...

【AI图像生成网站Golang】项目测试与优化

AI图像生成网站 目录 一、项目介绍 二、雪花算法 三、JWT认证与令牌桶算法 四、项目架构 五、图床上传与图像生成API搭建 六、项目测试与优化 六、项目测试与优化 在开发过程中,性能优化是保证项目可扩展性和用户体验的关键步骤。本文将详细介绍我如何使用一…...

vue常用自定义指令

参考链接1https://blog.csdn.net/m0_67584973/article/details/139300966?spm1001.2014.3001.5501 参考链接2https://juejin.cn/post/7067051410671534116...

以太网帧、IP数据报图解

注:本文为 “以太网帧、IP数据报”图解相关文章合辑。 未整理去重。 以太网帧、IP数据报的图解格式(包含相关例题讲解) Rebecca.Yan已于 2023-05-27 14:13:19 修改 一、基础知识 UDP 段、IP 数据包,以太网帧图示 通信过程中&…...

01.大模型起源与发展

知识点 注意力机制(Attention)的主要用途是什么? 选择重要的信息并忽略不相关的信息 Transformer 模型是基于什么理论构建的? C. 注意力机制(Attention) GPT 和 BERT 的主要区别是什么? C. GPT…...

leetcode刷题日记03——javascript

题目3: 回文数https://leetcode.cn/problems/palindrome-number/ 给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。 回文数是指正序(从左向右)和倒序(从右向…...

vue横向滚动日期选择器组件

vue横向滚动日期选择器组件 组件使用到了element-plus组件库和dayjs库,使用前先保证项目中已经下载导入 主要功能:选择日期,点击日期可以让此日期滚动到视图中间,左滑右滑同理,支持跳转至任意日期,支持自…...

【大模型】大模型项目选择 RAGvs微调?

RAG 输入问题,在知识库匹配知识,构建提示词:基于{知识}回答{问题} 微调 用知识问答对重新训练大模型权重,输入问题到调整后的大模型 如何选择 如果业务要求较高,RAG和微调可以一起使用 1-动态数据 选择RAG 原因&a…...

2024年12月CCF-GESP编程能力等级认证Python编程一级真题解析

本文收录于专栏《Python等级认证CCF-GESP真题解析》,专栏总目录:点这里,订阅后可阅读专栏内所有文章。 一、单选题(每题 2 分,共 30 分) 第 1 题 2024年10月8日,诺贝尔物理学奖“意外地”颁给了两位计算机科学家约翰霍普菲尔德(John J. Hopfield)和杰弗里辛顿(Geof…...

【机器学习】元学习(Meta-learning)

云边有个稻草人-CSDN博客 目录 引言 一、元学习的基本概念 1.1 什么是元学习? 1.2 元学习的与少样本学习的关系 二、元学习的核心问题与挑战 2.1 核心问题 2.2 挑战 三、元学习的常见方法 3.1 基于优化的元学习 3.1.1 MAML(Model-Agnostic Meta…...

详解Redis的String类型及相关命令

目录 SET GET MGET MSET SETNX SET和SETNX和SETXX对比 INCR INCRBY DECR DECRBY INCRBYFLOAT APPEND GETRANGE SETRANGE STRLEN 内部编码 SET 将 string 类型的 value 设置到 key 中。如果 key 之前存在,则覆盖,⽆论原来的数据类型是什么…...

android RadioButton + ViewPager+fragment

RadioGroup viewpage fragment 组合显示导航栏 1、首先主界面的布局控件就是RadioGroup viewpage <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools…...

给机器装上“脑子”—— 一文带你玩转机器学习

目录 一、引言&#xff1a;AI浪潮中的明星——机器学习 二、机器学习的定义与概念 1. 机器学习与传统编程的区别 2. 机器学习的主要任务类型 3. 机器学习的重要组成部分 三、机器学习的工作原理&#xff1a;从数据到模型的魔法之旅 1. 数据收集与预处理——数据是机器的…...

论文笔记:是什么让多模态学习变得困难?

整理了What Makes Training Multi-modal Classification Networks Hard? 论文的阅读笔记 背景方法OGR基于最小化OGR的多监督信号混合在实践中的应用 实验 背景 直观上&#xff0c;多模态网络接收更多的信息&#xff0c;因此它应该匹配或优于其单峰网络。然而&#xff0c;最好的…...

ChatGPT Search开放:实时多模态搜索新体验

点击访问 chatTools 免费体验GPT最新模型&#xff0c;包括o1推理模型、GPT4o、Claude、Gemini等模型&#xff01; ChatGPT Search&#xff1a;功能亮点解析 本次更新的ChatGPT Search带来了多项令人瞩目的功能&#xff0c;使其在搜索引擎市场中更具竞争力。 1. 高级语音模式&…...

Centos7.9 离线安装docker

实验环境&#xff1a; [root192 ~]# cat /etc/system-release CentOS Linux release 7.9.2009 (Core)下载二进制压缩包 a. 官网下载地址&#xff1a; https://download.docker.com/linux/static/stable/x86_64/b. 阿里云下载地址 https://mirrors.aliyun.com/docker-ce/lin…...

C语言函数在调用过程中具体是怎么和栈互动的?

从栈开始的一场C语言探险记 —— C语言函数是如何与栈"共舞"的。 栈的舞步解析 通过一个简单的例子来看看这支"舞蹈"&#xff1a; int add(int a, int b) {int result a b;return result; }int main() {int x 10;int y 20;int sum add(x, y);retur…...