DAY1 2025年6月29日 雨转晴🌧🌤

第二章 线性表

2.2线性表的顺序表示

1、从顺序表中删除具有最小值的元素(假设唯一)并由函数返回被删元素的值。空出的位置由最后一个元素填补,若顺序表为空,则显示出错信息并推出运行。

【思路】/*首先应该判空,空则显示出错,并推出;再遍历整个顺序表,找最小值,并记录位置,遍历完成后用最后一个元素补到原来这个最小值元素的位置上。*/
bool Del_min(SqList &L,ElemType &value){  //value 返回值if(L.length==0)  return false;value = L.data[0];int index = 0;for(int i =1;i<L.length;i++){if(L.data[i]<value){value = L.data[i];index = i;}L.data[index]=L.data[L.length-1];L.length--;return true;
}

2、设计一个高效算法,将顺序表L的所有元素逆置,要求算法的空间复杂度为O(1)。

/*题目要求空间复杂度为O(1),也就是辅助空间为常数级,那数组是不行的了,所以考虑temp变量暂时存放,然后前半和后半对应位置对调即可*/
/*例如1,2,3,4,5 需要逆置,那将前半段和后半段对应位置对调——1,5;2,4;3,就可以得到54321*/void Reverse(SqList &L){ElemType temp;for(int i = 0 ; i<L.length/2 ; i++){temp = L.data[i];L.data[i]=L.data[L.length-i-1];L.data[L.length-i-1]=temp;}
}

3、对长度为n的顺序表L,编写一个时间复杂度为O(n),空间复杂度为O(1)的算法,该算法删除顺序表中所有值为x的数据元素。 

/*【思路】设cnt=0,每次循环如果有x就cnt++,没有则,让当前元素往前移动cnt个位置。*/void Del_X(SqList &L,ElemType x){int cnt  = 0;i = 0;while(i<L.length){if(L.data[i]==x){cnt++;}else{L.data[i-cnt] = L.data[L];}i++;L.length = L.length-cnt;}
}

DAY2 2025年6月30日 晴🌤

1、从顺序表中删除其值在给定值s和t之间(包含s和t,要求s<t)的所有元素,若s或t不合理或顺序表为空,则显示出错信息并推出运行。

