【数据结构导论】自考笔试题:伪代码练习题汇总 1

目录

一、开源项目推荐

二、线性表的基本运算在单链表上的实现

(1)初始化

(2)插入 p 指向的新结点的操作 

(3)删除 *p 节点

三、循环链表 

(1)在单链表中

(2)在带有头结点的循环链表中

(3)只有尾指针 rear

四、双向循环链表

(1)每个结点有两个指针

(2)带头结点的双向循环链表 L 为空的条件

(3)p 指向待删结点,删除 *p 的操作

(4)p 所指结点的后面插入一个结点 *t 的操作 

五、栈的顺序实现 

(1)下溢 / 上溢

(2)进栈

(3)出栈

(4)取栈顶元素

六、栈的链接实现

七、二叉树的性质

八、二叉树遍历的递归实现

九、图的遍历

十、4 种排序方法 



一、开源项目推荐

【我的项目】数据结构导论_伪代码练习题icon-default.png?t=N7T8https://gitcode.com/qq_39720249/data_structure/overview【项目说明】

  • 数据结构导论:自学考试笔试题中关于伪代码的练习题集合


二、线性表的基本运算在单链表上的实现

(1)初始化

① 假设单链表的类型定义如下 

typedef struct node
{ DataType data; struct node *next;
}node ,*LinkList;

算法 InitiateLinkList()实现单链表的初始化

LinkList InitiateLinkList( )   // 建立一个空的单链表
{ LinkList head;                 // 头指针head=malloc(sizeof(node));  // 动态构建一个结点,并定义为头结点head->next=NULL; return head;
}  
// 空表由一个头指针 head 和一个头结点组成。
// head 指向新创建的结点,即头结点。
// 一个空单链表仅有一个头结点,它的指针域为 NULL。

② 在带头结点的单链表 L 中,第一个数据元素结点的指针为 L->next。

③ 设有一个单链表,若结点的指针域为 next,则指针 p 所指的结点为最后一个结点的条件是 p->next==NULL。工作指针 p->next 为 NULL 时,说明已经走到了表的尾部,这时已完成对所有结点的访问。


(2)插入 p 指向的新结点的操作 

① 设 r 指向单链表的最后一个结点,要在最一个结点之后插入 s 所指的结点,需执行的语句序列是:
r->next=s;r=s;r->next=NULL
② 将一个由指针 q 指向的结点插在单链表中由指针 p 所指向的结点之后的操作是:
q->next=p->next;p->next=q;

(3)删除 *p 节点

在一个单链表中,已知指针 q 指向指针 p 所指结点的前驱结点,则删除 *p 结点的操作语句是:

q->next=p->next


三、循环链表 

(1)在单链表中

在单链表中,如果让最后一个结点的指针域指向第一个结点可以构成循环链表:
① 只有头指针 head:
  1. 判断 P 所指结点为尾结点的条件:p->next==head;
  2. 判断指针 P 所指结点为首结点的条件: p==rear->next->next;
  3. 判断链表是否为空的条件:head->next==head。
② 有头指针 head 和尾指针 rear(说明:rear->next 指向头结点 head)。

(2)在带有头结点的循环链表中

在带有头结点的循环链表中,尾指针为 rear,判断指针 P 所指结点为首结点的条件是:

p==rear->next->next


(3)只有尾指针 rear

① 删除表首结点的操作可表示为:
p=rear->next->next;
rear->next->next=p->next;
free(p);
② 已知尾指针的单向循环链表在第一个结点后面插入一个新结点的时间复杂度为 O(1)。


四、双向循环链表

(1)每个结点有两个指针

  1. next 指针指向直接后继结点
  2. prior 指针指向直接前驱结点

(2)带头结点的双向循环链表 L 为空的条件

(L->next==L)&&(L->prior==L)


(3)p 指向待删结点,删除 *p 的操作

p->prior->next=p->next;
p->next->prior=p->prior;
free(p);

(4)p 所指结点的后面插入一个结点 *t 的操作 

t->prior=p;
t->next=p->next;
p->next->prior=t;
p->next=t; 


五、栈的顺序实现 

(1)下溢 / 上溢

  1. 当空栈,栈顶下标值 top=0,如果此时做出栈运算,则产生“下溢”。
  2. 当栈中的数据元素已经填满了,如果再进行进桟操作,会发生“上溢”。

(2)进栈

Int Push(SeqStk *stk,DataType x) // 若栈未满,元素 x 进栈 stk 中,否则提示出错信息
{if(stk->top==maxsize-1)          // 判断找是否满
{ error(“栈已满”);return 0;}
else { stk->top++;                 // 栈未满,top 值加 1
stk->data[stk->top]=x;             // 元素 x 进桟
return 1;}}

(3)出栈

