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

【数据结构Ⅰ复习题】

如有错误欢迎指正,题目根据教材----------严蔚敏数据结构(c语言版 第2版)人民邮电电子版

数据结构Ⅰ复习题

  • 一、填空题
  • 1.算法应该具备的5个重要特性有___有穷性___、确定性、可行性、输入和输出。
  • 2.非空单链表L中*p是头结点的条件是 __P==L_____ 。
  • 3.深度为10的满二叉树共含有 __1023_____ 个结点。
  • 4.当无向图是稠密图时,更适合采用__邻接矩阵_____ 作为其存储结构。
  • 5.对含有8个元素的一组关键字进行哈希检索,若给定装填因子为0.8,则哈希表的表长应设定为 __10__ 。
  • 6.抽象数据类型可用三元组(D,S,P)表示,其中,D是数据对象,S是D上的关系集,P是对D的基本 _操作_ 集。
  • 7.设有一个二维数组A,行下标的范围从0 ~ 5,列下标的范围是从0 ~ 7,若A按列优先方式存储,元素A[3][5]的起始地址与当A按行优先方式存储时_A[4][1]_____ 元素的起始地址一致。
  • 8.一棵有255个叶子结点的完全二叉树,最多有 _510___ 个结点。
  • 9.在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的__1__倍。
  • 10.给定关键码序列:{22,41,53,46,30},哈希函数为:H(key)=key mod 6,基本表长度为6,用链地址法解决冲突构建哈希表,则此哈希表在等概率情况下查找成功的平均查找长度是 __7/5____ 。
  • 11.数据的逻辑结构分为集合、线性结构、树形结构和 _图状结构_ 4种。
  • 12. 设栈S和队列Q的初始状态为空,元素e1,e2,e3,e4,e5,e6依次通过栈S,一个元素出栈后即进入队列Q,若6个元素出队的序列是e2,e4,e3,e6,e5,e1,则栈的容量至少应该是 __3__ 。
  • 13.用顺序存储的方法,将完全二叉树中所有结点按层逐个从左到右的顺序存放在一维数组R[1..N]中,若结点R[i]有右孩子,则其右孩子是 _R[2i]___ 。
  • 14.一个具有n个顶点的有向图最多有 _n(n-1)__条边。
  • 15.一个无序序列可以通过构造一棵 _二叉排序_树而变成一个有序序列,构造树的过程即为对无序序列进行排序的过程。
  • 二、单项选择题
  • 1.下面程序段的时间复杂度为( B )
  • 2.线性表的链式存储有利于(  A  )运算的实现。
  • 3.设栈S初始为空时S.top == S.base(base为栈底指针,top为栈顶指针),最大存储容量为maxsize,则栈内的元素个数为( A )。
  • 4.若二叉树采用顺序存储结构,且树根存储在1号存储单元(0号存储单元未用),则存储在i号存储单元的结点的左孩子若存在,其存储单元为(  C   )。
  • 5.图的广度优先搜索遍历类似于树的( D )遍历的过程。
  • 6.以下排序方法中,( A )是对直接插入排序算法进行改进得到的一种插入排序算法。
  • 7.下面关于算法说法正确的是( D )。
  • 8.假设push(1)代表数据元素1入栈,pop代表出栈,在操作序列push(1)、pop、push(2)、push(5)、push(7)、pop、push(6)、pop之后,栈中还有几个元素,栈顶元素和栈底元素分别是什么?( A )
  • 9.设有一个顺序表Sq的存储空间为0~m-1,用length表示表长,用listsize表示容量,则顺序表Sq满的条件是( B )。
  • 10.采用二叉链表存储的二叉树中若有n个结点,那么有( A )个非空指针域。
  • 11.一个有n个顶点的无向图最多有( C )条边。
  • 12.二叉排序树中,键值最小的结点一定( A )。
  • 13.下面程序段的时间复杂度是(C )。
  • 14. 判断一个循环队列Q(最多n个元素)为满的条件是( C )。
  • 15.设SUBSTR(S,i,k)是求S中从第i个字符开始的连续k个字符组成的子串的操作,则对于S=’Beijing&Nanjing’,SUBSTR(S,4,5)=(B )。
  • 16. 深度为k的完全二叉树,至少具有( D )个结点,若对这些结点按自上而下,从左到右次序给结点编号(从1开始),则编号最小的叶子结点的编号是( D )。
  • 17.带权有向图G用邻接矩阵A存储,则顶点i的入度为A中:( D )。
  • 18. 有一个有序表为 {3,7,9,22,36,43,50,62,75,77,79,95,99},当折半查找值为82的结点时,( C )次比较后查找成功。
  • 三、分析解答题
  • 1. 假设二维数组A的每个元素是由8个字符组成的串(行下标的范围从1到6,列下标的范围从1到8)。已知A的基地址为1000,则
  • 2. 已知一棵二叉树的中序遍历和后序遍历序列分别为DBFEGAC和DFGEBCA,请画出此二叉树示意图,再画出其对应的二叉树二叉链表存储结构,并写出其先序遍历序列。
  • 3. 甲乙两方出于保密使用Huffman编码进行电文通信。假设用于通信的电文由abcdefg7种字符组成,且它们在电文中出现的百分比依次为7%、16%、2%、9%、35%、11%、20%,请将百分比化作小数作为权值,按权值小者为左孩子构造Huffman树的规则,画出哈夫曼树,写出各字符的哈夫曼编码,并计算WPL。
  • 4.无向图G的顶点集为V={A,B,C,D,E,F},边集为S={(A,B),(A,D),(A,E),(B,D),(D,E),(C,F)},画出该图的邻接矩阵存储结构,写出从A出发的一个广度优先搜索序列,并画出该图的连通分量。
  • 5. 网通公司要在某镇周边的6个村庄铺设光纤网络,为使光纤造价最低,对几个村庄的连通情况进行了测量,如下图所示,单位为千米。请采用prim算法从顶点A开始构造最小生成树。画出最小生成树的最终形态,并写出在构造过程中辅助数组中各分量值的变化。
  • 6. 序列(08,58,19,23,40,36,28,66,35,87,25,100)是不是堆?如果是,属于何类型?如果不是,请将它调整为交换记录最少的堆,说出其类型,并且输出其经过一趟堆排序后的元素序列。
  • 7.对于一个具有n个结点的单链表,在已知p所指结点后插入一个新结点的时间复杂度是?在给定值为x的结点后插入一个新结点的时间复杂度是?若删除p所指结点的后继结点,则应执行什么操作?需要分配较大空间,插入和删除不需要移动元素的线性表,采用哪种存储结构更合适?
  • 8.已知二叉树的中序序列为DGBAEHCF,后序序列为GDBHEFCA,画出这棵二叉树,写出二叉树的顺序存储结构,并将其转换为森林。
  • 9.已知某文档中只可能出现ABCDEFG七种字符,且它们的出现的次数依次为81,44,23,51,36,97,22,现要将这个文档通过网络传输出去,请按照传输码长最短的原则,建立一种二进制前缀编码方案,并求出码长。
  • 10.如下所示的无向图是非连通图,请画出它的所有连通分量,以及生成森林,并写出从A点出发的深度优先遍历序列和广度优先遍历序列。
  • 11.假设想在8个城市之间修建高速路,施工人员经过测算,各个可能修建的道路和需要花费的代价如下图所示,请设计一种方案能够在最节省成本的前提下将8个城市连通起来,画出选取步骤,并写出最后方案的邻接矩阵。
  • 12.请采用快速排序法和直接插入排序法对该序列{60,56,86,23,16,46}进行升序排序,写出每种方法前三趟排序结果,并分析这两种排序方法的稳定性。
  • 13.现有矩阵A如下图所示,若A[2][3]地址为2018,元素值是“1”,每个元素占24个存储单元,则数组A在什么位置存放?假设A为稀疏矩阵,请给出它的三元组表。
  • 14.已知某二叉树如下所示,试画出它转换成森林,并请写出该二叉树的先序、中序、后序遍历的序列。
  • 15.军事演习中蓝军要发送由abcdef 六种字符组成的密文(其频率为44,11,25,30,5,7),要求使用二进制前缀编码传送,设计一种编码方式可以使报文总长最短,给出每个字符的码值并求出编码的总长度。
  • 16. 如下所示的有向图,回答下面问题:
  • 17.吉林市松花湖上有7座小岛11条航线,旅行团从码头V0出发想要游遍所有小岛,请提出2种遍历方案并给出每个方案的游岛顺序。若想花费最少代价规划一条航线,请给出航线的生成过程。
  • 18.设散列表的长度为8,散列函数H(k)=k mod 7,初始记录关键字序列为(25,31,8,27,13,68),要求分别计算出用线性探测法和链地址法作为解决冲突方法的平均查找长度。
  • 四、算法设计题
  • 1. 学校办公设备数据按型号不同存放在顺序表L中,现有某个型号的设备全部报废,且该型号元素在顺序表中处于第i(1≤i≤n)个位置,请完成以下删除顺序表第i个元素的算法。
  • 2. 采用二叉链表结构存储的二叉树,其指针域lchild和rchild分别指向当前结点的左右子树,请在空格上填写适当语句,实现在二叉链表存储结构上计算二叉树叶子结点个数的算法。
  • 3. 某文具超市为提高检索效率及方便插入删除商品信息,将每种文具信息以货号为主关键字存储在二叉排序树中。设每种文具商品(RedType为文具类型名)包含货号(Sid)、商品名(Sname)、单价(Sprice)及库存数量(Snum)等信息。
  • 4.工商银行江北支行为到达该行办理业务的储户提供自动排队服务,储户要办理业务需到叫号机前领取号码,等待叫号后到窗口办理业务。叫号机允许同时排队等待的最大人数为100人,按照先来先服务的原则,请在空格上填写适当的语句,完成窗口叫号业务的算法。
  • 5.请在空格上填写适当的语句,完成二叉树的层次遍历算法。
  • 6.某网店有m种商品,每种商品的价格为h元,库存量为n个,销量为s个,各种商品的信息已存储在一个按商品名ASCII码值由高到低排列的顺序表中,现店主想要了解商品的库存量情况,随机输入想查看的商品名称,请你用折半查找法帮助店主找到该商品的库存量。
  • 7.计算机学院17级学生接到维护通讯录系统的任务,由于文档丢失仅发现删除功能的部分代码,通过分析以下代码将这一函数的算法补充完整。
  • 8. 在构成哈夫曼树之后,为求编码需从叶子结点出发逆向走一条从叶子到根的路径以求的每个字符的Huffman编码,请将这一段算法补充完整。
  • 9.吉林乌拉手工品商城有num种商品,id是商品的标识号,每种商品的价格为price元,库存量为stocknum,销量为salenum个,各种商品的信息存储在顺序表中,现商城经理想要了解商品的销量情况(由高到低排序)。


