数据结构算法题day04

2024-05-28 22:36
文章标签 算法 数据结构 day04

本文主要是介绍数据结构算法题day04,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

数据结构算法题day04

  • 题目
  • 分析
  • 算法思想
  • 代码
  • 完整运行代码如下:

题目

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

分析

O(n) -> 扫描一次顺序表
O(1) -> 申请常数个辅助空间
1、找
2、删除(移动)

算法思想

1、K的作用是记录顺序表中X的个数
最终的链表长度:L.length = L.length - K
扫描顺序表,记录其中X的个数(K),将其中不为X的元素向前移K个单位
2、遍历顺序表,保留下不是X的值(删除所有的X)

代码

1、核心代码段:能体现算法思想的核心代码段
2、框架(大同小异)

框架代码段包括:
定义参数,括号匹配{}
void del_x(Sqlist* L,int x) {int i = 0;int k = 0;	//标记遍历到的x的个数while(i < L->length){if(L->data[i] == x)k++;elseL->data[i - k] = L->data[i];	//向前移动K个单位i++;}L->length = L->length - k;	//这句是什么意思?中断了?}
void del_x(Sqlist* L,int x){int i = 0;int k = 0;for(i = 0 ;i < L -> length ; i++){if(L->data[i] != x){L->data[k] = L->data[i];k++;}	}L->length = k;	//这句是什么意思?中断了?
}

完整运行代码如下:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#define MaxSize 10//定义最大长度
int InitArr[10] = { 1,2,2,3,4,2,5,2,6,7 };typedef struct {int data[MaxSize];//用静态的数据存放数据元素int length;//顺序表当前长度
}Sqlist;//顺序表的类型定义void print(Sqlist* L)
{for (int i = 0;i < L->length;i++){printf("%d ", L->data[i]);}
}
//初始化一个顺序表
void InitList(Sqlist* L)
{for (int i = 0;i < MaxSize;i++){L->data[i] = InitArr[i];//将所有数据元素设置为默认初始值}L->length = 10;//顺序表初始长度为0
}
//对长度为n的顺序表L,编写一个时间复杂度为O(n),空间复杂度为O(1)的算法,
//该算法删除线性表中的所有值为x的数据元素//算法思路
void del_x(Sqlist* L,int x){int i = 0;int k = 0;for(i = 0 ;i < L -> length ; i++){if(L->data[i] != x){L->data[k] = L->data[i];k++;}	}L->length = k;
}
int main() 
{Sqlist L;InitList(&L);//初始化一个顺序表:1,2,2,3,4,2,5,2,6,7printf("初始顺序表为:");print(&L);printf("请输入一个值x进行删除操作:");int x = 0;scanf("%d", &x);printf("\n");del_x(&L,x);printf("删除所有值为x的元素后顺序表为:");print(&L);return 0;
}

day04与day01作对比

这篇关于数据结构算法题day04的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

深入理解Mysql OnlineDDL的算法

《深入理解MysqlOnlineDDL的算法》本文主要介绍了讲解MysqlOnlineDDL的算法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小... 目录一、Online DDL 是什么?二、Online DDL 的三种主要算法2.1COPY(复制法)

redis数据结构之String详解

《redis数据结构之String详解》Redis以String为基础类型,因C字符串效率低、非二进制安全等问题,采用SDS动态字符串实现高效存储,通过RedisObject封装,支持多种编码方式(如... 目录一、为什么Redis选String作为基础类型?二、SDS底层数据结构三、RedisObject

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

使用雪花算法产生id导致前端精度缺失问题解决方案

《使用雪花算法产生id导致前端精度缺失问题解决方案》雪花算法由Twitter提出,设计目的是生成唯一的、递增的ID,下面:本文主要介绍使用雪花算法产生id导致前端精度缺失问题的解决方案,文中通过代... 目录一、问题根源二、解决方案1. 全局配置Jackson序列化规则2. 实体类必须使用Long封装类3.

Springboot实现推荐系统的协同过滤算法

《Springboot实现推荐系统的协同过滤算法》协同过滤算法是一种在推荐系统中广泛使用的算法,用于预测用户对物品(如商品、电影、音乐等)的偏好,从而实现个性化推荐,下面给大家介绍Springboot... 目录前言基本原理 算法分类 计算方法应用场景 代码实现 前言协同过滤算法(Collaborativ

openCV中KNN算法的实现

《openCV中KNN算法的实现》KNN算法是一种简单且常用的分类算法,本文主要介绍了openCV中KNN算法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录KNN算法流程使用OpenCV实现KNNOpenCV 是一个开源的跨平台计算机视觉库,它提供了各

springboot+dubbo实现时间轮算法

《springboot+dubbo实现时间轮算法》时间轮是一种高效利用线程资源进行批量化调度的算法,本文主要介绍了springboot+dubbo实现时间轮算法,文中通过示例代码介绍的非常详细,对大家... 目录前言一、参数说明二、具体实现1、HashedwheelTimer2、createWheel3、n

C#数据结构之字符串(string)详解

《C#数据结构之字符串(string)详解》:本文主要介绍C#数据结构之字符串(string),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录转义字符序列字符串的创建字符串的声明null字符串与空字符串重复单字符字符串的构造字符串的属性和常用方法属性常用方法总结摘

SpringBoot实现MD5加盐算法的示例代码

《SpringBoot实现MD5加盐算法的示例代码》加盐算法是一种用于增强密码安全性的技术,本文主要介绍了SpringBoot实现MD5加盐算法的示例代码,文中通过示例代码介绍的非常详细,对大家的学习... 目录一、什么是加盐算法二、如何实现加盐算法2.1 加盐算法代码实现2.2 注册页面中进行密码加盐2.

Java时间轮调度算法的代码实现

《Java时间轮调度算法的代码实现》时间轮是一种高效的定时调度算法,主要用于管理延时任务或周期性任务,它通过一个环形数组(时间轮)和指针来实现,将大量定时任务分摊到固定的时间槽中,极大地降低了时间复杂... 目录1、简述2、时间轮的原理3. 时间轮的实现步骤3.1 定义时间槽3.2 定义时间轮3.3 使用时