当前位置: 首页 > news >正文

数据结构——顺序表(基础代码题)

一、顺序表

1.对顺序表L 进行遍历并输出每个数据元素的数据值。

​ (改变结构就用引用,简单的就用值传递)

void ListVisit(SqList L){for (int k=0;k<L.length;k++)printf("%d",L.data[k]);
}

2.假设有一个顺序表i,其存储的所有数据元素均为不重复的正数,查找L 中值为e的数据元素,若找到则返回其下标,若找不到则返回-1。

int Search_e(SqList L,int e){for(int k=0;k<L.length;k++)if(L.data[k]==e)return k;return -1;
}

3.假设有一个顺序表L,其存储的所有数据元素均为正数,查找L中第i个数据元素并返回其值。

int Get_i(SqList L,int i){if(i>=1&&i<L.length)return L.data[i-1];return -1;		//范围越界
}

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

 void Reverse(SqList &L){  //由1234改变成4321结构发生变化,使用引用符int temp;for(int i=0;i<L.length/2;i++)   {//length/2=2.5计算机会自动抹去0.5temp=L.data[i];L.data[i]=L.data[L.length-i-1];L.data[L.length-i-1]=temp;}}

5.在顺序表L的第i个位置插入新元素e,若i的输入不合法,则返回false,表示插入失败;否则,将第i个元素及其后的所有元素依次往后移动一个位置,腾出一个空位置插入新元素e,顺序表长度增加1,插入成功,返回true。

bool Insert_e(SqList &L, int e,int i){//合法性判断if(i<1||i>L.length+1)return false;//顺序表存满判断if(L.length==MaxSize)return false;for(int j=L.length;j>=i;j--)L.data[j]=L.data[i-1];L.data[i-1]=e; //第i个位置的下标要-1L.length++;return true;
}

6.已知一个顺序表L,其中的元素递增有序排列,设计一个算法,插入一个元素X(X为int型)后保持该顺序表仍然递增有序排列,假设插入操作肯定成功,插入成功后返回插入元素所在位置。

//假设插入操作肯定成功,则不需要情况判断
int ListInsert(SqList &L,int x){for(int i) //i因为要返回数值,故不能在for循环里定义,因为for循环完之后会自动消失,所以要把i定义在循环之外int i;for(i=0;i<L.length;i++)if(L.data[i]>x)break;//得到插入元素的位置for(int j=L.length;j>=i+1;j--)L.data[j]=L.data[j-1];L.data[i]=x; //插入元素L.length++;return i;
}

![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=C%3A%5CUsers%5CASUS%5CDesktop%5CSnipaste_2024-09-20_14-54-46.png&pos_id=img-lM1CUEjw-1727575705002

7.删除顺序表L 中第i 个位置的元素,若i的输入不合法,则返回false;否则将被删元素赋给引用变量e,并将第i+1个元素及其后的所有元素依次往前移动一个位置,返回true。

 //输入合法:i(下标在0到顺序表长度之间)bool ListDelete(SqList &L,int i,int &e){if(i<1||i>L.length)  //不合法判断return false;e=L.data[i-1];  //被删除的元素赋值给变量efor(int j=i;j<L.length;j++)L.data[j-1]=L.data[j]; //将之后的元素依次往前移动L.length--;return true;}

8.从顺序表中删除具有最小值的元素并由函数返回被删元素的值。(假设顺序表中的数据元素全为正值且最小值唯一)。

int Delete_Min(SqList &L){if(L.length==0)return -1;	//空表,出现错误int min=L.data[0],pos=0;for(int i=1;i<L.length;i++)if(L.data[i]<min){min=L.data[i];pos=i;//找到顺序表中的最小值}for(int j=pos;j<L.length-1;j++)L.data[j]=L.data[j+1];//前移表中的数据元素L.length--;	 //顺序表长度减一return min; //返回最小值
}

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

//方法一
void Delete_x_1(SqList &L,int x){int k=0; // 定义删除x的个数for(int i=0;i<L.length;i++){if(L.data[i]==x)k++;elseL.data[i-k]=L.data[i];}L.length=L.length-k;
}
//方法二
void Delete_x_1(SqList &L,int x){int j=0;for(int i=0;i<L.length;i++){if(L.data[i]!=x){L.data[j]=L.data[i];j++;}}L.length=j;
}

10.从顺序表中删除其值在给定值s与t之间(包含s和t,要求s<t)的所有元素,若s或t不合理或顺序表为空,则返回false,若执行成功则返回true。

//方法一
bool Del_s_t_1(SqList &L,int s ,int t){if(s>=t||L.length==0)return false;int k=0;for(int i=0;i<L.length;i++){if(L.data[i]>=s&&L.data[i]<=t)k++;elseL.data[i-k]=L.data[i];}L.length=L.length-k;return true;
}
//方法二
bool Del_s_t_2(SqList &L,int s ,int t){if(s>=t||L.length==0)return false;int j=0;for(int i=0;i<L.length;i++){if(L.data[i]<s||L.data[i]>t){  //判断元素是否保留L.data[j]=L.data[i];j++;}}L.length=j;return true;		
}

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

void Del_Same(SqList &L){int j=1; //定义一个变量作为保留元素的位置,判断元素保留不保留要求从第二个元素进行比较,下标为0的元素肯定保留for(int i=1;i<L.length;i++)if(L.data[i]!=L.data[j-1]){L.data[j]=L.data[i];j++;}L.length=j;
}

12.从【有序】顺序表中删除其值在给定值s与t之间(包含s和t,要求s<t)的所有元素,若s或t不合理或顺序表为空,则返回false,执行成功则返回true。

难题
//自己写的,不是太正确
bool Delete_s_t(SqList &L,int s,int t){if(s>=t||L.length==0)return false;int k=0;for(int i=0;i<L.length;i++){if(L.data[i]>=s&&L.data[i]<=t)k++;	L.data[i-k]=L.data[i];}L.length=L.length-k;return true;
}
//正确答案P20,解题思路:连续的空间,给出一个排队的位置(需要删除的元素的位置),看看哪些元素需要保留,然后在排队位置上进行保留,然后更新排队位置。
bool Delete_s_t(SqList &L,int s,int t){if(s>=t||L.length==0)return false;int i,j;for(j=0;j<L.length&&L.data[j]<s;j++);//找出大于s元素的位置if(j=L.length)return false;for(i=j;i<L.length&&L.data[i]<=t;j++);//找到小于t元素的位置for(;i<L.length;i++,j++) //循环顺序表L.data[j]=L.data[i];  L.length=j;return true;
}

13.将两个有序顺序表A和B合并为一个新的有序顺序表C,若合并成功则返回true,合并失败则返回false。

 bool Merge(SqList A,SqList B,SqList &C){if(A.length+B.length>C.Maxsize)return false;  //判断顺序表A和B的长度没有超过C的int i=0,j=0,k=0;while(i<A.length&&j<B.length){  //比较两个表内元素的大小if(A.data[i]<=B.data[j]){C.data[k]=A.data[i];k++;i++;}else{C.data[k]=B.data[j];k++;j++;}		}//存在一个表有剩余while(i<A.length){C.data[k]=A.data[i];k++;i++;}while(i<A.length){C.data[k]=B.data[j];k++;j++;}C.length=k;return true;}

相关文章:

  • golang 如何生成唯一的 UUID
  • 一个OpenHarmony rk3568编译问题
  • 品牌增长新引擎:TikTok达人内容营销策略解析
  • 6--苍穹外卖-SpringBoot项目中菜品管理 详解(二)
  • spring boot 项目中redis的使用,key=value值 如何用命令行来查询并设置值。
  • Python编码系列—Python访问者模式:为对象结构添加新功能的艺术
  • 如何快速免费搭建自己的Docker私有镜像源来解决Docker无法拉取镜像的问题(搭建私有镜像源解决群晖Docker获取注册表失败的问题)
  • vue3 商城系统中的 sku 功能的实现
  • 优秀在线 notion 头像制作工具分享-Notion Avatar Maker
  • 35 | 实战一(下):手把手带你将ID生成器代码从“能用”重构为“好用”
  • Chromium 设置页面打开系统代理源码分析c++
  • C语言 | Leetcode C语言题解之第443题压缩字符串
  • 《中国电子报》报道: 安宝特AR为产线作业者的“秘密武器
  • 桥接模式和NET模式的区别
  • 今年Java回暖了吗
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • Python语法速览与机器学习开发环境搭建
  • React-生命周期杂记
  • select2 取值 遍历 设置默认值
  • Spring核心 Bean的高级装配
  • Spring框架之我见(三)——IOC、AOP
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • 大主子表关联的性能优化方法
  • 对话:中国为什么有前途/ 写给中国的经济学
  • - 概述 - 《设计模式(极简c++版)》
  • 解析 Webpack中import、require、按需加载的执行过程
  • 开发基于以太坊智能合约的DApp
  • 前端代码风格自动化系列(二)之Commitlint
  • 实习面试笔记
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • 浅谈sql中的in与not in,exists与not exists的区别
  • ‌移动管家手机智能控制汽车系统
  • # C++之functional库用法整理
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (二)Eureka服务搭建,服务注册,服务发现
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (一)、python程序--模拟电脑鼠走迷宫
  • (转载)CentOS查看系统信息|CentOS查看命令
  • (转载)Google Chrome调试JS
  • (转载)深入super,看Python如何解决钻石继承难题
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题
  • .NET4.0并行计算技术基础(1)
  • @NestedConfigurationProperty 注解用法
  • [7] CUDA之常量内存与纹理内存