一、填空题

1.算法应该具备的5个重要特性有___有穷性___、确定性、可行性、输入和输出。

2.非空单链表L中*p是头结点的条件是 P==L___ 。

3.深度为10的满二叉树共含有 1023___ 个结点。

4.当无向图是稠密图时,更适合采用__邻接矩阵_____ 作为其存储结构。

5.对含有8个元素的一组关键字进行哈希检索,若给定装填因子为0.8,则哈希表的表长应设定为 10

6.抽象数据类型可用三元组(D,S,P)表示,其中,D是数据对象,S是D上的关系集,P是对D的基本 操作 集。

7.设有一个二维数组A,行下标的范围从0 ~ 5,列下标的范围是从0 ~ 7,若A按列优先方式存储,元素A[3][5]的起始地址与当A按行优先方式存储时_A[4][1]_____ 元素的起始地址一致。

8.一棵有255个叶子结点的完全二叉树,最多有 510__ 个结点。

9.在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的__1__倍。

10.给定关键码序列:{22,41,53,46,30},哈希函数为:H(key)=key mod 6,基本表长度为6,用链地址法解决冲突构建哈希表,则此哈希表在等概率情况下查找成功的平均查找长度是 7/5__ 。

11.数据的逻辑结构分为集合、线性结构、树形结构和 图状结构 4种。

12. 设栈S和队列Q的初始状态为空,元素e1,e2,e3,e4,e5,e6依次通过栈S,一个元素出栈后即进入队列Q,若6个元素出队的序列是e2,e4,e3,e6,e5,e1,则栈的容量至少应该是 3

13.用顺序存储的方法,将完全二叉树中所有结点按层逐个从左到右的顺序存放在一维数组R[1…N]中,若结点R[i]有右孩子,则其右孩子是 R[2i]__ 。

14.一个具有n个顶点的有向图最多有 _n(n-1)__条边。

15.一个无序序列可以通过构造一棵 _二叉排序_树而变成一个有序序列,构造树的过程即为对无序序列进行排序的过程。

二、单项选择题

1.下面程序段的时间复杂度为( B )

i=1; j=0;
while(i+j<=n)
{ if (i>j) j++;
else i++;}

A. O(1) B. O(n) C. O(n2) D. O(2n)

2.线性表的链式存储有利于(  A  )运算的实现。

A. 插入   B. 读元素   C.  查找    D. 定位

3.设栈S初始为空时S.top == S.base(base为栈底指针,top为栈顶指针),最大存储容量为maxsize,则栈内的元素个数为( A )。

A.S.top-S.base  B. S.top-S.base+maxsize  
C. S.top  D. S.base+maxsize-S.top

4.若二叉树采用顺序存储结构,且树根存储在1号存储单元(0号存储单元未用),则存储在i号存储单元的结点的左孩子若存在,其存储单元为(  C   )。

A. i B. 2i-1 C. 2i D. 2i+1

5.图的广度优先搜索遍历类似于树的( D )遍历的过程。

A. 先序  B. 中序  C. 后序  D. 按层次

6.以下排序方法中,( A )是对直接插入排序算法进行改进得到的一种插入排序算法。

A. 希尔排序 B. 快速排序  C. 锦标赛排序 D. 堆排序

7.下面关于算法说法正确的是( D )。

A.算法的时间复杂度一般与空间复杂度成正比
B.解决某问题的算法可能有多种,但肯定采用相同的数据结构
C.算法的可行性是指算法的指令不能有二义性
D.算法是指令的有限序列

8.假设push(1)代表数据元素1入栈,pop代表出栈,在操作序列push(1)、pop、push(2)、push(5)、push(7)、pop、push(6)、pop之后,栈中还有几个元素,栈顶元素和栈底元素分别是什么?( A )

A.2,5,2 B.3,5,2 C.2,7,2 D.3,6,2

9.设有一个顺序表Sq的存储空间为0~m-1,用length表示表长,用listsize表示容量,则顺序表Sq满的条件是( B )。

A.Sq.length>=m-1 B.Sq.length>=m
C.Sq.listsize>=m-1 D.Sq.listsize>=m

10.采用二叉链表存储的二叉树中若有n个结点,那么有( A )个非空指针域。

A.n-1 B.n+1 C.2n-1 D.2n+1

