数据结构 每日一练:选择 + 编程

目录

选择

编程


选择

1、

设对n(n>1)个元素的线性表的运算只有4种:删除第一个元素,删除最后一个元素,在第一个元素之前插入新元素,在最后一个元素之后插入新元素,则最好使用()

A.   只有尾结点指针没有头结点指针的循环单链表

B.   只有尾结点指针没有头结点指针的非循环双链表

C.   只有头结点指针没有尾结点指针的循环双链表

D.   既有头结点指针又有尾结点指针的循环单链表

答案:C

解析:

A.删除尾结点*p时,需要找到*p的前一个结点,时间复杂度为O(n)

B.删除首结点*p时,需要找到*p结点。这里没有直接给出头结点指针,而通过尾结点的prior指针找到*p结点的时间复杂度为O(n)

C.执行这4种算法的时间复杂度均为O(1)

D.删除尾结点*p时,需要找到*p的前一个结点,时间复杂度为O(n)

2、

某线性表用带头结点的循环单链表存储,头指针为head,当head->next->next==head成立时,线性表的长度可能是()

A.   0                           B.  1                                C.  2                          D.  可能为0或1 

答案:D

解析:

对一个空循环单链表,有 head->next==head,推理head->next->next==head->next==head。

对含有1个元素的循环单链表,头结点的next域指向该唯一元素结点,该元素的next域指向头结点,因此也有head->next->next==head。

3、

已知头指针h指向一个带头结点的非空单循环链表,结点结构为"  data | next  ",其中next是指向直接后继结点的指针,p是尾指针,q是临时指针。现要删除该链表的第一个元素,正确的语句顺序是()

A.  h->next = h->next->next ; q = h->next ; free(q);

B.  q = h->next ; h->next = h->next->next ; free(q);

C.  q = h->next ; h->next = q->next ; if ( p ! = q ) p=h ; free(q);

D.   q = h->next ; h->next = q->next ; if ( p= = q ) p=h ; free(q);

答案:D

解析:请看图1,要删除带头结点的非空单循环链表的第一个元素,就要先用临时指针q指向待删结点, q = h->next ;然后将q从链表中断开, h->next = q->next(这一步也可以写成h->next = h->next->next);还有一种特殊情况是,若待删结点是链表的尾结点,即循环单链表中只有一个元素(p和q指向同一个结点),请看图2,则在删除后要将尾指针指向头结点,即 if ( p= = q ) p=h;最后释放q结点即可。

4、

关于线性表的顺序存储结构和链式存储结构的描述中,正确的有几个()

线性表的顺序存储结构优于其链式存储结构;

链式存储结构比顺序存储结构能更方便地表示各种逻辑结构;

若频繁的使用插入和删除结点操作,则顺序存储结构更优于链式存储结构;

顺序存储结构和链式存储结构都可以进行顺序存取

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

答案:B

解析:两种存储结构有不同的使用场合,不能简单地说哪个更好,第一个错误;

链式存储用指针表示逻辑结构,而指针的设置是任意的,故可以很方便地表示各种逻辑结构,顺序存储只能用物理上的邻接关系来表示逻辑结构,第二个正确; 

在顺序存储中,插入和删除结点需要移动大量元素,效率较低,第三个错误;

顺序存储结构既能随机存取又能顺序存取,而链式结构只能进行顺序存取,第四个正确。

5、

设线性表中有2n个元素,()在单链表上实现要比在顺序表上实现效率更高

A.  删除所有值为x的元素

B.  在最后一个元素的后面插入一个新的元素

C.  顺序输出前k个元素

D.  交换第i个元素和第2n-i-1个元素的值(i=0,...,n-1)

答案:A

解析:对于A,在单链表上实现和在顺序表上实现的时间复杂度都为O(n),但是顺序表要移动很多的元素,所以在单链表上效率更高。对于B,D。顺序表更高;对于C,两者效率一样。

编程

题目:设计一个递归算法,删除不带头结点的单链表L中所有值为x的结点

思路:设计一个函数func(L,x)的功能是删除以L为首结点指针的单链表所有值等于x的结点, 那么func(L->next,x)就是删除以L->next为首结点指针的单链表所有值等于x的结点,那么就可以递归调用这个func()函数。

void Del_x(LinkList &L, ElemType x)
{LNode *p;         //p指向待删除结点if(L==NULL)return ;if(L->data==x)    //如果L指向的结点的值为x{p=L:           //删除*L,并让L指向下一个结点L=L->next;free(p);Del_x(L,3);   //函数递归调用}else                   //L指向的结点的值不为xDel_x(L->next,3);
}

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

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

相关文章

IT运维:使用数据分析平台监控H3C交换机

概述 在企业日常运维中,设备种类繁多,日志格式各异,日志量巨大,大量的告警,我们面临着如何统一的存放这些日志?如何对海量的日志进行查看,分析?传统的日志设备无法满足日志格式各异的…

SpringBoot-Learning系列之Kafka整合

SpringBoot-Learning系列之Kafka整合 本系列是一个独立的SpringBoot学习系列,本着 What Why How 的思想去整合Java开发领域各种组件。 消息系统 主要应用场景 流量消峰(秒杀 抢购)、应用解耦(核心业务与非核心业务之间的解耦)异步处理、顺序…

在Creo 6.0中画图模板问题

在Creo 6.0中,文件的默认模板是英制模板“inlbs_part_solid”,此文件模板中尺寸的单位是inch。我们建模中需要的单位是mm,改变Creo文件默认的单位有两种方法。 1 【新建】对话框取消勾选【使用默认模板】对话框 (1)单击主页选项…

