考研/计算机二级数据结构刷题之顺序表

目录

第一题 顺序表的初始化,销毁,头插,尾插,头删,尾删,指定位置插入,指定删除以及打印

第二题 移除元素

题目链接: OJ链接

题目详解:移除元素 

第三题:删除有序数组中的重复项

题目链接:OJ链接 


第一题 顺序表的初始化,销毁,头插,尾插,头删,尾删,指定位置插入,指定删除以及打印

//SL.h
#pragma oncetypedef int SLDataType;typedef struct SeqList
{SLDataType* a;int size;int capacity;
}SL;//初始化
void SLInit(SL* psl);
//销毁
void SLDestory(SL* psl);
//打印函数
void SLPrint(SL* psl);
//扩容函数
void SLCheckCapacity(SL* psl);
//尾插
void SLPushBack(SL* psl, SLDataType x);
//头插
void SLPushFront(SL* psl, SLDataType x);
//尾删
void SLPopBack(SL* psl);
//头删
void SLPopFront(SL* psl);
//指定位置出入
void SLInsert(SL* psl, int pos,SLDataType x);
//制定位置删除
void SLErase(SL* psl, int pos);
//查找
int SLFind(SL* psl, SLDataType x);//SL.c
#define _CRT_SECURE_NO_WARNINGS
#include"SL.h"
#include<stdlib.h>
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<assert.h>//初始化
void SLInit(SL* psl)
{psl->a = NULL;psl->size = 0;psl->capacity = 0;
}
//销毁
void SLDestory(SL* psl)
{assert(psl->a);free(psl->a);psl->a = NULL;psl->size = 0;psl->capacity = 0;
}
//打印函数
void SLPrint(SL* psl)
{assert(psl);for(int i=0;i<psl->size;i++){printf("%d ", psl->a[i]);}printf("\n");
}
//扩容函数
void SLCheckCapacity(SL* psl)
{assert(psl);if(psl->size==psl->capacity)		//当最后一个元素的下一个位置等于容量,即满了时要扩容{int newcapacity = psl->capacity == 0 ? 4 : psl->capacity * 2;	//	如果容量为0的话先赋初值为4,否则扩2倍SLDataType* tmp = (SLDataType*)realloc(psl->a, sizeof(SLDataType) * newcapacity); //用指针指向新地址,//realloc(a,b);第一个参数a是扩容前的原地址,b是扩容大小。扩容的容量大小是Int型用sizeof(SLDataType)求得数据类型所占字节子在成容量,是开辟新空间所占的字节数if(tmp==NULL){perror("realloc fail");return 0;}psl->a = tmp;//将新空间赋给原地址,如果不引用tmp,如果扩容失败会导致原地址也消失psl->capacity = newcapacity;}}
//尾插
void SLPushBack(SL* psl, SLDataType x)
{assert(psl);			//指针不能为空NULLSLCheckCapacity(psl);psl->a[psl->size] = x;//顺序表是在size插入数据psl->size++;
}
//头插
void SLPushFront(SL* psl, SLDataType x)
{assert(psl);SLCheckCapacity(psl);int end = psl->size - 1;while(end>=0){psl->a[end + 1] = psl->a[end];end--;}psl->a[0] = x;psl->size++;
}
//尾删
void SLPopBack(SL* psl)
{assert(psl);assert(psl->size > 0);psl->size--;			//size--,直接覆盖前一个,不用free()
}
//头删
void SLPopFront(SL* psl)
{assert(psl);assert(psl->size > 0);int begin = 0;while (begin < psl->size)	//	向前覆盖{psl->a[begin] = psl->a[begin + 1];begin++;}psl->size--;			//size--
}
//指定位置插入
void SLInsert(SL* psl, int pos, SLDataType x)
{assert(psl);assert(pos >=0 && pos <=psl->size );SLCheckCapacity(psl);int end = psl->size - 1;while(end>=pos){psl->a[end + 1] = psl->a[end];end--;}psl->a[pos] = x;psl->size++;}
//指定位置删除
void SLErase(SL* psl, int pos)
{assert(psl);assert(pos >= 0 && pos <= psl->size);while(pos<=psl->size-1){psl->a[pos] = psl->a[pos + 1];pos++;}psl->size--;
}
//查找
int SLFind(SL* psl, SLDataType x)
{assert(psl);assert(psl->size > 0);for(int i=0;i<psl->size-1;i++){if(psl->a[i]==x){return i;}}
}//test.c
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include"SL.h"
void text1()
{SL sl; //SL 结构体类型,sl是结构体变量SLInit(&sl);		//初始化SLPushBack(&sl,1);	//将变量sl指向的空间传递给形参,这样形参可以改变实参SLPushBack(&sl,2);SLPushBack(&sl,3);SLPushBack(&sl,4);SLPushBack(&sl,5);SLPrint(&sl);SLPushFront(&sl, 0);SLPushFront(&sl, -1);SLPushFront(&sl, -2);SLPushFront(&sl, -3);SLPrint(&sl);SLPopBack(&sl);SLPopBack(&sl);SLPopBack(&sl);SLPopBack(&sl);SLPopBack(&sl);SLPopBack(&sl);SLPrint(&sl);SLInsert(&sl, 2, 3);SLPrint(&sl);SLErase(&sl, 2);SLPrint(&sl);int t= SLFind(&sl, -1);SLErase(&sl, t);SLPrint(&sl);SLDestory(&sl);SLPrint(&sl);
}
int main()
{text1();/*printf("%d", sizeof(int));*/return 0;
}

第二题 移除元素

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。

不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组

元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

int removeElement(int* nums, int numsSize, int val){int left = 0;int right = 0;while(right<numsSize){if(nums[right]!=val){nums[left]=nums[right];left++;right++;}else{right++;}}return left;
}

题目链接: OJ链接

题目详解:移除元素 

第三题:删除有序数组中的重复项

给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。

考虑 nums 的唯一元素的数量为 k ,你需要做以下事情确保你的题解可以被通过:

  • 更改数组 nums ,使 nums 的前 k 个元素包含唯一元素,并按照它们最初在 nums 中出现的顺序排列。nums 的其余元素与 nums 的大小不重要。
  • 返回 k 。

题目链接:OJ链接 

 

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

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

相关文章

科普类——5G远程实时操控技术在国内港口应用简介(十三)

在中国&#xff0c;5G远程实时操控技术已经在多个港口得到应用&#xff0c;并且应用规模不断扩大&#xff0c;展现出良好的发展前景。以下是一些具体的应用案例&#xff1a; 上港集团洋山港&#xff1a;上港集团与华为合作&#xff0c;在全球港口首次将F5G技术应用于超远程控制…

ONLYOFFICE 8.0 测评:重塑办公新标杆,你绝对不能错过的版本!

ONLYOFFICE 8.0 测评&#xff1a;办公新境界的全新突破 一、全新的界面设计二、可填写的 PDF 表单 免费表单模板三、双向文本四、电子表格中的新增功能五、协作功能升级六、跨平台性能优化七、强化安全性八、更丰富的插件生态九、辅助功能&#xff1a;优化的屏幕朗读器 随着科…

华为数通方向HCIP-DataCom H12-821题库(单选题:421-440)

第421题 以下关于IS-IS中路由器分类的描述,错误的是哪一项? A、Level-1路由器无法与Level-2路由器建立邻接关系 B、华为路由器上配置IS-IS时,缺省时,路由器全局Level为Level-1-2 C、Level-2的LSDB只包含Level-2路由器所在区域的路由信息 D、Level-1路由器可以和Level-1-2路…

redis redisson报错 Unsupported protocol问题原因和解决方案

redis redisson报错 Unsupported protocol问题原因和解决方案 redisson没对老版本协议做兼容处理&#xff0c;一旦你升级版本就出现不兼容协议就这样报错了~ 不对老版本协议做兼容措施&#xff0c;有点憨八龟~ Redisson 在 3.13.0 and 3.19.0 更换了默认的协议&#xff0c;修改…

c语言--二进制和其他进制之间的转换

目录 一、前言二、二进制、十进制、十六进制、八进制的组成2.1二进制的组成2.2十进制的组成2.3八进制的组成2.4十六进制的组成 三、二进制转换为十进制3.1 二进制转换为十进制3.2十进制转换为二进制 四、二进制转八进制和十六进制4.1二进制转八进制4.2二进制转换为十六进制 五、…

[c++]多态的原理

引言 OOP的核心思想是多态性。多态性这个词源自希腊语&#xff0c;其含义是“多种形式”。我们把具有继承关系的多个类型称为多态类型&#xff0c;因为我们能使用这些类型的“多种形式”而无须在意它们的差异。引用或指针的静态类型与动态类型不同这一事实正是C语言支持多态性的…

企业微信私域流量运营:从新手到专家的指南

随着数字时代的深入发展&#xff0c;企业的营销策略逐渐转向线上&#xff0c;其中微信作为国内最大的社交平台&#xff0c;已成为众多企业运营私域流量的首选。本文将详细解析企业微信私域流量运营的策略、技巧及实践经验&#xff0c;帮助企业从入门到精通&#xff0c;实现高效…

ios搭建OpenGL环境

前言 本篇文章介绍在ios搭建OpenGL开发环境 在app的启动文章中&#xff0c;讲述了一个ios应用是如何启动的以及在IOS 13之后苹果公司推出的多窗口功能&#xff0c;通过app的启动这篇文章&#xff0c;我们基本能随心所欲的搭建一个app应用环境&#xff0c;搭建完成后的基本文件…

基于Python的深度学习的身份证识别考勤系统,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

Text Mesh Pro图文混排如何对任何图片都能实现

1&#xff09;Text Mesh Pro图文混排如何对任何图片都能实现 2&#xff09;Unity iOS平台的小图占用特别大的内存 3&#xff09;只在编辑器内&#xff0c;纹理不开启Read&Write情况下&#xff0c;如何获取纹理所有颜色值 4&#xff09;准备在海外发行游戏&#xff0c;有哪些…

dynamic_cast运行阶段类型识别

一、dynamic_cast运算符介绍 &#xff08;1&#xff09;运行阶段类型识别&#xff08;RTTI, Runtime Type Identification&#xff09;为程序在阶段确定对象的类型&#xff0c;只适用于包含虚函数的类。 &#xff08;2&#xff09;基类指针可以指向派生类对象&#xff0c;想要…

Python入门指北二十四

Python中有哪些常用的缓存技术&#xff1f;它们的特点是什么&#xff1f; Python中有多种常用的缓存技术&#xff0c;其中最常用的是内存缓存、文件缓存和数据库缓存。 内存缓存&#xff1a;将数据存储在内存中&#xff0c;以便快速访问。这种缓存方式具有速度快、效率高的特…

【3DGS】从新视角合成到3D Gaussian Splatting

文章目录 引言&#xff1a;什么是新视角合成任务定义一般步骤NeRF的做法NeRF的三维重建NeRF的渲染 3DGS的三维重建从一组图片估计点云高斯点云模型球谐函数参数优化损失函数和协方差矩阵的优化高斯点的数量控制(Adaptive Density Control)新的问题 3DGS的渲染&#xff1a;快速可…

适用于嵌入式单片机的压缩算法

1. 简介 因为MCU的内存和算力的限制&#xff0c;那些对内存消耗大或算力需求大的压缩算法就不适合在MCU中使用。适用于MCU的压缩算法主要有&#xff1a;RLE、LZ77、Huffman、LZO、DEFLATE、LZ4。 2. 算法 2.1. RLE RLE(Run Length Encoding)&#xff0c;也称为行程编码&…

通过html2canvas和jsPDF将网页内容导出成pdf

jsPDF参考&#xff1a;https://github.com/parallax/jsPDF html2canvas参考&#xff1a;https://github.com/niklasvh/html2canvas 或者 https://html2canvas.hertzen.com 思路 使用html2canvas将选中DOM生成截图对象将截图对象借助jsPDF导出为PDF文件 代码 这是一个示例&a…

如何编写接口测试用例

作为测试人&#xff0c;我们经常要对项目中的接口进行接口测试&#xff0c;那么在做接口测试的时候&#xff0c;如何写接口测试用例呢&#xff1f; 什么是接口测试 首先我们要了解一下&#xff0c;什么是接口测试&#xff1f; 那么首先要搞清楚&#xff0c;我们一般说的接口…

LeetCode第872题 - 叶子相似的树

题目 解答 class Solution {public void inorder(TreeNode node, List<Integer> values) {if (node null) {return;}if (node.left null && node.right null) {values.add(node.val);return;}inorder(node.left, values);inorder(node.right, values);}publ…

Spring面试大全-基础知识01

1.什么是Spring Spring框架是用于构建企业级Java的开源框架&#xff0c;他通过依赖注入和IOC容器帮我我们管理对象&#xff1b;支持AOP&#xff0c;将非业务功能&#xff08;日志&#xff0c;事务等&#xff09;从我们业务代码中分离出来&#xff0c;提高了代码的可维护性&…

nginx支持wasm文件

背景 需要支持wasm文件,折腾半天不行,最后搜索wasm解决 这都是后话了,只知道是文件,不知道文件类型是wasm,关于什么事wasm直接百度 可以参考:WebAssembly(WASM) 和云原生 | wasm和区块链-CSDN博客 铺垫 Nginx通过服务器端文件的后缀名来判断这个文件属于什么类型&#xff0c…

介绍 回调函数及使用方法

回调函数是一种常见的编程概念,它允许我们将一个函数作为参数传递给另一个函数,并在需要的时候调用这个函数。回调函数通常用于异步编程、事件处理和模块间的通信。 在使用回调函数时,我们首先定义一个函数,然后将其作为参数传递给另一个函数。当满足某个条件或事件发生时…