在采用二叉链表存储的二叉树中,每个节点都有一个左孩子指针和一个右孩子指针。对于n个节点的二叉树,总共有2n个指针域(因为每个节点有两个指针域)。
然而,并不是所有的指针域都是非空的。在二叉树中,除了根节点外,每个节点都是另一个节点的子节点,这意味着至少有一个指针指向它。因此,对于n个节点的二叉树,会有n-1个节点作为子节点被其他节点的指针指向。根节点没有父节点指向它,所以它不计入被指向的节点数。
因此,对于n个节点的二叉树,非空指针域的数量等于节点数减去根节点,即n-1个。这是因为除了根节点外,每个节点都有一个指针指向它。

11.一个有n个顶点的无向图最多有( C )条边。

A.n B.n(n-1) C.n(n-1)/2 D.2n

12.二叉排序树中,键值最小的结点一定( A )。

A.左指针为空 B.右指针为空
C.左右指针均为空 D.左右指针均为非空

13.下面程序段的时间复杂度是(C )。

s =0;
  for(i =0; i<n; i++)
  for(j=0;j<n;j++)
  s +=B[i][j];
  sum = s ;
A. O(1) B. O(n) C. O(n2) D. O(2n)

14. 判断一个循环队列Q(最多n个元素)为满的条件是( C )。

A. Q->rear= =Q->front B. Q->rear= =Q->front+1
C. Q->front==(Q->rear+1)%n D. Q->front==(Q->rear-1)%n

15.设SUBSTR(S,i,k)是求S中从第i个字符开始的连续k个字符组成的子串的操作,则对于S=’Beijing&Nanjing’,SUBSTR(S,4,5)=(B )。

A. ‘ijing’ B. ‘jing&’ C. ‘ingNa’ D. ‘ing&N’

16. 深度为k的完全二叉树,至少具有( D )个结点,若对这些结点按自上而下,从左到右次序给结点编号(从1开始),则编号最小的叶子结点的编号是( D )。

A.2^ k -1 2 ^ k-1 B.2^ (k-1) 2^ (k-1) C.2^ (k-1) 2^ (k-1)+1 D.2^(k-1) 2 ^(k-2)+1

对于深度为k的完全二叉树,编号最小的叶子节点的编号是2^(k-2)+1。这是因为:
在完全二叉树中,除了最后一层外,所有层都是满的。
第k-1层是满的,因此它包含了2^(k-2)个节点。
最后一层的节点编号从2^(k-2)+1开始。
所以,编号最小的叶子节点的编号是2^(k-2)+1。
因此,填空题的正确答案是:
深度为k的完全二叉树,至少具有2^(k-1)个结点,若对这些结点按自上而下,从左到右次序给结点编号(从1开始),则编号最小的叶子结点的编号是 2 ^(k-2)+1。

17.带权有向图G用邻接矩阵A存储,则顶点i的入度为A中:( D )。

A. 第i行非的元素之和 B. 第i列非的元素之和
C. 第i行非且非0的元素个数 D. 第i列非且非0的元素个数

18. 有一个有序表为 {3,7,9,22,36,43,50,62,75,77,79,95,99},当折半查找值为82的结点时,( C )次比较后查找成功。

A.1 B.2 C.4 D.8

三、分析解答题

1. 假设二维数组A的每个元素是由8个字符组成的串(行下标的范围从1到6,列下标的范围从1到8)。已知A的基地址为1000,则

(1)存放A至少需要多少个字节?
(2)若按行优先存储,元素a[6][4]的首地址是多少?
(3)若按列优先存储,元素a[4][6]的首地址是多少?
(4)按列优先存储的元素a[4][6]的首地址与按行优先存储的哪个元素首地址相一致?

(1) 8x6x8=384
(2) 8*(58+3)+1000=1344
(3) 8
(5*6+3)+1000=1266
(4) (6-1)*6+(4-1)=(i-1)*8+(j-1) ,即8i+j=42 ,所以A[5][2]

2. 已知一棵二叉树的中序遍历和后序遍历序列分别为DBFEGAC和DFGEBCA,请画出此二叉树示意图,再画出其对应的二叉树二叉链表存储结构,并写出其先序遍历序列。

解题思路:
中序(左根右):DBFEGAC
后序(左右根):DFGEBCA
由于后序遍历最后一个节点A为根,所以A为这颗二叉树的根,在中序遍历序列以A为轴区分左右,
中序(左根右):DBFEG(左)A(根)C(右)
并且后序序列DFGEBCA的倒数第三(B)、倒数第二©分别来自左右,所以B和C分别为左右的根
在中序序列中 D(左)B(根)FEG (右) 以及C(根)
在后序序列还剩下FGE分别为左根右
到此,二叉树就画好了
根据二叉树可以知道先序序列为:ABDEFGC在这里插入图片描述

3. 甲乙两方出于保密使用Huffman编码进行电文通信。假设用于通信的电文由abcdefg7种字符组成,且它们在电文中出现的百分比依次为7%、16%、2%、9%、35%、11%、20%,请将百分比化作小数作为权值,按权值小者为左孩子构造Huffman树的规则,画出哈夫曼树,写出各字符的哈夫曼编码,并计算WPL。

在这里插入图片描述

4.无向图G的顶点集为V={A,B,C,D,E,F},边集为S={(A,B),(A,D),(A,E),(B,D),(D,E),(C,F)},画出该图的邻接矩阵存储结构,写出从A出发的一个广度优先搜索序列,并画出该图的连通分量。

在这里插入图片描述

5. 网通公司要在某镇周边的6个村庄铺设光纤网络,为使光纤造价最低,对几个村庄的连通情况进行了测量,如下图所示,单位为千米。请采用prim算法从顶点A开始构造最小生成树。画出最小生成树的最终形态,并写出在构造过程中辅助数组中各分量值的变化。

在这里插入图片描述
在这里插入图片描述

6. 序列(08,58,19,23,40,36,28,66,35,87,25,100)是不是堆?如果是,属于何类型?如果不是,请将它调整为交换记录最少的堆,说出其类型,并且输出其经过一趟堆排序后的元素序列。

在这里插入图片描述
因为观察整棵树基本上小的在堆顶大的在堆底,所以调整为交换记录最少的堆是小根堆,小根堆构造方法:从根开始与左右相比,三者最小的换成根

7.对于一个具有n个结点的单链表,在已知p所指结点后插入一个新结点的时间复杂度是?在给定值为x的结点后插入一个新结点的时间复杂度是?若删除p所指结点的后继结点,则应执行什么操作?需要分配较大空间,插入和删除不需要移动元素的线性表,采用哪种存储结构更合适?

O(1),O(n),p->next=p->next->next,静态链表

时间复杂度是 O(1)。这是因为我们已经有了一个指向特定节点的指针 p,我们只需要进行几个基本操作来插入新节点,例如更新指针。
时间复杂度是 O(n)。这是因为我们需要遍历整个链表来找到值为 x 的节点。在最坏的情况下,这个节点可能是链表的最后一个节点,或者根本不存在,这将需要遍历整个链表。
应执行的操作是 p->next = p->next->next;。这个操作会跳过 p 结点的后继结点,从而将其从链表中删除。
静态链表更合适。静态链表在数组中模拟链表的行为,它允许插入和删除操作不需要移动元素,因为元素是通过数组索引(类似于指针)连接的,而不是物理上连续的。

8.已知二叉树的中序序列为DGBAEHCF,后序序列为GDBHEFCA,画出这棵二叉树,写出二叉树的顺序存储结构,并将其转换为森林。