基于SSM的房屋租售网站

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

RabbitMQ学习笔记

1、什么是MQ? MQ全称message queue(消息队列),本质是一个队列,FIFO先进先出,是消息传送过程中保存消息的容器,多 用于分布式系统之间进行通信。 在互联网架构中,MQ是一种非常常见的…

sql注入基本概念

死在山野的风里,活在自由的梦里 sql注入基本概念 MYSQL基本语法union合并查询2个特性:order by 排序三个重要的信息 Sql Server MYSQL 基本语法 登录 mysql -h ip -u user -p pass基本操作 show databases; 查看数据库crea…

2023Web前端开发面试手册

​​​​​​​​ HTML基础 1. HTML 文件中的 DOCTYPE 是什么作用? HTML超文本标记语言: 是一个标记语言, 就有对应的语法标准 DOCTYPE 即 Document Type,网页文件的文档类型标准。 主要作用是告诉浏览器的解析器要使用哪种 HTML规范 或 XHTML规范…

前端面试的话术集锦第 8 篇:高频考点(JS性能优化 性能优化琐碎事)

这是记录前端面试的话术集锦第八篇博文——高频考点(JS性能优化 & 性能优化琐碎事),我会不断更新该博文。❗❗❗ 1. 从V8中看JS性能优化 注意:该知识点属于性能优化领域。 1.1 测试性能⼯具 Chrome已经提供了⼀个⼤⽽全的性能测试⼯具Audits。 点我们点击Audits后,可…

【LInux编译器gcc/g++】gcc使用方法和动静态库相关概念

目录 一.前言 二.源代码的翻译环境 三.gcc相关指令 四.动静态库 1.什么是库? 2.库的命名 3.库的链接方式 4.动静态链接的优缺点 5.小结 一.前言 在Windows系统上我们常用VisualStudio来进行C/C开发,VS并不是一款单一的软件,而是集成…

DQN算法概述及基于Pytorch的DQN迷宫实战代码

一. DQN算法概述 1.1 算法定义 Q-Learing是在一个表格中存储动作对应的奖励值,即状态-价值函数Q(s,a),这种算法存在很大的局限性。在现实中很多情况下,强化学习任务所面临的状态空间是连续的,存在无穷多个状态,这种情…

将Apache服务与内网穿透结合,让您的网站可以公网访问

Apache服务安装配置与结合内网穿透实现公网访问 文章目录 Apache服务安装配置与结合内网穿透实现公网访问前言1.Apache服务安装配置1.1 进入官网下载安装包1.2 Apache服务配置 2.安装cpolar内网穿透2.1 注册cpolar账号2.2 下载cpolar客户端 3. 获取远程桌面公网地址3.1 登录cpo…

Android 查看当前手机、APP的ABI架构信息

目录 查看手机 查看APP 查看手机 命令:adb shell "getprop |grep cpu" 命令:adb shell getprop ro.product.cpu.abi 查看APP 在 data/system/packages.xml 文件中找到自己 app 的相关配置信息,这里有明确指出该去哪里加载 so…

C++中菱形继承中的多态在底层是如何实现的。

如果还不了解菱形继承和多态的底层可以看这两篇文章:C中多态的底层实现_Qianxueban的博客-CSDN博客 C的继承以及virtual的底层实现_Qianxueban的博客-CSDN博客 1.只有基类有虚函数 2.派生类也有重写的虚函数

【MySQL数据库原理】MySQL Community 8.0界面工具汉化

尝试以下方法来汉化 MySQL Workbench 8.0 的菜单: 1、使用社区翻译版本:有一些热心的社区成员会将 MySQL Workbench 翻译成不同的语言,包括中文。你可以在一些开源或社区网站上寻找这些翻译版本,并按照他们的说明进行安装。 2、…

博客系统(升级(Spring))(二)获取当前用户信息、对密码进行加密、设置统一数据格式、设置未登录拦截、线程池

博客系统(二) 博客系统获取当前用户的信息对密码进行加密和解密的操作设置统一的数据返回格式设置未登录拦截设置线程池 博客系统 博客系统是干什么的? CSDN就是一个典型的博客系统。而我在这里就是通过模拟实现一个博客系统,这是…

Redis之缓存和数据库双写一致方案讨论解读

目录 什么是缓存双写一致 更新缓存还是删除缓存? 先删除缓存,再更新数据库 场景描述 解决方案:延时双删策略 先更新数据库,再删除缓存 场景描述 解决方案:重试机制引入MQ 为什么要引入MQ 什么是缓存双写一致 只要用缓存…

rsync远程同步

与inodify结合使用,实现实时同步 rsync简介 rsync(Remote Sync,远程同步)是一个开源的快速备份工具,可以在不同主机之间镜像同步整个目录树,;支持增量备份,并保持链接和权限&#…

记录造数据测试接口

一、前言 在java开发中经常需要造数据进行测试接口,这里记录一下常用的通过造数据测试接口的方法。 二、一般的接口传参方式 1、接口的方式最好是使用JSON或者map的方式,这样的好处是传参可以灵活伸缩,返回的结果也最好是JSON或者map的方式…

Redis7--基础篇1(概述,安装、卸载及配置)

1. Redis概述 1.1 什么是Redis Redis:REmote Dictionary Server(远程字典服务器) Remote Dictionary Server(远程字典服务)是完全开源的,使用ANSIC语言编写遵守BSD协议,是一个高性能的Key-Value数据库提供了丰富的数…

MQTT 连接优化指南

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…