Int Pop{SeqStk *stk)
{ if(EmptyStack(stk))    // 判断是否下溢(栈空)
{ error(“下溢”);return 0;}
else                        // 未下溢,栈顶元素出栈
{ stk->top--;               // top 值减 1
return 1;}}

 也可以理解为:原栈顶的下一个结点成为新的栈顶,即 top=top->next;


(4)取栈顶元素

DataType GetTop(SeqStk*stk)     // 取栈顶数据元素,栈顶数据元素逋过参数返回
{ if(EmptyStack(stk))
return NULLData;                  // 栈空,返回 NULLData
else return stk->data[stk->top];}  // 返回栈顶数据元素


六、栈的链接实现

(1)栈的链接实现称为链栈,链栈可以用带头结点的单链表来实现。
LS 指向链表的头结点,首结点是栈顶结点,LS->next 指向栈顶结点,尾结点为栈底结点。
(2)出栈操作始终是栈顶结点出栈,即删除头结点之后的结点:
原栈顶的下一个结点成为新的栈顶,即 top=top->next;
(3)链栈由于采用了链表的方式作为存储方式,各结点通过链域的连接组成栈,由于每个结点空间都是动态分配产生,链栈不用预先考虑容量的大小。
(4)入栈时,使用 malloc 申请空间后,用指针相连接,所以节点个数没有限制;但是出栈时,如果栈中的元素个数为 0,则不能继续出栈,所以需要判断当前栈是否为空。
综上,链表不需要判满,只需要判定是否为空即可。
(5)链栈 LS 中,Ls 一>next 指向栈顶结点,则新结点 *P 入栈的操作为:
P->next=LS->next; 和  LS->next=p;。


七、二叉树的性质



八、二叉树遍历的递归实现

  • 先序遍历:访问根结点;先序遍历左子树;先序遍历右子树。
  • 中序遍历:中序遍历左子树;访问根结点;中序遍历右子树。
  • 后序遍历:后序遍历左子树;后序遍历右子树;访问根结点。


九、图的遍历



十、4 种排序方法 

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

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

相关文章

如何打包数据库文件

使用 mysqldump 命令: mysqldump -u username -p database_name > output_file.sql username 是数据库的用户名。database_name 是要导出的数据库名称。output_file.sql 是导出的 SQL 文件名,可以自定义。 示例: mysqldump -u root -p…

urfread刷算法题day1|LeetCode2748.美丽下标的数目

题目 题目链接 LeetCode2748.美丽下标对的数目 题目描述 给你一个下标从 0 开始的整数数组 nums 。 如果下标对 i、j 满足 0 ≤ i < j < nums.length &#xff0c; 如果 nums[i] 的 第一个数字 和 nums[j] 的 最后一个数字 互质 &#xff0c; 则认为 nums[i] 和 nums…

基于PyTorch设计的全景图合成系统【文末完整工程源码下载】

前言 本项目实现基于PyTorch将多张图片合成为一张全景图。&#xff08;图像存储路径为/images/1&#xff09;。 作者&#xff1a;阿齐Archie&#xff08;联系我微信公众号&#xff1a;阿齐Archie&#xff09; 使用的图片为&#xff1a; 合成后为&#xff1a; 这个全景图项目主…

支持WebDav的网盘infiniCloud(静读天下,Zotero 等挂载)

前言 WebDav是一种基于HTTP的协议&#xff0c;允许用户在Web上直接编辑和管理文件&#xff0c;如复制、移动、删除等。 尽管有一些网盘支持WebDav&#xff0c;但其中大部分都有较多的使用限制。这些限制可能包括&#xff1a;上传文件的大小限制、存储空间的限制、下载速度的限…

如何打造稳定、好用的 Android LayoutInspector?

速度极慢&#xff0c;遇到复杂的布局经常超时 某些情况无法选中指定的 View 本文将围绕 LayoutInspector 的痛点&#xff0c;分析问题并修复&#xff0c;最终将 LayoutInspector 变成一个稳定、好用的插件。 二、加速 Dump View Hierarchy 2.1 问题描述 开发复杂业务的同学…

Spring Boot + WebSocket 实现 IM 即时通讯

文章目录 1. 项目环境准备2. 配置WebSocket3. 创建消息处理器4. 创建消息类5. 创建前端页面6. 启动应用并测试7. 分析与扩展结论 &#x1f389;欢迎来到SpringBoot框架学习专栏~ ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&#x1f379;✨博客主页&#xff1a;IT陈寒的博客&#x1f388;…

Go语言之基础入门

网站&#xff1a;http://hardyfish.top/ 免费书籍分享&#xff1a; 资料链接&#xff1a;https://url81.ctfile.com/d/57345181-61545511-81795b?p3899 访问密码&#xff1a;3899 免费专栏分享&#xff1a; MySQL是怎样运行的从根儿上理解MySQL 课程链接&#xff1a;https:/…