解题思路:
中序(左根右)序列为DGBAEHCF
后序(左右根)序列为GDBHEFCA
由于后序遍历最后一个节点A为根,所以A为这颗二叉树的根,在中序遍历序列以A为轴区分左右
中序:DGB(左)A(根)EHCF(右)
此时后序:GDB(左)HEFC(右)A(根)
后序序列的左的最后一个(B)为左的根,右的最后一个©为右的根
此时中序 DG(左)B(根) 和 EH(左)C(根)F(右)
看后序剩下元素能为什么关系(一定要含根),在中序找到唯一对应且正确的关系,把关系带回后序,注意:这只是判断根是谁,这会的左右不一定是左右(左右要在判完根之后在中序看)
中序:先D后G,关系不是左根就是根右,后序:先G后D,关系:左根,所以把关系左根带回后序进行判断,GD为左根,也就是根为D左为G,EF同理
在这里插入图片描述

9.已知某文档中只可能出现ABCDEFG七种字符,且它们的出现的次数依次为81,44,23,51,36,97,22,现要将这个文档通过网络传输出去,请按照传输码长最短的原则,建立一种二进制前缀编码方案,并求出码长。

在这里插入图片描述

10.如下所示的无向图是非连通图,请画出它的所有连通分量,以及生成森林,并写出从A点出发的深度优先遍历序列和广度优先遍历序列。

在这里插入图片描述

