顺序表 严蔚敏 数据结构代码c语言

P20 例2-1,合并线性表(1)

将所有Lb中但不在la中的数据元素插入到La中

void union (List &La,List Lb){//将所有Lb中但不在la中的数据元素插入到La中La_len =ListLength(La);Lb_len =ListLength(Lb);//求线性表的长度for(i=1;i<=Lb_len;i++){GetElem(Lb,i,e);//取线性表b第i个元素赋值给e if(!LocateElem(La,e,equal))//如果线性表a中不存在和e相同的数据元素 ListInsert(La,++La_len,e);//插入操作 } 
}

P21 例2-2 合并线性表(2)

归并La和Lb得到新的线性表Lc, Lc中的数据元素按值非递减排列 

void MergeList (List La,List Lb,List &Lc){//已知线性表La和Lb中的数据元素按值非递减排列 //归并La和Lb得到新的线性表Lc, Lc中的数据元素按值非递减排列 InitList(Lc);i=j=1;k=0;La_len =ListLength(La);Lb_len =ListLength(Lb);//求线性表的长度while((i<=La_len)&&(j<=Lb_len)){//La和lb均非空 GetElem(La,i,ai);//取线性表a第i个元素赋值给ai GetElem(Lb,j,bj);//取线性表b第j个元素赋值给bj if(ai<=bj){ListInsert(Lc,++k,ai);//在线性表lc的第++k个元素之前插入新的元素++i;      }else{ ListInsert(Lc,++k,bj);//++j;}}while(i<=La_len){GetElem(La,i++,ai);ListInsert(Lc,++k,ai);}while(j<=Lb_len){GetElem(Lb,j++,bj);ListInsert(Lc,++k,bj);}}/*如果在主循环结束后,`La` 中还有剩余元素,那么这个循环会将它们全部插入到 `Lc` 中。同样,如果 `Lb` 中还有剩余元素,也会将它们插入到 `Lc` 中时间复杂度=O(LA+LB)*/	

P22   算法2-3线性表初始化定义

#define LIST_INIT_SIZE 100//初始分配量 
#define LISTINCREMENT  10
typedef struct {ElemType *elem;//数组指针 线性表的基地址 int length;//线性表的当前长度, int listsize;//线性表最先分配的存储空间 
}SqList;Status InitList_Sq(SqList &L)
//构造一个线性表L{L.elem = (ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));if(! elem) exit(OVERFLOW);//存储分配失败L.length = 0;//空表的长度为零 ,目的是分配一个预定义大小的数组空间 L.listsize = LIST_INIT_SIZE;return OK; }//初始化 

P24 算法2-4 线性表的插入

Status ListInsert_Sq(SqList &L,int i,ElemType e) {if(i<1||i>L.length+1) return ERROR;  //插入位置不合理 if(L.length>= L.listsize) {//如果列表的长度已经达到了当前分配的内存大小,就会通过 `realloc` 函数重新分配内存。newbase =(ElemType*)realloc(L.elem,(L.list.size+LISTINCREMENT)*sizeof(ElemType));if(!newbase) exit(OVERFLOW);L.elem = newbase;L.listsize +=LISTINCREMENT;//新的内存大小是原来的大小加上一个增量 `LISTINCREMENT`。//如果重新分配内存失败(返回 `NULL`),则程序会退出并标记为 `OVERFLOW`。//如果成功,将新的内存地址赋值给 `L.elem`,并增加 `L.listsize`。}q=&(L.elem[i-1]);//获取插入位置前一个元素的指针 `q`。for(p=&( L.elem[L.length-1] );p>=q ; --p  ) //通过一个循环将从最后一个元素开始到`q`(包括 `q`)的所有元素向后移动一个位置,为插入新元素腾出空间。*(p+1)=*p;*q=e;  //扎入e ++L.length;  //长度+1 return OK;}

p24 算法2-5线性表的删除

Status ListDelete_Sq(SqList &L,int i,ElemType &e){if(i<1||i>L.length) return ERROR;  //删的位置不合理p=&(l.elem[i-1]);//获取要删除元素的指针 `p`e=*p;//将该元素的值赋值给变量 `e`,以便后续使用或存储。q=L.elem+L.length-1;//设置一个指针 `q` 指向列表的最后一个元素。for(++p;p<=q;++p)  *(p-1)=*p; //通过一个循环,将从 `p`(包括 `p`)到 `q` 的所有元素向前移动一个位置,覆盖要删除的元素。--L.length;return OK;}

p25 算法2-6 线性表元素的查找

int LocateElem_Sq (SqList L,ElemType e,Status(*compare)(ElemType)) {//Status(*compare)(ElemType):这是一个比较函数的指针,用于确定元素的顺序。i=1;p=L.elem;//i 被初始化为 1,p 指向顺序表的第一个元素。while(i<=length &&!(*compare)(*p++,e)) ++i;
//只要 i 小于或等于顺序表的长度,并且当前元素 *p 不满足比较函数 *compare 与要查找的元素 e 的比较条件,//就将 i 增加 1,并将 p 指向下一个元素if(i<=L.length) return i;   else return 0;}

P26 算法 合并线性表(3)

基本操作“元素赋值”

void MergeList_Sq (List La,List Lb,List &Lc){//已知线性表La和Lb中的数据元素按值非递减排列 //归并La和Lb得到新的线性表Lc, //Lc中的数据元素按值非递减排列 pa =La.elem;pb =Lb.elem;//分别获取 La 和 Lb 顺序表的起始元素指针。Lc.listsize=Lc.length=La.length+Lb.length;//表示新的顺序表 Lc 的大小。pc=Lc.elem=(ElemTyoe*)malloc(Lc.listsize*sizeof(ElemType));//为 Lc 分配内存空间来存储合并后的元素。if(!Lc.elem)exit(OVERFLOW);pa_last=La.elem+La.length-1;pb_last=Lb.elem+Lb.length-1;//分别获取 La 和 Lb 顺序表的末尾元素的后一个位置。while((pa<=pa_last)&&(pb<=pb_last)){//归并 if(*pa<=*pb)//如果 *pa 小于或等于 *pb,//则将 *pa 的值复制到 *pc 并递增 pa 和 pc。*pc++=*pa++;   else*pc++ = *pb++;//将 *pb 的值复制到 *pc 并递增 pb 和 pc  }}while(pa<=pa_last){
//将 *pb 的值复制到 *pc 并递增 pb 和 pc。*pc++=*pa++;}while(pb<=pb_last){*pc++ =*pb++;}}

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

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

相关文章

Postgresql 怎么实现在局域网中访问

安装PostgreSQL后&#xff0c;默认情况下只能在本机进行连接访问&#xff0c;如果需要在其他主机上访问PostgreSQL数据库服务器&#xff0c;需要进行配置。 安装连接PostgresSQL数据库可以参考博文&#xff1a;安装连接PostgresSQL数据库教程 一. 整体步骤 主要包括下面几个步…

JAVA百度地图的API

/*** 通过经纬度获取地址名称** param latitude(维度), longitude(经度)* return address(地址)*/GetMapping(value "/getAddress")public Result getAddress(RequestParam(value "LATITUDE") String latitude,RequestParam(value "LONGITUDE"…

NLP_BERT与GPT争锋

文章目录 介绍小结 介绍 在开始训练GPT之前&#xff0c;我们先比较一下BERT和 GPT 这两种基于 Transformer 的预训练模型结构&#xff0c;找出它们的异同。 Transformer架构被提出后不久&#xff0c;一大批基于这个架构的预训练模型就如雨后春笋般地出现了。其中最重要、影响…

vue+springboot登录与注册功能的实现

①首先写一个登录页面 <template> <div style"background-color: #42b983;display: flex;align-items: center;justify-content: center;height: 100vh"><div style"background-color: white;display: flex;width: 50%;height: 50%;overflow: h…

驶向未来:3D可视化模型重塑我们的道路认知

在科技的浪潮中&#xff0c;每一个革新都是对人类未来生活的深度洞察。而今&#xff0c;当可视化这一技术走进我们的视野&#xff0c;它不仅是一场视觉盛宴&#xff0c;更是一次对未来出行方式的全新探索。 一、从平面到立体&#xff0c;解锁道路新视角 你是否曾站在十字路口&…

NS安装-CentOS服务器安装Nightscout CGM

NS CGM 安装必要条件 有自己的云服务器好像没有2&#xff0c;有云服务器就行了 安装顺序 先安装数据库&#xff0c;目前支持的是 MongoDB &#xff0c;官方推荐4&#xff0c;其实目前最新版本就行。可以用宝塔安装&#xff0c;比较简单克隆代码&#xff0c;我是放到 /opt/ns…

PHP小程序 获取二维码

//获取token public function getAccessToken($appId,$appSecret) {// 请求API获取 access_token$url "https://api.weixin.qq.com/cgi-bin/token?grant_typeclient_credential&appid{$this->appId}&secret{$this->appSecret}";$result $this->g…

抖音关键词搜索爬虫,抖音API数据接口,抖音商品详情数据采集

抖音商品API接口抖音关键词搜索抖音直播间小黄车抖店商品数据采集 除了微博&#xff0c;小红书&#xff0c;抖音也是一个巨大的流量池。 除了评论&#xff0c;其实关键词搜索视频是更为常见的一个需求&#xff0c;于是上周末抽空开发了下&#xff0c;完成了 mvp。

MQTT协议-ISO标准下基于发布/订阅范式的消息协议

MQTT(消息队列遥测传输)是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议。它工作在 TCP/IP协议族上&#xff0c;是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议&#xff0c;为此&#xff0c;它需要一个消息中间件 。 MQTT是一个…

【单链表反转】图文解析 链表反转

目录 例题描述&#x1f4a1; 思路一 &#xff08;推荐&#xff09; 代码实现 &#x1f4a1; 思路二 代码实现 引申1. 局部反转单链表2. k个一组反转链表 例题描述 反转一个链表 示例&#xff1a; 输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1-…

海外大带宽服务器连接失败:原因与解决策略

​随着全球互联网的发展&#xff0c;越来越多的企业和个人选择使用海外大带宽服务器来满足数据传输和业务需求。然而&#xff0c;在实际使用中&#xff0c;有时会出现服务器连接失败的问题。本文将为您分析原因并提供相应的解决策略。 一、海外大带宽服务器连接失败的原因 网络…

Java三大框架简介与比较

一、引言 在Java开发领域&#xff0c;三大框架——Spring、Hibernate和MyBatis&#xff0c;各自扮演着重要的角色。它们为开发者提供了不同的解决方案&#xff0c;使得开发者能够更高效地构建企业级应用。本文将分别介绍这三大框架的特点、优势以及适用场景&#xff0c;并对它…

PCL 计算点云AABB包围盒的体积

目录 一、AABB包围盒二、代码实现三、结果展示四、相关链接本文由CSDN点云侠原创,原文链接。爬虫自重,把自己当个人。 一、AABB包围盒 AABB包围盒又称了 轴对齐包围盒,是点云包围盒里最简单的一种,其计算方法也极其简单。获取包围盒之后,根据包围盒的长宽高进行体积计算即…

MySQL性能分析1——查看频次

1、查看执行频次 查看当前数据库的INSERT,UPDATE,DELETE,SELECT的访问频次&#xff0c;得到当前数据库是以插入&#xff0c;更新和删除为主还是以查询为主&#xff0c;如果是以插入&#xff0c;更新和删除为主的话&#xff0c;那么优化比重可以轻一点儿。 语法&#xff1a; …

element-plus_message.js

message.js import { ElMessageBox, ElNotification } from "element-plus"; import { VNode } from "vue"; import { AxiosResponse } from "axios";let timeout; export default ({ title "确认", message, okEms, errMes, okText…

武汉融资融券利率最低目前是多少?4.5%!如何计算的?

融资融券利率是指证券公司提供的融资融券服务的费率&#xff0c;由证券公司根据市场行情情况而定&#xff0c;该费率由两部分组成&#xff0c;即融资利率和融券利率。目前市场上的融资利率最低一般是在4.5%~5%之间。 融资利率是指投资者从证券公司融资时需要按照利率支付一定的…

大路灯怎么选?五款顶级落地台灯揭秘,深度测评推荐!

现在很多家长都担心孩子的视力&#xff0c;其实孩子夜间的读写光源问题是家长很容易忽略的视力“隐形杀手”。许多家长都选择入手了大路灯来帮助孩子改善读写用眼时的光线环境&#xff0c;从而能够达到提高学习效率的同时还能够很好的保护眼睛视力&#xff0c;但随之照明市场的…

文件的版本管理

前提 现在在做一个在线生成文档的东西&#xff0c;就是用户填写的时候都是结构化的东西&#xff0c;不如单选框&#xff0c;多选框&#xff0c;富文本&#xff0c;图片之类的&#xff0c;最后要给用户生成文档或者ppt&#xff0c;或者pdf&#xff0c;然后要做一个版本对比的功…

代码随想录算法训练营第36天| 435. 无重叠区间、763.划分字母区间、56. 合并区间

435. 无重叠区间 完成 思路&#xff1a; 本题的贪心策略是&#xff0c;把区间按左端从小到大排序&#xff0c;当碰到重叠区间时&#xff0c;优先去掉右端更大的&#xff0c;减少后续重叠的可能。也可以理解为优先保留跨度更小的区间&#xff0c;跨度小的区间和其他区间重叠的可…

温湿度如何精准监测?教你一招秒速搞定!

随着科技的不断发展&#xff0c;温湿度监控系统在各个领域中变得越来越重要。为了满足不同行业的需求&#xff0c;温湿度监控系统不断创新和进化&#xff0c;提供更为精准、可靠的监测方案。 传统的温湿度监测手段已经无法满足当今复杂的需求&#xff0c;而现代的监控系统以其高…