nn.Embedding 根据索引生成的向量有权重吗

import torch import torch.nn as nn 假设有一个大小为 10x3 的 Embedding 层&#xff0c;其中有 10 个单词&#xff0c;每个单词用一个长度为 3 的向量表示 num_words 10 embedding_dim 3 创建 Embedding 层 embedding_layer nn.Embedding(num_words, embedding_dim) p…

LeetCode 算法:翻转二叉树 c++

原题链接&#x1f517;&#xff1a;翻转二叉树 难度&#xff1a;简单⭐️ 题目 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 示例 1&#xff1a; 输入&#xff1a;root [4,2,7,1,3,6,9] 输出&#xff1a;[4,7,2,9,6,3,1] 示例 …

【Python】已解决:安装python-Levenshtein包时遇到的subprocess-exited-with-error问题

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例及解决方案五、注意事项 已解决&#xff1a;安装python-Levenshtein包时遇到的subprocess-exited-with-error问题 一、分析问题背景 在安装python-Levenshtein这个Python包时&#xff0c;有时会…

godot所有2D节点介绍

五十个2D节点介绍 2D节点介绍 前言一、Node2D二、sprite2D三、AnimatedSprite2D四、Camera2D五、PhysicsBody2D六、 RigidBody2D七、CharacterBody2D八、StaticBody2D九、joint2D十、DampedSpringJoint2D十一、GrooveJoint2D十二、PinJoint2D十三、Area2D十四、AnimatableBody2…

智能优化算法改进策略之局部搜索算子(三)—二次插值法

1、原理介绍 多项式是逼近函数的一种常用工具。在寻求函数极小点的区间&#xff08;即寻查区间&#xff09;上&#xff0c;我们可以利用在若干点处的函数值来构成低次插值多项式&#xff0c;用它作为求极小点的函数的近似表达式&#xff0c;并用这个多项式的极小点作为原函数极…

快速业务建模

一句话故事 培训学院进行新季度招生工作&#xff0c;出计划后教务处审批&#xff0c;教学秘书下发计划&#xff0c;班主任手机名单审核后完成计划 用户故事 角色 时间线 动作为动名词 业务建模 多次建模&#xff0c;模型是否能完成业务

高考填报志愿(选专业),怎样找准自己的兴趣?

在很多的高考报考指南中&#xff0c;第一要点&#xff0c;都会建议我们根据自己的兴趣来选择自己的专业。很多人虽然是依据这条规则&#xff0c;选择了自己大学的专业。却依然在学习的过程中发现&#xff0c;好像自己对这个专业并不是那么的有兴趣。 甚至对专业学习深入了解之…

docker部署ClamAV集成java和python实现文件病毒扫描

介绍 官方文档&#xff1a;https://docs.clamav.net/manual/Signatures/DatabaseInfo.html ClamAV 是一个开源的反病毒引擎&#xff0c;它由多个模块组成&#xff0c;负责不同的任务处理。以下是 ClamAV 的主要模块和它们的功能&#xff1a; clamd&#xff1a;clamd 是 Clam…

(done) 关于 GNU/Linux API setenv 的实验

写一个下面的代码来验证 #include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <sys/types.h>int main() {// 设置环境变量 MY_VAR 的值为 "hello_world"if (setenv("MY_VAR", "hello_world", 1) ! 0…

【数据挖掘】机器学习中相似性度量方法-闵可夫斯基距离

写在前面&#xff1a; 首先感谢兄弟们的订阅&#xff0c;让我有创作的动力&#xff0c;在创作过程我会尽最大能力&#xff0c;保证作品的质量&#xff0c;如果有问题&#xff0c;可以私信我&#xff0c;让我们携手共进&#xff0c;共创辉煌。 路虽远&#xff0c;行则将至&#…

Android简单登录界面布局设计

<ImageView android:id“id/yxlg” android:layout_marginTop“12dp” android:layout_marginLeft“80dp” android:layout_width“30dp” android:layout_height“30dp” android:background“drawable/net” /> <TextView android:paddingTop“5dp” andr…

Go 语言学习笔记之数组与切片

大家好&#xff0c;我是码农先森。 数组与切片的区别 在 Go 语言中&#xff0c;数组和切片是两种不同的数据结构&#xff0c;它们之间有以下主要区别。 参数长度&#xff1a; 数组&#xff08;Array&#xff09;&#xff1a;数组的长度是固定的&#xff0c;在创建时就需要指…

图片覆盖攻击

点击劫持的本质是一种视觉欺骗。顺着这个思路&#xff0c;还有一些攻击方法也可以起到类似的作 用&#xff0c;比如图片覆盖。 一名叫 sven.vetsch 的安全研究者最先提出了这种 Cross Site Image Overlaying 攻击&#xff0c;简称 XSIO。sven.vetsch 通过调整图片的 style 使得…