深度优先遍历序列:ACEGDBEFHI
广度优先遍历序列:ACDGEBEFHI在这里插入图片描述![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/4767adee471345b19740175b1aebf95d.png

11.假设想在8个城市之间修建高速路,施工人员经过测算,各个可能修建的道路和需要花费的代价如下图所示,请设计一种方案能够在最节省成本的前提下将8个城市连通起来,画出选取步骤,并写出最后方案的邻接矩阵。

在这里插入图片描述

答:在这里插入图片描述

注意:

普里姆算法(Prim’s Algorithm):
基本思想:普里姆算法从图中的一个顶点开始,逐步增加新的边和顶点,直到包含图中的所有顶点。
步骤:
选择一个起始顶点,将其加入最小生成树。
在已加入最小生成树的顶点和未加入最小生成树的顶点之间,寻找权值最小的边,并将这条边及其对应的顶点加入最小生成树。
重复步骤2,直到所有顶点都被加入最小生成树。
数据结构:通常使用优先队列(例如最小堆)来高效地找出当前最小的边。

克鲁斯卡尔算法(Kruskal’s Algorithm):
基本思想:克鲁斯卡尔算法按照边的权值顺序(从小到大)来选择边,并确保选择的边不会与已经选择的边形成环,直到形成最小生成树。
步骤:
将图中的所有边按权值从小到大排序。
初始化最小生成树为空。
按顺序遍历每条边,如果这条边加入最小生成树后不会形成环,则将其加入最小生成树。
重复步骤3,直到最小生成树中的边数等于顶点数减1。
数据结构:通常使用并查集数据结构来高效地检测加入一条边是否会产生环。
两种算法各有优缺点,适用于不同的情况。普里姆算法适合于稠密图,而克鲁斯卡尔算法适合于稀疏图。在具体实现时,可以根据图的特性选择合适的算法。

12.请采用快速排序法和直接插入排序法对该序列{60,56,86,23,16,46}进行升序排序,写出每种方法前三趟排序结果,并分析这两种排序方法的稳定性。

在这里插入图片描述

注意:

冒泡排序(Bubble Sort):
稳定性:稳定
原因:相同元素在排序过程中不会交换位置。
选择排序(Selection Sort):
稳定性:不稳定
原因:在选择最小(或最大)元素进行交换时,可能会改变相同元素的相对顺序。
插入排序(Insertion Sort):
稳定性:稳定
原因:插入元素时,总是保持原有顺序,不会改变相同元素的相对位置。
希尔排序(Shell Sort):
稳定性:不稳定
原因:由于跳跃式的比较和交换,可能会改变相同元素的相对顺序。
快速排序(Quick Sort):
稳定性:不稳定
原因:在划分过程中,可能会将相同元素交换到不同分区。
归并排序(Merge Sort):
稳定性:稳定
原因:合并过程中,总是先复制左半部分的元素,再复制右半部分的元素,保持原有顺序。
堆排序(Heap Sort):
稳定性:不稳定
原因:在构建堆和调整堆的过程中,可能会改变相同元素的相对顺序。
基数排序(Radix Sort):
稳定性:稳定
原因:在按位排序时,总是保持原有顺序。
计数排序(Counting Sort):
稳定性:稳定
原因:计数过程中,相同元素的相对顺序被保留。

13.现有矩阵A如下图所示,若A[2][3]地址为2018,元素值是“1”,每个元素占24个存储单元,则数组A在什么位置存放?假设A为稀疏矩阵,请给出它的三元组表。

在这里插入图片描述

答:2018-(2*4+3)*24= 2018 - (11 * 24) = 2018 - 264 = 1754

在这里插入图片描述

14.已知某二叉树如下所示,试画出它转换成森林,并请写出该二叉树的先序、中序、后序遍历的序列。

在这里插入图片描述
二叉树变成森林方法:
1.将右节点断掉:对于二叉树中的每个节点,将其与右子节点的连接断开。这样,每个节点只保留其左子节点,如果有的话。
2.如果某个节点原本有一个左子节点,而该左子节点又有一个右子节点,那么在断开所有右子节点连接之后,我们需要将原本的父节点与原本左子节点的右子节点连接起来。

在这里插入图片描述

15.军事演习中蓝军要发送由abcdef 六种字符组成的密文(其频率为44,11,25,30,5,7),要求使用二进制前缀编码传送,设计一种编码方式可以使报文总长最短,给出每个字符的码值并求出编码的总长度。

在这里插入图片描述

16. 如下所示的有向图,回答下面问题:

(1)该图是强连通的吗?若不是,给出强连通分量。
(2)请给出图的邻接矩阵和邻接表表示。

在这里插入图片描述

在这里插入图片描述

17.吉林市松花湖上有7座小岛11条航线,旅行团从码头V0出发想要游遍所有小岛,请提出2种遍历方案并给出每个方案的游岛顺序。若想花费最少代价规划一条航线,请给出航线的生成过程。

在这里插入图片描述

在这里插入图片描述

18.设散列表的长度为8,散列函数H(k)=k mod 7,初始记录关键字序列为(25,31,8,27,13,68),要求分别计算出用线性探测法和链地址法作为解决冲突方法的平均查找长度。

ASL1=7/6,ASL2=4/3

四、算法设计题

1. 学校办公设备数据按型号不同存放在顺序表L中,现有某个型号的设备全部报废,且该型号元素在顺序表中处于第i(1≤i≤n)个位置,请完成以下删除顺序表第i个元素的算法。

typedef struct Status ListDelete_Sq ( &L, int i)
{ {if ( i<1|| i>L.length) return ERROR;
Citems *elem; p=& ( ) ;//p指向第i个元素
//设Citems为设备数据类型 q=L.elem + ;//q指向表尾
int length ; for( ; p<=q; ++p )
int listsize; *(p-1)=*p;//元素前移
} SqList; ;
return OK;

typedef struct {Citems *elem;       // 指向顺序表元素的指针int length;         // 顺序表当前长度int listsize;       // 顺序表分配的存储容量
} SqList;// 设备数据类型Citems的定义应在此处或之前给出// 删除顺序表第i个元素的函数
Status ListDelete_Sq(SqList *L, int i) {if (i < 1 || i > L->length) return ERROR; // i值不合法Citems *p = &(L->elem[i - 1]); // p指向第i个元素,注意数组下标从0开始,所以是i-1Citems *q = L->elem + L->length - 1; // q指向表尾for (++p; p <= q; ++p) {*(p - 1) = *p; // 元素前移}L->length--; // 顺序表长度减1return OK; // 删除成功
}

2. 采用二叉链表结构存储的二叉树,其指针域lchild和rchild分别指向当前结点的左右子树,请在空格上填写适当语句,实现在二叉链表存储结构上计算二叉树叶子结点个数的算法。

CountLeaf (BiTree T){
if ( T ) {
  if ( )// T指向叶子结点
  return ;
   else
return ;
    }
else return ;
} // CountLeaf

CountLeaf (BiTree T){if ( T ) { if (T->lchild == NULL && T->rchild == NULL) // T指向叶子结点return 1;     else  return CountLeaf(T->lchild) + CountLeaf(T->rchild); } else  return 0;
} // CountLeaf

3. 某文具超市为提高检索效率及方便插入删除商品信息,将每种文具信息以货号为主关键字存储在二叉排序树中。设每种文具商品(RedType为文具类型名)包含货号(Sid)、商品名(Sname)、单价(Sprice)及库存数量(Snum)等信息。

(1)根据给定的商品描述为商品定义二叉排序树类型(BiTree);
(2)现有某种商品已售完,指针p已经指向二叉排序树中表示该种商品的结点,请编写算法删除该结点并重接它的左右子树。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>// 商品信息结构体
typedef struct {char Sid[20];        // 货号char Sname[50];      // 商品名float Sprice;        // 单价int Snum;            // 库存数量
} RedType;// 二叉排序树的结点结构体
typedef struct BiTNode {RedType data;        // 数据域struct BiTNode *lchild, *rchild; // 左右孩子指针
} BiTNode, *BiTree;// (1)商品信息结构体和二叉排序树结点类型已经定义// (2)删除二叉排序树中指定结点p的算法
int DeleteNode(BiTree *T, BiTNode *p) {BiTNode *q, *s;// 情况1:p结点为叶子结点if (p->lchild == NULL && p->rchild == NULL) {q = p;}// 情况2:p结点只有左子树else if (p->lchild != NULL && p->rchild == NULL) {q = p;p = p->lchild;}// 情况3:p结点只有右子树else if (p->lchild == NULL && p->rchild != NULL) {q = p;p = p->rchild;}// 情况4:p结点有左右子树else {// 找到p的中序后继,即右子树中的最小元素q = p;s = p->rchild;while (s->lchild != NULL) {q = s;s = s->lchild;}// 将s的数据复制到p中p->data = s->data;// 修改p指针指向sp = s;}// 将p指向的结点替换为q指向的结点if (q != *T) {if (q == q->parent->lchild)q->parent->lchild = p;elseq->parent->rchild = p;} else {*T = p;}// 释放q指向的结点free(q);return 1;
}// 注意:上述代码没有维护父指针,实际使用时可能需要调整。

4.工商银行江北支行为到达该行办理业务的储户提供自动排队服务,储户要办理业务需到叫号机前领取号码,等待叫号后到窗口办理业务。叫号机允许同时排队等待的最大人数为100人,按照先来先服务的原则,请在空格上填写适当的语句,完成窗口叫号业务的算法。

#define MAXQAIZE ①__________;
typedef struct LNode{ Status DeQueue_Sq (SqQueue &Q, int &e){ {
int *base; if (②___________= = ③____________) return ERROR;
int front; e =④_________________;
int rear; Q.front = ⑤__________________________ ;
}SqQueue; return OK;
}// DeQueue_Sq

#define MAXQAIZE 100; // ① 最大排队人数为100typedef struct LNode {// ... 其他结构体成员定义 ...
} LNode;typedef struct {int *base;       // 动态分配数组空间int front;       // 队头指针int rear;        // 队尾指针
} SqQueue;// 出队操作
Status DeQueue_Sq(SqQueue &Q, int &e) {if (Q.front == Q.rear)  // ② 队头指针等于队尾指针时队列为空return ERROR;       // ③ 返回ERROR表示队列为空,无法出队e = Q.base[Q.front];    // ④ 获取队头元素Q.front = (Q.front + 1) % MAXQAIZE; // ⑤ 队头指针后移,并循环使用队列空间return OK;              // 出队成功
}

5.请在空格上填写适当的语句,完成二叉树的层次遍历算法。

typedef struct BiTNode { Status LevelOrderTraverse ( BiTree T , Status (*Visit) (TElemType e))
TElemType data; { InitQueue (Q); ①__________________;
struct BiTNode *lchild; while(②_________________) {
struct BiTNode *rchild; ③__________________
}BiTNode,*BiTree; if (!p) return ERROR;
if (!Visit(p->data)) return ERROR;
if (p->lchild) ④_________________ ;
if (p->lchild) ⑤_________________ ;}
return OK;
}

typedef struct BiTNode {TElemType data;struct BiTNode *lchild;struct BiTNode *rchild;
} BiTNode, *BiTree;Status LevelOrderTraverse(BiTree T, Status (*Visit)(TElemType e)) {LinkQueue Q; // 假设LinkQueue是队列类型,这里需要定义或声明队列结构体BiTNode *p;InitQueue(Q);  // ① 初始化队列if (T) EnQueue(Q, T); // 如果树不为空,将根节点入队while (!QueueEmpty(Q)) { // ② 当队列不为空时继续循环DeQueue(Q, p); // 出队,将队头元素赋值给pif (!p) return ERROR;if (!Visit(p->data)) return ERROR; // 访问当前节点if (p->lchild) EnQueue(Q, p->lchild); // ④ 如果左孩子存在,左孩子入队if (p->rchild) EnQueue(Q, p->rchild); // ⑤ 如果右孩子存在,右孩子入队}return OK;
}

6.某网店有m种商品,每种商品的价格为h元,库存量为n个,销量为s个,各种商品的信息已存储在一个按商品名ASCII码值由高到低排列的顺序表中,现店主想要了解商品的库存量情况,随机输入想查看的商品名称,请你用折半查找法帮助店主找到该商品的库存量。

1)定义商品的顺序表存储结构。
2)写出折半查找输出库存量的算法。

#include <stdio.h>
#include <string.h>// 定义商品信息结构体
typedef struct {char name[50];  // 商品名称int price;      // 商品价格(单位:元)int stock;      // 商品库存量int sales;      // 商品销量
} Product;// 定义顺序表结构体
typedef struct {Product *array; // 指向动态分配的数组int length;     // 顺序表当前长度
} SeqList;// 折半查找算法,返回商品的库存量
int BinarySearch(SeqList list, char *target) {int low = 0;                // 查找区间的下界int high = list.length - 1; // 查找区间的上界int mid;int compareResult;while (low <= high) {mid = (low + high) / 2; // 计算中间位置compareResult = strcmp(list.array[mid].name, target); // 比较中间位置的商品名称和目标商品名称if (compareResult == 0) {// 找到目标商品,返回库存量return list.array[mid].stock;} else if (compareResult < 0) {// 目标商品在右侧区间low = mid + 1;} else {// 目标商品在左侧区间high = mid - 1;}}// 未找到目标商品,返回-1表示失败return -1;
}

7.计算机学院17级学生接到维护通讯录系统的任务,由于文档丢失仅发现删除功能的部分代码,通过分析以下代码将这一函数的算法补充完整。

int AdressListInsert(AdressLinkList L,int i,ElemType e){
LNode *p,*s;int j;
p=L;j=0;
while((p!=NULL)&&(1) ){
p=p->next;j++;
}
if((2) ||j>i-1) return ERROR;
s= (3) (sizeof(LNode));
s->data=e;
(4) ;
(5) ;
return OK;
}/AdressListInsert/

#include <stdlib.h> // 为了使用malloc函数#define ERROR -1
#define OK 1typedef struct LNode {ElemType data; // 假设ElemType已经被定义struct LNode *next;
} LNode, *AdressLinkList;int AdressListInsert(AdressLinkList L, int i, ElemType e) {LNode *p, *s;int j;p = L;j = 0;// (1) 应该是循环的条件,用于找到第i-1个节点while ((p != NULL) && (j < i - 1)) { 				p = p->next;j++;}// (2) 应该是检查是否找到了第i-1个节点if ((p == NULL) || (j > i - 1)) return ERROR;// (3) 分配新节点s = (LNode *)malloc(sizeof(LNode));  if (s == NULL) { // 检查内存分配是否成功return ERROR;}s->data = e;// (4) 将新节点插入到链表中s->next = p->next;                // (5) 将前一个节点的next指向新节点p->next = s;                        return OK;
}/*AdressListInsert*/

