寒假作业Day 10

2024-03-11 03:44
文章标签 day 寒假作业

本文主要是介绍寒假作业Day 10,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

寒假作业Day 10

一、选择题

1、下列数据结构中,不属于线性表的是( )
A.队列 B.顺序表 C.二叉树 D.链表

A. 队列:队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。因此,队列是线性表。
B. 顺序表:顺序表是用一段地址连续的存储单元依次存储线性表的数据元素。它也是线性表的一种实现方式。
C. 二叉树:二叉树是每个节点最多有两个子节点的树结构,通常子节点被称作“左孩子”和“右孩子”。二叉树并不是线性表,因为它的元素不是按照线性顺序排列的。
D. 链表:链表是一种物理存储单元上非连续的、非顺序的线性数据结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。因此,链表也是线性表的一种实现方式。

2、对于一个头指针为 head 的带头结点的单链表,判断该表为空的条件是( )
A. head=NULL B. head→next==NULL C. head→next=head D. head!=NULL

因为头节点只是哨兵位,是不参与单链表的增删查改的,所以头节点的下一个节点才是真正的头节点,所以判断该表为空的条件为head->next==NULL

3、当线性表的元素总数基本稳定,且很少进行插入和删除操作,但要求以最快的速度存取线性表中的元素时,应采用什么存储结构?( )
A. 顺序表 B. 单链表 C. 循环链表 D. 双链表

因为要以最快的速度存取元素,并且很少插入和删除,所以我们选择顺序表,因为其他几个链表都需要遍历才可以存取元素,而顺序表可以直接通过下标查找

在这里插入图片描述

这个画图可以很清晰噢~
在这里插入图片描述
把head当作L指向的内容,而3当作p指向的内容,那么很明显,p->next==L,L->prior ==p

在这里插入图片描述

选择C噢,要先把新节点跟旧节点后面的节点连接起来,再把新节点与旧节点连接起来,不然会丢掉后续节点

二、编程题

在这里插入图片描述

int search(int* nums, int numsSize, int target) {  int n = numsSize;  // 如果数组为空,则直接返回-1表示未找到目标值  if (!n) {  return -1;  }  // 如果数组只有一个元素,直接判断这个元素是否等于目标值  if (n == 1) {  return nums[0] == target ? 0 : -1;  }  // 定义搜索范围的起始和结束索引  int begin = 0, end = n - 1;  // 当搜索范围有效时继续循环  while (begin <= end) {  // 计算中间元素的索引  int mid = (begin + end) / 2;  // 如果中间元素等于目标值,直接返回其索引  if (nums[mid] == target) return mid;  // 检查左侧部分是否是有序的  if (nums[0] <= nums[mid]) {  // 如果目标值在有序部分的范围内,更新结束索引  if (nums[0] <= target && target < nums[mid]) {  end = mid - 1;  } else {  // 否则,更新起始索引  begin = mid + 1;  }  } else {  // 检查右侧部分是否是有序的  // 如果目标值在有序部分的范围内,更新起始索引  if (nums[mid] < target && target <= nums[n - 1]) {  begin = mid + 1;  } else {  // 否则,更新结束索引  end = mid - 1;  }  }  }  // 如果循环结束还没有找到目标值,则返回-1  return -1;  
}

在这里插入图片描述

int getDecimalValue(struct ListNode* head) {ListNode* phead=head;int count=0;  int result=0;  while(phead){count++;//遍历链表先记录有多少个节点phead=phead->next;}phead=head;//刷新位置while(phead){if(phead->val==1)result+=pow(2,count-1);//遍历的同时加值,count-1的原因是因为假如有3个节点,101,最高的位置也是2^2,而非2^3,这是需要注意的问题count--;//次方逐步下降phead=phead->next;}return result;
}

这是简单粗暴的解法,很容易看出,它的时间复杂度是O(N^2),过于高,如果数据过大,效率很受影响,所以我们还有另外一种解法

int getDecimalValue(ListNode* head) {ListNode* cur = head;int ans = 0;while (cur != NULL) {ans = ans * 2 + cur->val;cur = cur->next;}return ans;
}

很明显可以看出,这里的时间复杂度就只有O(N)了,它是从最高位开始,在遍历的过程逐步乘2;比如101,第一个1乘了2次,第2个0乘了1次,第三个1乘了0次,也就是按照原本的值计算,这是一种更加巧妙的方法,虽然一开始不容易想到,但是效率高了很多

这篇关于寒假作业Day 10的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/796516

相关文章

day-51 合并零之间的节点

思路 直接遍历链表即可,遇到val=0跳过,val非零则加在一起,最后返回即可 解题过程 返回链表可以有头结点,方便插入,返回head.next Code /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}*

Linux基础入门 --9 DAY