/*【思路】先判空,空则返回false;未异常则遍历顺序表,然后如果遍历时元素大小在s,t之间,那么cnt++。用以表示要删除的个数,方便后边的不在s,t之间的元素前移覆盖,从而达到删除的效果*/bool Del_s_t(SqList &L,ElemType s,ElemType t){int i,cnt=0;if(L.length==0||s>=t){   //判空,不能s>=treturn false;}for(i = 0;i<L.length;i++){if(L.data[i]>=s&&L.data[i]<=t){cnt++;}else{L.data[i-cnt]=L.data[i];  //前移k个位置}}L.length-=cnt;return true;
}


2.从有序顺序表中删除所有其值重复的元素,使表中所有元素的值均不同。 

/*【思路】有序顺序表,重复的元素一定是在相邻的位置。所以记录第一个元素后,然后依次判断后面的元素是否与前面非重复的有序表的最后一个元素相同。若相同,继续往后走;不相同就插入到非重复有序表的最后。*/bool Del_Same(SqList &L){if(L.length==0){return false;}int i ,j //i表示第一个不相同的元素,j当作指针遍历后面的元素for(i = 0,j=1; j<L.length;j++){if(L.data[i]!=L.data[j]) L.data[++i] = L.data[j];}L.length = i+1;return true;
}

3.⭐将两个有序顺序表合并成为一个新的有序顺序表,并由函数返回结果顺序表。 

/*超级经典!!!【思路】将两个有序顺序表,每次都比较,然后存放较小的那个值。这两个顺序表总有一个先达到length,然后将剩下那个直接搬到总表中*/bool Merge(SqList A,SqList B,SqList &C){if(A.length+B.length>C.maxSize){return false;}int i,j,k=0;while(i<A.length&&j<B.length){  //小的先存if(A.data[i]<=B.data[j]){C.data[k++] = A.data[i++];}else{C.data[k++] = B.data[j++];}}while(i<A.length){     //剩余的一个直接搬过来C.data[k++] = A.data[i++];}while(j<B.length){C.data[k++] = B.data[j++];}C.length = k;return true;
}

DAY3 2025年7月1日 晴转雨 🌤🌧

单链表上基本操作的实现

1、单链表初始化

/*带头节点*/
bool InitList(LinkList &L){L = (LNode*)malloc(sizeof(LNode));//创建头节点L->next = NULL;return true;
}/*不带头节点*/
bool InitList(LinkList &L){L = NULL;return true;
}

2、求表长操作

/*记录单链表表中数据结点的个数*/
//带头结点
int Length(LinkList L){int len = 0 ;LNode *p=L;while(p->next!=NULL){p = p->next;len++;
}return len;
}//不带头结点
int Length(LinkList L){int len =0;LNode *p =L ;while(p!=NULL){len++;p = p->next;}return len;
}

3、按序查找

/*沿着next域找,O(n)*/
LNode *GetElem(LinkList L,int i){LNode *p=L;int j  = 0;while(p!=NULL&&j<i){p = p-next;j++;
}return p; //p为第i个结点或者是null
}

4、按值查找

/*要用结点的data域和定值e比较。O(n)*/
//带头结点
LNode *LocateElem(LinkList L,ElemType e){LNode *p =L->next;while(p!=NULL&&p->data!=e){p = p->next;
}return p;
}

5、插入结点操作

/*插入到第i个位置,就需要在第i-1个后面进行插入*/
/*s->next = p->next; p-next = s*/
bool ListInsert(LinkList &L,int i ,ElemType e){LNode *p = L;int j = 0;while(p!=NULL&&j<i-1){ //找到第i-1个位置,准备在其后面插入新结点成为第i个。p = p->next;j++;}if(p==NULL) return false;LNode *s = (LNode*)malloc(sizeof(LNode));//新插入结点建立s->data = e;s->next = p->next;p->next =s;return true;
}/*还可以用交换数据域,将前插变为后插*/
s->next = p->next;
p->next = s;
tmp = p->data;
p->data = s->data;
s->data = tmp;

6、删除结点操作

/*删除要记得释放空间*/
/*p是被删结点的前驱,q是被删的结点*/
bool ListDelete(LinkList &L,int i,ElemType &e){LNode *p = L;int j = 0;while(p->next!=NULL&&j<i-1){p = p->next;j++;}if(p->next ==NULL||j>i-1){return false;
}LNode *q = p->next;e = q->data;p->next = q->next;free(q);return true;
}

7.⭐头插法建立单链表(链表逆置)

/*读入数据的顺序和生成的链表中元素的顺序是相反的,每个结点插入为O(1),设单链表长为n,则总时间复杂度为O(n)*/
LinkList List_HeadInsert(LinkList &L){LNode *s;int x;L = (LNode*)malloc(sizeof(LNode));L->next = NULL;scanf("%d",&x);while(x!=11408){s = (LNode*)malloc(sizeof(LNode));s->data = x;s->next = L->next;L->next = s;scanf("%d",&x);}return L;
}

8.尾插法建立单链表 

LinkList List_TailInsert(LinkList &L){int x;L = (LNode*)malloc(sizeof(LNode));LNode *s ,*r = L;scanf("%d",&x);while(x!=11408){s = (LNode*)malloc(sizeof(LNode));s->data =x;r->next =s;r = s;scanf("%d",&x);}r->next = NULL;return L;
}

 

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

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

相关文章

vue2 el-select下拉选择框 点击其他位置或者弹窗关闭下拉框/点击取消时,下拉框变成之前的值

1.elSelect点击空白处无法收起下拉框&#xff08;失去焦点并隐藏&#xff09; // 定义指令 directives: {clickOutside: {bind: function (el, binding, vnode) {el.clickOutsideEvent function (event) { // here I check that click was outside the el and his childrensif…

MYSQL-JAVAweb1

1.登录 在黑框中输入 net start mysql // 启动mysql服务 net stop mysql // 停止mysql服务1.MySQL数据模型 关系型数据库&#xff1a; 关系型数据库是建立在关系模型基础上的数据库&#xff0c;简单说&#xff0c;关系型数据库是由多张能互相连接的 二维表 组成的数据库 如…

将POD指定具体机器上运行

在Kubernetes中&#xff0c;你可以通过多种方式将Pod调度到指定的节点&#xff08;机器&#xff09;上运行。以下是几种常用的方法及其适用场景&#xff1a; 1. NodeSelector&#xff08;简单标签匹配&#xff09; 通过标签选择器将Pod绑定到具有特定标签的节点。 步骤 为目…

eNSP实验一:IPv4编址及IPv4路由基础

一、实验目的&#xff1a; 配置各路由器上的物理接口的IP地址并实现互联互通配置各路由器的 Loopback 的IP地址并实现互联互通&#xff08;包括备份路由&#xff0c;默认路由&#xff09;图中三个路由器型号为 AR3620。 二、配置物理接口ip 基础配置 设备命名<Huawei>…

基于自然语言处理(NLP)的Twitter情感分析系统

本课题致力于构建一个基于自然语言处理&#xff08;NLP&#xff09;与机器学习技术的Twitter情感分析系统&#xff0c;旨在自动识别用户推文中的主观情绪倾向&#xff0c;如正面、负面或中性。研究过程中将对海量Twitter文本数据进行预处理&#xff0c;包括去除噪声、分词、词性…

H.264中片数据分割(Slice Data Partitioning)介绍

H.264中**片数据分割&#xff08;Slice Data Partitioning&#xff09;**的解码机制。让我为您详细解析&#xff1a; 1. 片数据&#xff08;Slice Data Partitioning&#xff09;分割的概念 片数据分割是H.264中的一种错误恢复机制&#xff0c;通过将片数据分成不同的部分&am…

muduo

好的&#xff0c;我们来深入剖析陈硕老师开发的著名C网络库——muduo。它以“简单、高效、易用”著称&#xff0c;是学习Linux C高性能网络编程的绝佳范本。我会尽量详细、通俗地讲解其核心思想、关键组件、源码结构和工作原理。 核心思想&#xff1a;Reactor 模式 (Non-block…

将目录下所有图像中非0像素值改为1或者255

图像二值化处理技术大纲 目标与背景 解释图像二值化的意义,分析将非零像素值统一调整为1或255的应用场景(如简化数据、增强特征、适配模型输入等)。 核心方法概述 列举常见图像格式(如PNG、JPEG)的像素值范围,说明非零像素的定义(RGB或灰度图像中的非黑像素)。 方…

Reactor ConnectableFlux支持多订阅者

在 Reactor 中&#xff0c;ConnectableFlux 是一种用于处理响应式流的机制&#xff0c;它允许你控制何时开始订阅和数据生成。通常情况下&#xff0c;订阅者&#xff08;subscriber&#xff09;在订阅时会立即开始接收数据&#xff0c;但有时你可能希望多个订阅者“会面”&…

vite + vue 项目下使用 tailwindcss

版本 node: > 18.0.0 vue: 3.5.13 vite: 6.3.1 tailwindcss: 4.1.6 tailwindcss/vite: 4.1.6 tailwindcss ✅ 细粒度类库 提供数千个原子级CSS类&#xff08;如 text-center、bg-blue-500、p-4&#xff09;&#x1f9e9; 组合式开发 通过类名组合构建完全自定义的UI&#x…

Hibernate中save与saveOrUpdate的差异解析

在Hibernate中&#xff0c;save()和saveOrUpdate()都是用于持久化对象的方法&#xff0c;但它们的适用场景和行为有显著差异&#xff1a; 1. save()方法 核心行为&#xff1a; 仅适用于瞬时态&#xff08;Transient&#xff09;对象&#xff08;即新创建、未与Session关联的对象…

香橙派3B学习笔记14:deb 打包程序_解包前后脚本运行

本文学习如何用deb打包的方式打包自己需要调用系统库的程序。 然后实现deb解包前后的脚本运行。 目录 承接上文&#xff1a; 删除上文遗留的.so文件&#xff1a; 终止ledlight进程&#xff1a; 目标解释&#xff1a; 创建项目结构&#xff1a; 创建control文件&#xff1a; 创…

nanoGPT复现——prepare拆解(自己构建词表 VS tiktoken)

在nanoGPT的data文件夹有两个很相似的文件夹结构&#xff1a;shakespeare和shakespeare-char&#xff0c;这两种都是对shakespeare数据集的处理&#xff0c;但是shakespeare使用的是tiktoken对文字进行编码&#xff0c;另一个则是使用自己构建的词表 一、shakespeare-char&…

macos 安装 xcode

在 macOS 上安装 Xcode&#xff08;或者 Xcode Command Line Tools&#xff09;的方法如下&#xff1a; 1. 安装 Xcode Command Line Tools&#xff08;轻量级&#xff0c;满足大部分编译需求&#xff09; 终端命令&#xff1a; xcode-select --install会弹出安装提示&#x…

大学专业科普 | 云计算、大数据

大数据专业是近年来随着信息技术发展而兴起的热门学科&#xff0c;专注于从海量、多样化的数据中提取有价值信息&#xff0c;为各行业提供数据驱动的决策支持。 专业定义 大数据专业旨在培养掌握大数据采集、存储、管理、分析和应用等核心技术的人才。该专业融合了计算机科学…

本地文件自动提交到仓库

背景 将本地目录做一个存储仓库&#xff0c;将归档的文件放入其中。自动同步到远程仓库。 仓库配置 省略 配置密钥 用户可以 git pull \ git push \ git commit 自动 拉取、更新 脚本 文件名&#xff1a;autosave.sh #!/bin/zsh# 设置变量 LOCAL_DIR$1# 进入工作目录 cd "…

Ubuntu中控制用户存储空间配置步骤

目的&#xff0c;限制用户磁盘空间占用&#xff0c;例如给用户限制100-150G容量 1.安装磁盘配额工具 sudo apt-get install -y quota 2.备份并修改/etc/fstab文件&#xff0c;使能支持quota sudo cp /etc/fstab /etc/fstab.bak vim /etc/fstab #写入如下,usrjquotaaquota.u…

【网络】Linux 内核优化实战 - net.ipv4.tcp_rmem 和 net.core.rmem_default 关系

net.ipv4.tcp_rmem 和 net.core.rmem_default 都是 Linux 内核中控制网络接收缓冲区的参数,但它们的作用范围、优先级和使用场景存在明显区别。以下是详细对比: 核心区别 参数net.ipv4.tcp_rmemnet.core.rmem_default作用协议仅针对 TCP 协议针对 所有网络协议(TCP、UDP 等…

设计模式精讲 Day 14:命令模式(Command Pattern)

【设计模式精讲 Day 14】命令模式&#xff08;Command Pattern&#xff09; 文章内容 在“设计模式精讲”系列的第14天&#xff0c;我们来学习命令模式&#xff08;Command Pattern&#xff09;。命令模式是一种行为型设计模式&#xff0c;它将请求封装为对象&#xff0c;从而…

手机射频功放测试学习(二)——手机线性功放的静态电流和小信号(S-Parameter)测试

目录 一、概要 二、LPA的电流测试 1、LPA的泄漏电流测试 手动测试步骤如下: 自动化测试: 2、LPA的静态电流测试 手动测试步骤如下: 自动化测试: 三、LPA的S-Parameter测试 1、矢量网络分析仪校准 2、LPA的S参数手动测试步骤: 3、LPA的S参数自动测试步骤: 四…