以下是每个步骤的解释:
(1) 条件j < i - 1确保我们找到第i-1个节点,因为我们需要在第i个位置插入新节点。
(2) 检查是否成功找到了第i-1个节点,如果p为NULL或者j大于i-1,则返回错误。
(3) 使用malloc分配一个新节点s。
(4) 将新节点s的next指针指向当前第i个节点(即p->next)。
(5) 将第i-1个节点的next指针指向新节点s,完成插入操作。
请注意,这段代码假设ElemType已经被定义,且ERROR和OK是错误和成功状态的宏定义。

8. 在构成哈夫曼树之后,为求编码需从叶子结点出发逆向走一条从叶子到根的路径以求的每个字符的Huffman编码,请将这一段算法补充完整。

HC=(HuffmanCode)malloc((n+1)sizeof(char))
cd = (char )malloc(nsizeof(char));
cd[n-1] =”\0”;
for (i=1; (1) ++i) { // 逐个字符求赫夫曼编码
start = n-1;
for (c=i, f=HT[i].parent; f!=0; c=f, (2) )
if (HT[f].lchild==c) (3) ;
else cd[–start] = ‘1’;
HC[i] = (4) ; // 为第i个字符编码分配空间
strcpy(HC[i], &cd[start]);
}
(5) ; // 释放工作空间

HC = (HuffmanCode)malloc((n+1)*sizeof(char*)); // 分配n个字符编码的头指针向量
cd = (char *)malloc(n*sizeof(char));           // 分配临时存放编码的工作空间
cd[n-1] = '\0';                                // 编码结束符for (i = 1; i <= m; ++i) {                     // 逐个字符求赫夫曼编码start = n-1;                                // start开始时指向编码数组最后一个位置for (c = i, f = HT[i].parent; f != 0; c = f, f = HT[f].parent) { // 从叶子到根逆向求编码if (HT[f].lchild == c) cd[--start] = '0'; // 如果是左孩子,则编码为'0'else cd[--start] = '1';                  // 如果是右孩子,则编码为'1'}HC[i] = (char *)malloc((n-start)*sizeof(char)); // 为第i个字符编码分配空间strcpy(HC[i], &cd[start]);                  // 从cd复制编码到HC
}free(cd);                                       // 释放工作空间

9.吉林乌拉手工品商城有num种商品,id是商品的标识号,每种商品的价格为price元,库存量为stocknum,销量为salenum个,各种商品的信息存储在顺序表中,现商城经理想要了解商品的销量情况(由高到低排序)。

1)定义商品的顺序表存储结构。
2)写出采用直接插入排序法输出销量的算法。