文本处理工具之神vim         vi和vim简介 一、vi编辑器 vi是Unix及类Unix系统(如Linux)下最基本的文本编辑器,全称为“visual interface”,即视觉界面。尽管其名称中包含“visual”,但vi编辑器实际上工作在字符模式下,并不提供图形界面。vi编辑器以其强大的功能和灵活性著称,是Linux系统中不可或缺的工具之一。 vi编辑器具有三种主要的工作模

day-50 求出最长好子序列 I

思路 二维dp,dp[i][h]表示nums[i] 结尾,且有不超过 h 个下标满足条件的最长好子序列的长度(0<=h<=k),二维数组dp初始值全为1 解题过程 状态转换方程: 1.nums[i]==nums[j],dp[i,h]=Math.max(dp[i,h],dp[j,h]+1) 2.nums[i]!=nums[j],dp[i,h]=Math.max(dp[i,h],dp[j,h-1

[Day 73] 區塊鏈與人工智能的聯動應用:理論、技術與實踐

AI在健康管理中的應用實例 1. 引言 隨著健康管理需求的提升,人工智能(AI)在該領域的應用越來越普遍。AI可以幫助醫療機構提升效率、精準診斷疾病、個性化治療方案,以及進行健康數據分析,從而改善病患的健康狀況。這篇文章將探討AI如何應用於健康管理,並通過具體代碼示例說明其技術實現。 2. AI在健康管理中的主要應用場景 個性化健康建議:通過分析用戶的健康數據,如飲食、運動、睡眠等,AI可

Vue day-03

目录 Vue常用特性 一.响应更新 1. 1 v-for更新监测 1.2 v-for就地更新 1.3 什么是虚拟DOM 1.4 diff算法更新虚拟DOM 总结:key值的作用和注意点: 二.过滤器 2.1 vue过滤器-定义使用 2.2 vue过滤器-传参和多过滤器 三. 计算属性(computed) 3.1 计算属性-定义使用 3.2 计算属性-缓存 3.3 计算属

用Python实现时间序列模型实战——Day 14: 向量自回归模型 (VAR) 与向量误差修正模型 (VECM)

一、学习内容 1. 向量自回归模型 (VAR) 的基本概念与应用 向量自回归模型 (VAR) 是多元时间序列分析中的一种模型,用于捕捉多个变量之间的相互依赖关系。与单变量自回归模型不同,VAR 模型将多个时间序列作为向量输入,同时对这些变量进行回归分析。 VAR 模型的一般形式为: 其中: ​ 是时间  的变量向量。 是常数向量。​ 是每个时间滞后的回归系数矩阵。​ 是误差项向量,假

Linux基础入门 --8 DAY

文件权限管理 设置文件的所有者chown         格式: chown [OPTION]... [OWNER][:[GROUP]] FILE... chown [OPTION]... --reference=RFILE FILE...         示例:  chown admin(所有者):admin(所属组)f1.txt chown admin(所有者).admin(

[Day 72] 區塊鏈與人工智能的聯動應用:理論、技術與實踐

區塊鏈在跨境支付中的應用 跨境支付一直是全球經濟中極具挑戰的領域。傳統的跨境支付系統通常需要數天時間來處理交易,涉及的中間機構多且手續費昂貴。然而,區塊鏈技術的出現為解決這些問題提供了一條嶄新的途徑。本文將探討區塊鏈在跨境支付中的應用,並通過代碼示例展示如何使用區塊鏈技術來優化跨境支付流程。 1. 區塊鏈在跨境支付中的優勢 區塊鏈技術具有去中心化、透明、高效和安全等特性,使其在跨境支付領域具

代码随想录Day 36|滑铁卢了,leetcode题目:1049.最后一块石头的重量、494.目标和、474.一和零

提示:DDU,供自己复习使用。欢迎大家前来讨论~ 文章目录 动态规划一、题目题目一:1049.最后一块石头的重量II解题思路: 题目二:494.目标和动态规划 (二维dp数组)#动态规划 (一维dp数组) 题目三: 474.一和零解题思路: 总结 动态规划 有点难了,之前差的有点多,找时间补 一、题目 题目一:1049.最后一块石头的重量II leetcode题目链接

嵌入式软件--51单片机 DAY 4

一、蜂鸣器 当电流通过线圈时会产生电磁场,电磁场与永磁体相互作用,从而使金属膜产生震动而发声。为使金属膜持续震动,蜂鸣器需要使用震荡电路进行驱动。有些蜂鸣器元件内部自带震荡驱动电路,这种蜂鸣器叫做有源蜂鸣器(Active Buzzer,自激式蜂鸣器);而有些则不带震荡驱动电路,这种蜂鸣器叫做无源蜂鸣器(Passive Buzzer,它激式蜂鸣器)。 1.原理图 2.软件实现 Int_B