#include <stdio.h>#define MAX_NUM 100  // 假设商城最多有100种商品// 商品的顺序表存储结构
typedef struct {int id;         // 商品的标识号float price;    // 商品的价格int stocknum;   // 商品的库存量int salenum;    // 商品的销量
} Commodity;// 商品的顺序表
typedef struct {Commodity goods[MAX_NUM];  // 商品数组int length;                // 当前商品数量
} SeqList;
// 直接插入排序,按照销量由高到低排序
void InsertSort(SeqList *list) {int i, j;Commodity temp;for (i = 1; i < list->length; i++) {temp = list->goods[i];// 从已排序序列的最后一个元素开始,向前比较for (j = i; j > 0 && list->goods[j - 1].salenum < temp.salenum; j--) {list->goods[j] = list->goods[j - 1];  // 如果销量小于待插入的商品,则向后移动}list->goods[j] = temp;  // 插入到正确的位置}
}// 打印商品销量
void PrintSales(SeqList *list) {for (int i = 0; i < list->length; i++) {printf("商品ID: %d, 销量: %d\n", list->goods[i].id, list->goods[i].salenum);}
}// 主函数,用于测试
int main() {SeqList list = {.goods = {{1, 99.9, 100, 150},{2, 199.9, 50, 200},{3, 299.9, 30, 300},// ... 其他商品信息},.length = 3  // 假设有3种商品};// 排序前打印销量printf("排序前销量:\n");PrintSales(&list);// 对商品销量进行排序InsertSort(&list);// 排序后打印销量printf("\n排序后销量:\n");PrintSales(&list);return 0;
}

相关文章:

【数据结构Ⅰ复习题】

如有错误欢迎指正&#xff0c;题目根据教材----------严蔚敏数据结构&#xff08;c语言版 第2版&#xff09;人民邮电电子版 数据结构Ⅰ复习题 一、填空题1&#xff0e;算法应该具备的5个重要特性有___有穷性___、确定性、可行性、输入和输出。2&#xff0e;非空单链表L中*p是头…...

经验证:将数据从索尼传输到Android的 4 种方法

概括 像Android Galaxy S20 这样的新型Android智能手机很酷&#xff0c;但除了将数据从索尼传输到Android之外。众所周知&#xff0c;旧的索尼手机上存储着大量的文件&#xff0c;因此将数据从旧的索尼手机传输到新的Android手机非常重要。为了解决这个问题&#xff0c;我们做…...

服务器端请求伪造之基本介绍

一.服务器端请求伪造漏洞基础 1.客户端请求 客户端请求指的是由客户端设备&#xff08;如个人计算机、智能手机、平板电脑等&#xff09;或软件&#xff08;浏览器、各种APP&#xff09;发出的请求&#xff0c;以获取指定的网页、图片、视频或其他资源。比如当用户在浏览器中输…...

Java反射详解(三)

上一篇博客&#xff1a;Java反射详解&#xff08;二&#xff09; 写在前面&#xff1a;大家好&#xff01;我是晴空๓。如果博客中有不足或者的错误的地方欢迎在评论区或者私信我指正&#xff0c;感谢大家的不吝赐教。我的唯一博客更新地址是&#xff1a;https://ac-fun.blog.c…...

HTML——59. maxlength和disabled属性

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>maxlength和disabled属性</title></head><body><!--input元素的type属性&#xff1a;(必须要有)1.指定输入内容的类型2.默认为text,单行文本框--> …...

Java中的函数式接口详解(一)

1. 函数式接口 1.1. 定义 函数式接口&#xff08;Function Interface&#xff09;就是一个有且仅有一个抽象方法&#xff0c;但是可以有多个非抽象方法的接口。 函数式接口又称为&#xff1a;功能接口。 功能接口为 Lambda 表达式和方法引用(用双冒号 ::来进行方法调用)提供…...

Quo Vadis, Anomaly Detection? LLMs and VLMs in the Spotlight 论文阅读

文章信息&#xff1a; 原文链接&#xff1a;https://arxiv.org/abs/2412.18298 Abstract 视频异常检测&#xff08;VAD&#xff09;通过整合大语言模型&#xff08;LLMs&#xff09;和视觉语言模型&#xff08;VLMs&#xff09;取得了显著进展&#xff0c;解决了动态开放世界…...

redis的学习(二)

4 哈希表 哈希类型中的映射关系通常称为field-value&#xff0c;⽤于区分Redis整体的键值对&#xff08;key-value&#xff09;&#xff0c; 注意这⾥的value是指field对应的值&#xff0c;不是键&#xff08;key&#xff09;对应的值&#xff0c; 4.1 操作命令 hset&#xff…...

简单使用linux

1.1 Linux的组成 Linux 内核&#xff1a;内核是系统的核心&#xff0c;是运行程序和管理 像磁盘和打印机等硬件设备的核心程序。 文件系统 : 文件存放在磁盘等存储设备上的组织方法。 Linux 能支持多种目前浒的文件系统&#xff0c;如 ext4 、 FAT 、 VFAT 、 ISO9660 、 NF…...

springboot541党员学习交流平台(论文+源码)_kaic

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统党员学习交流平台信息管理难度大&#xff0c;容错率低&am…...

心力衰竭相关临床记录数据分析开发技术概述

心力衰竭相关临床记录数据分析开发技术概述 心力衰竭临床记录数据分析的开发涉及多种技术&#xff0c;包括数据采集、处理、建模和可视化等方面。以下是从技术角度对整个开发流程的概述&#xff1a; 数据采集技术 1.1 数据来源 公开数据集&#xff1a;如 UCI 数据存储库、Clin…...

SpringMVC(六)拦截器

目录 1.什么是拦截器 2.拦截器和过滤器有哪些区别 3.拦截器方法 4.单个拦截器的执行流程 5.使用拦截器实现用户登录权限验证&#xff08;实例&#xff09; 1.先在html目录下写一个login.html文件 2.在controller包下写一个LoginController文件 3.加拦截器 1.创建一个conf…...

将simpletex 识别的公式 复制到ppt 中

1&#xff09;点击 复制MathML(word) 2&#xff09;右击粘贴到任意word 中 3&#xff09;将word公式粘到 office (2019) 的ppt 中 线上识别链接&#xff1a;SimpleTex - Snip & Get!...

vs 2022 中xml 粘贴为Class 中,序列化出来的xml 的使用

上图是visual studio 2022 中使用的粘贴功能的菜单位置 在生成的xml 中&#xff0c;有些是类似如下类型的 [System.Serializable] [System.Xml.Serialization.XmlType] public class Item {private bool isVisibleField;private bool isVisibleFieldSpecified;[System.Xml.Se…...

短视频平台的视频水印怎么去除?

当你看到某个短视频&#xff0c;觉得内容非常有价值&#xff0c;想要个人收藏以便日后学习或回顾&#xff0c;但发现短视频平台无法直接下载且带有水印时&#xff0c;以下提供的几种方法将帮助你轻松去除水印&#xff0c;获取高清无水印的视频内容。 方法一&#xff1a;使用第…...

《Vue3实战教程》34:Vue3状态管理

如果您有疑问&#xff0c;请观看视频教程《Vue3实战教程》 状态管理​ 什么是状态管理&#xff1f;​ 理论上来说&#xff0c;每一个 Vue 组件实例都已经在“管理”它自己的响应式状态了。我们以一个简单的计数器组件为例&#xff1a; vue <script setup> import { r…...

AI大模型系列之七:Transformer架构讲解

目录 Transformer网络是什么&#xff1f; 输入模块结构&#xff1a; 编码器模块结构&#xff1a; 解码器模块: 输出模块结构&#xff1a; Transformer 具体是如何工作的&#xff1f; Transformer核心思想是什么&#xff1f; Transformer的代码架构 自注意力机制是什么…...

每天五分钟机器学习:凸集

本文重点 在SVM中,目标函数是一个凸函数,约束集合是一个凸集。因此,SVM问题可以转化为一个凸规划问题来求解。这使得SVM在实际应用中具有较高的计算效率和准确性。 凸集的定义 凸集是指一个集合中的任意两点之间的线段都完全包含在这个集合中。换句话说,给定集合C中的两…...

【智能算法】改进蚁狮优化算法【matlab】

目录 1 主要内容 2 部分程序 3 程序结果 下载链接 1 主要内容 该程序方法复现《改进蚁狮算法的无线传感器网络覆盖优化》两种改进算法模型&#xff0c;即原始ALO算法的基础上添加了两种改进策略&#xff1a; - 改进1&#xff1a;将原先的间断性边界收缩因子变为连续性边界…...

【Python】闭包

闭包&#xff08;Closure&#xff09;是指一个函数记住了并可以访问它的词法作用域&#xff08;lexical scope&#xff09;&#xff0c;即使这个函数在词法作用域之外执行。 闭包其实就是延伸了作用域的函数&#xff0c;包括被延伸函数主体中引用的非全局变量和局部变量。这些…...

Python跨年烟花

目录 系列文章 写在前面 技术需求 完整代码 下载代码 代码分析 1. 程序初始化与显示设置 2. 烟花类 (Firework) 3. 粒子类 (Particle) 4. 痕迹类 (Trail) 5. 烟花更新与显示 6. 主函数 (fire) 7. 游戏循环 8. 总结 注意事项 写在后面 系列文章 序号直达链接爱…...

QT------------其他工具软件和技术

实现思路 多语言界面程序设计&#xff1a; 使用 QTranslator 类为 QT 应用程序提供多语言支持。将不同语言的翻译文件&#xff08;.qm 文件&#xff09;添加到应用程序中&#xff0c;根据用户的语言设置动态加载相应的翻译文件。 QT 样式表&#xff08;QSS&#xff09;&#x…...

数据结构9.3 - 文件基础(C++)

目录 1 打开文件字符读写关闭文件 上图源自&#xff1a;https://blog.csdn.net/LG1259156776/article/details/47035583 1 打开文件 法 1法 2ofstream file(path);ofstream file;file.open(path); #include<bits/stdc.h> using namespace std;int main() {char path[]…...

javaEE-文件操作和IO-文件

目录 一.什么是文件 1.文件就是硬盘(磁盘)上的文件。 2.计算机中存储数据的设备&#xff1a; 3.硬盘的物理特征 4.树型结构组织和⽬录 5.文件路径 文件路径有两种表示方式&#xff1a; 6.文件的分类 二、java中文件系统的操作 1.File类中的属性&#xff1a; 2.构造方…...

富芮坤FR800X系列之软件开发工具链(如IDE、编译器、调试器等)

文章目录 一、IDE&#xff08;集成开发环境&#xff09;二、编译器三、调试器四、其他辅助工具五、小结 FR800x系列作为一款低功耗蓝牙芯片&#xff0c;其软件开发工具链对于开发者来说至关重要。以下是对FR800x软件开发工具链的详细介绍&#xff0c;包括IDE&#xff08;集成开…...

微服务-Eureka

Eureka的作用 使用RestTemplate完成远程调用需要手动的生命被调用者的ip和端口&#xff0c;从而能够发起http请求&#xff0c;但是如果有很多个实例也更加不能有效的处理&#xff0c;而且我们又该如何知道这些实例是否健康呢。所以就有了很多的注册中心比如Eureka、Nacos等等。…...

Elasticsearch: 高级搜索

一、match_all匹配所有文档 1、介绍&#xff1a; match_all查询是一个特殊的查询类型&#xff0c;它用于匹配索引中的所有文档&#xff0c;而不考虑任何特定的查询条件。 基本语法&#xff1a; GET /<your-index-name>/_search {"query": {"match_all…...

项目优化之策略模式

目录 策略模式基本概念 策略模式的应用场景 实际项目中具体应用 项目背景&#xff1a; 策略模式解决方案&#xff1a; 计费模块策略模式简要代码 策略模式基本概念 策略模式(Strategy Pattern) 是一种行为型设计模式&#xff0c;把算法的使用放到环境类中&#xff0c;而算…...

HTML——57. type和name属性

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>type和name属性</title></head><body><!--1.input元素是最常用的表单控件--><!--2.input元素不仅可以在form标签内使用也可以在form标签外使用-…...

LabVIEW 实现自动对焦的开发

自动对焦&#xff08;Autofocus, AF&#xff09;技术是通过分析图像或传感器信号&#xff0c;动态调整焦点位置以实现清晰成像或高精度定位的过程。在LabVIEW中&#xff0c;可以通过集成信号采集、数据处理、控制算法和硬件接口模块&#xff0c;实现多种自动对焦方法&#xff0…...

Ruby 数据类型

Ruby 数据类型 Ruby&#xff0c;作为一种动态、开放源代码的编程语言&#xff0c;以其简洁明了的语法和强大的功能而闻名。在Ruby中&#xff0c;数据类型是编程的核心组成部分&#xff0c;它们决定了变量可以存储的信息种类以及可以对这些信息执行的操作。Ruby是一种类型安全的…...

【MySQL】--- 表的CRUD

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏&#xff1a; MySQL CRUD : Create(创建), Retrieve(读取)&#xff0c;Update(更新)&#xff0c;Delete&#xff08;删除)。 &#x1f3e0; 插入C &#x1f9f7; 基本…...

算法13、基础二分查找的应用(木根切割等)

&#x1f330;1、方程求根 晴问算法 1️⃣即求f(x) x^3 x^2 x - a 0的根&#xff0c;又因为要求精确到0.01&#xff0c;所以eps至少设置为1e-3或者更小&#xff1b; 2️⃣求导得3x^2 2x 1 2x^2 x^2 2x 1 2x^2 (x1)^2 > 0&#xff0c; 所以f(x)是单调递增函数&…...

hive on spark报错解决(基于hive-3.1.3和spark-2.3.0)

相关配置可参考&#xff1a;https://blog.csdn.net/weixin_46389691/article/details/134126254 原作者&#xff1a;月亮给我抄代码 他写的很详细 ERROR : Job failed with java.lang.IllegalAccessError: tried to access method com.google.common.base.Stopwatch.<init&…...

CentOS — 目录管理

文章目录 一、目录结构二、切换目录三、查看目录四、创建目录五、复制目录六、剪切目录七、删除目录 目录也是一种文件。 蓝色目录&#xff0c;绿色可执行文件&#xff0c;红色压缩文件&#xff0c;浅蓝色链接文件&#xff0c;灰色其它文件&#xff0c; 点开头的是隐藏文件&…...

学AI编程的Prompt工程,豆包Marscode

学习链接&#xff1a;Datawhale-AI活动https://www.datawhale.cn/activity/116/23/95?rankingPage1 目录 一、如何使用 二、编写游戏 2.1 创意输入与代码生成 2.2 项目初始化与应用 2.3 创意优化与迭代 三、效果展示 一、如何使用 建议在在vscode上安装marscode插件&a…...

基于微信小程序的面部动作检测系统

引言 本技术文档旨在详细阐述一个基于微信小程序的面部动作检测系统的技术路线、实现方法及关键技术框架。系统的核心功能包括检测用户的左右转头、眨眼和张嘴动作&#xff0c;并根据检测结果逐步引导用户完成任务。为确保系统的安全性和准确性&#xff0c;特别是防止用户通过…...

Java网络套接字

在Java的开发中&#xff0c;有一个很重要&#xff01;很重要&#xff01;很重要&#xff01;的东西&#xff0c;叫做网络套接字&#xff0c;它被广泛的用来二次开发服务&#xff0c;比如大数据中台的服务链路调用等。 它的实现原理是依靠三次握手来完成通信的建立&#xff0c;…...

mapbox基础,测面功能实现

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.2 ☘️Turf 框架二、🍀测面功能实现1. ☘️实现思路2. ☘️代码样例一、🍀…...

如何通过设置失效时间清除本地存储的数据

一、使用localStorage和时间戳&#xff08;JavaScript&#xff09; 1. 原理 localStorage是浏览器提供的一种在本地存储数据的方式&#xff0c;数据没有过期时间限制。但是可以通过自己记录时间戳来模拟数据过期的功能。在存储数据时&#xff0c;同时存储一个时间戳&#xff…...

【QT】找不到qwt_plot.h

系统环境&#xff1a; linux 20.04 qt 6.7.2 cmake 3.22 原因&#xff1a; Qwt没有正式的FindQwt.cmake&#xff0c;Qwt也没有提供QwtConfig.cmake。而且cmake不支持qmake的配置特性&#xff0c;也不支持读取mkspecs (.prf)文件。也就是说cmake构建的qt项目不可用qwt。 解决步…...

程序员如何培养技术领导力?

文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons&#xff1a;JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram&#xff0c;自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 &#xff1f; 5 IDEA必装的插件&…...

C# 设计模式(创建型模式):原型模式

C# 设计模式&#xff08;创建型模式&#xff09;&#xff1a;原型模式 引言 在面向对象的设计中&#xff0c;创建型模式关注于对象创建的方式和复杂度。原型模式&#xff08;Prototype Pattern&#xff09;是其中一种创建型设计模式&#xff0c;它允许通过复制现有的实例来创…...

Python自学 - 函数初步(内置函数、模块函数、自定义函数)

1 Python自学 - 函数初步(内置函数、模块函数、自定义函数) 1.1 内置函数 几乎所有的编程都会提供一些内置函数&#xff0c;以便完成一些最基本的任务&#xff0c;Python提供了丰富的内置函数&#xff0c;熟悉内置函数可以给工作带来极大便利。   Python官方的内置函数介绍网…...

Mono里运行C#脚本21—mono_image_init_name_cache

前面分析了怎么样加载mscorlib.dll文件,然后把文件数据读取到内存。 接着下来,就会遇到加载整个C#的类型系统,比如System. Object,大体类型如下图所示: 在对CIL编译之前,需要把这些类型全部加载到内存里,以便快捷地访问它们。 mono_image_init_name_cache函数就是完成…...

MySQL中distinct和group by去重的区别

MySQL中distinct和group by去重的区别 在MySQL中&#xff0c;我们经常需要对查询结果进行去重&#xff0c;而DISTINCT和GROUP BY是实现这一功能的两种常见方法。虽然它们在很多情况下可以互换使用&#xff0c;但它们之间还是存在一些差异的。接下来&#xff0c;我们将通过创建测…...

快速上手大模型的对话生成

本项目使用0.5B小模型&#xff0c;结构和大模型别无二致&#xff0c;以方便在如CPU设备上快速学习和上手大模型的对话上传 #mermaid-svg-Z86hUiQZ0hg9BVji {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-Z86hUiQZ0h…...

SpringCloud(一)--SpringCloud简介

一. 引言 ​ 在微服务架构日益盛行的今天&#xff0c;Spring Cloud凭借其简单易用、功能强大的特性&#xff0c;成为了众多开发者的首选。本文仅为学习所用&#xff0c;联系侵删。 二. SpringCloud概述 2.1 定义 ​ Spring Cloud是一系列框架的有序集合&#xff0c;它巧妙地…...

常见的 Redis 面试题

1. Redis 是什么&#xff1f;它解决了哪些问题&#xff1f; Redis 是一个开源的内存数据结构存储系统&#xff0c;可以用作数据库、缓存和消息中间件。它主要用于解耦应用程序的不同组件或服务&#xff0c;支持高吞吐量和低延迟的消息传递。解决了系统之间的同步调用导致的性能…...

面试准备备备备

职业技能 放到简历的黄金位置&#xff08;HR刷选简历的重要参考&#xff09; 基本准则&#xff1a;写在简历上的必须能聊&#xff0c;不然就别写 参考公式&#xff1a;职业技能 必要技术 其他技术 针对性的引导面试官&#xff08;让他问一些你想让他问的&#xff09; 寻找合…...