数据结构(顺序表)

news2024/11/17 9:35:37

文章目录

  • 一、线性表
    • 1、线性表
      • 1.1、线性表的定义
      • 1.2、线性表的操作
    • 2、顺序表
      • 2.1、顺序表的实现--静态分配
      • 2.2、顺序表的实现--动态分配
      • 2.2、顺序表的特点
    • 3、顺序表的基本操作
      • 3.1、插入操作
      • 3.2、删除操作
      • 3.3、查找操作
        • 3.2、按位查找
        • 3.2、按值查找

一、线性表

1、线性表

1.1、线性表的定义

在这里插入图片描述
在这里插入图片描述

1.2、线性表的操作

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、顺序表

在这里插入图片描述

2.1、顺序表的实现–静态分配

静态的数组分配后固定不变
在这里插入图片描述
Sq:sequence–顺序,序列

#include<stdio.h>
#define MaxSize 10

typedef struct{
	int data[MaxSize];
	int length;
}SqList;

void InitList(SqList &L){
	for(int i=0;i<MaxSize;i++){
		L.data[i]=0;
	}
	L.length=0;
}
int main(){
	SqList L;
	InitList(L);
	for(int i=0;i<MaxSize;i++)
		printf("data=%d\n",L.data[i]);
	return 0;
} 

在这里插入图片描述

2.2、顺序表的实现–动态分配

在这里插入图片描述

#include<stdlib.h>
#define InitSize 10

//结构体 
typedef struct{
	int *data;
	int MaxSize;
	int length;
}SeqList;

//初始化顺序表 
void InitList(SeqList &L){
	L.data=(int *)malloc(InitSize*sizeof(int));
	L.MaxSize=InitSize;
	L.length=0;
}
//增加长度操作
void IncreaseSize(SeqList &L,int len){
	int *p=L.data;
	L.data=(int *)malloc((InitSize+len)*sizeof(int));
	//将以前的数据复制到新区域
	for(int i=0;i<L.length;i++){
		L.data[i]=p[i];
	} 
	L.MaxSize=L.MaxSize+len;
	//销毁无效区域 
	free(p);
}

int main(){
	SeqList L;
	InitList(L);
	IncreaseSize(L,5);
	return 0;
}

在这里插入图片描述

2.2、顺序表的特点

在这里插入图片描述

3、顺序表的基本操作

3.1、插入操作

在这里插入图片描述

#include<stdlib.h>
#include<stdio.h>
#define InitSize 10
#define MaxSize 10
typedef struct{
	int *data;
	int length;
}SqList;

//初始化顺序表
void InitList(SqList &L){
	L.data=(int *)malloc(sizeof(int)*InitSize);
	L.length=0;
} 

//顺序表插入
bool ListInsert(SqList &L,int i,int e){
	//为了代码的健壮性,判断i的范围是否有效
	if(i<1||i>L.length+1)
		return false;
	//判断存储空间是否已满 
	 if(L.length>=MaxSize)
	 	return false; 
	//i及其i之后数据向后移动一位
	for(int j=L.length;j>=i;j--){
		L.data[j]=L.data[j-1];
	} 
	//赋值
	L.data[i-1]=e; 
	//长度+1
	L.length=L.length+1; 
	return true;
} 
int main(){
	SqList L;
	InitList(L);
	//给顺序表赋值
	for(int i=0;i<5;i++){
		L.data[i]=i+1;
		L.length++;
	} 
	ListInsert(L,3,3);
	for(int i=0;i<=5;i++){
		printf("%d\n",L.data[i]);
	} 
	return 0;
}

在这里插入图片描述
在这里插入图片描述
插入操作的时间复杂度:
在这里插入图片描述

3.2、删除操作

在这里插入图片描述

#include<stdlib.h>
#include<stdio.h>
#define InitSize 10
#define MaxSize 10
typedef struct{
	int *data;
	int length;
}SqList;

//初始化顺序表
void InitList(SqList &L){
	L.data=(int *)malloc(sizeof(int)*InitSize);
	L.length=0;
} 

//顺序表插入
bool ListInsert(SqList &L,int i,int e){
	//为了代码的健壮性,判断i的范围是否有效
	if(i<1||i>L.length+1)
		return false;
	//判断存储空间是否已满 
	 if(L.length>=MaxSize)
	 	return false; 
	//i及其i之后数据向后移动一位
	for(int j=L.length;j>=i;j--){
		L.data[j]=L.data[j-1];
	} 
	//赋值
	L.data[i-1]=e; 
	//长度+1
	L.length++; 
	return true;
} 
//顺序表删除
bool ListDelete(SqList &L,int i,int &e){
	//判断合法性
	if(i<1||i>L.length+1)
		return false;
	e=L.data[i-1];
	for(int j=i;j<L.length;j++){
		L.data[j-1]=L.data[j];
	}
	L.length--;
	return true;
} 
int main(){
	int e=-1;
	SqList L;
	InitList(L);
	//给顺序表赋值
	for(int i=0;i<5;i++){
		L.data[i]=i+1;
		L.length++;
	} 
	ListInsert(L,3,3);
	ListDelete(L,5,e);
	for(int i=0;i<L.length;i++){
		printf("%d\n",L.data[i]);
	} 
	printf("delete data = %d",e);
	return 0;
}

删除操作的时间复杂度:
在这里插入图片描述

3.3、查找操作

3.2、按位查找

在这里插入图片描述
请添加图片描述
在这里插入图片描述
按位查找的时间复杂度
在这里插入图片描述

3.2、按值查找

在这里插入图片描述

#include<stdlib.h>
#include<stdio.h>
#define InitSize 10

typedef struct{
	int *data;
	int MaxSize;
	int length;
}SeqList;

//初始化顺序表
void InitList(SeqList &L){
	L.data=(int *)malloc(sizeof(int)*InitSize);
	L.length=0;
	L.MaxSize=InitSize;
} 
//按值查找
int LocateElem(SeqList L,int e){
	for(int i=0;i<L.length;i++){
		if(L.data[i]==e)
		return i+1;
	}
	return 0;
} 
int main(){
	SeqList L;
	InitList(L);
	//给顺序表赋值
	for(int i=0;i<5;i++){
		L.data[i]=i+1;
		L.length++;
	} 
	int number=LocateElem(L,3);
	printf("%d",number);
	return 0;
}

在这里插入图片描述
结构类型比较:
在这里插入图片描述
时间复杂度
在这里插入图片描述

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

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

相关文章

自动驾驶的决策层逻辑

作者 / 阿宝 编辑 / 阿宝 出品 / 阿宝1990 自动驾驶意味着决策责任方的转移 我国2020至2025年将会是向高级自动驾驶跨越的关键5年。自动驾驶等级提高意味着对驾驶员参与度的需求降低&#xff0c;以L3级别为界&#xff0c;低级别自动驾驶环境监测主体和决策责任方仍保留于驾驶…

大数据数据流分析和处理的工具pig,从入门到精通!

介绍&#xff1a;Pig是一种数据流语言和运行环境&#xff0c;用于处理和分析大数据。 Pig由两个主要部分构成&#xff1a; Pig Latin语言&#xff1a;这是一种用于描述数据流的高级语言&#xff0c;它允许用户以较为简洁的方式编写数据处理和转换任务。 Pig执行环境&#xff1a…

JVM工作原理与实战(二十八):内存溢出和内存泄漏

专栏导航 JVM工作原理与实战 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、内存溢出与内存泄漏 1.内存溢出与内存泄漏介绍 2.内存泄漏的常见场景 3.解决内存溢出的步骤 总结 前言 JVM作为Java程序的运行环境&#xff0c;其负责解释和执行字节码&#x…

<蓝桥杯软件赛>零基础备赛20周--第18周--动态规划初步

报名明年4月蓝桥杯软件赛的同学们&#xff0c;如果你是大一零基础&#xff0c;目前懵懂中&#xff0c;不知该怎么办&#xff0c;可以看看本博客系列&#xff1a;备赛20周合集 20周的完整安排请点击&#xff1a;20周计划 每周发1个博客&#xff0c;共20周。 在QQ群上交流答疑&am…

Mediasoup Demo-v3笔记(七)——Mediasoup 下的业务操作

Mediasoup 主业务的创建流程 Mediasoup 权限验证的创建 在实际的代码中&#xff0c;在main.cpp 中调用mediasoup_worker_run函数 在mediasoup_worker_run函数实现中进行了各个模块的初始化 Mediasoup 数据流转 创建连接的过程 数据传输过程 WebRTC大规模部署方案 方案一…

2.5W+ Star的人工智能(AI)项目,微软官方出品,助你快速入门!

目录 [>> 微软推出的人工智能&#xff08;AI&#xff09;入门课程&#xff1a;microsoft/AI-For-Beginners](https://gitcode.com/microsoft/AI-For-Beginners)[>> AI学习项目汇总&#xff1a;tangyudi/Ai-Learn](https://gitcode.com/tangyudi/Ai-Learn)[>>…

pdf.js 实现pdf在线搜索,分页,下载,放大,打印功能

下载插件地址&#xff1a; https://download.csdn.net/download/xiaogg3678/88780912 浏览器在线预览地址&#xff1a; http://localhost/pdfjs-viewer/web/viewer.html?filehttp://localhost/pdfjs-viewer/web/compressed.tracemonkey-pldi-09.pdf

JVM篇:垃圾回收

如何判断对象可以被回收 Java中对象能否被回收&#xff0c;是根据兑现是否被引用来决定的。如果对象被引用了&#xff0c;说明该对象还在使用&#xff0c;不允许被回收 main栈帧中demo变量存储着Demo实例对象的地址&#xff0c;与Demo实例对象建立了连接关系此时Demo实例对象可…

windows系统中如何安装tomcat

在 Windows 系统中安装 Tomcat 通常涉及以下步骤: 1.下载 Tomcat: 访问 Apache Tomcat 官方网站。在 "Download" 部分找到适用于 Windows 的最新版本的 Tomcat。下载 Core 二进制分发版(通常是.zip文件)。 2.解压 Tomcat 压缩包: 将下载的.zip文件解压到…

如何在前端项目里接入Sentry监控系统并通过企业微信通知

能不能让用户录个屏过来呀&#xff1f; 用户使用的是什么机型的手机&#xff1f; 用户使用的什么浏览器呀&#xff1f; 用户的网络是什么情况&#xff1f; … … 线上出现问题时&#xff0c;技术部和业务部同学之间的对话诸如此类…业务同学也很栓Q呀&#xff0c;硬着头皮去问客…

Java Swing桌面项目打包成可执行jar

前言 最近有需求&#xff0c;将Swing项目打包为一个可执行的jar包&#xff0c;遇见了一些问题&#xff0c;参考AI助手&#xff0c;解决了遇到的问题&#xff0c;也有一些亲身实践体会&#xff0c;记录一下。开发环境IntelliJ IDEA&#xff0c;JDK8&#xff0c;用kotlin语言实现…

257:vue+openlayers 实现动态点点网格

第257个 点击查看专栏目录 本示例介绍演示如何在vue+openlayers中实现动态网格,这里通过第三方插件ol-grid来实现。具体的请参考示例源代码和API 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果 文章目录 示例效果图配置方式示例源代码(80行)相关API参考…

Discuz论坛搭建:Linux宝塔面板一键部署,固定地址畅享公网访问

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;网络奇遇记、Cpolar杂谈 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. 安装基础环境二. 一键部署Discuz三. 安装cpolar工具四. 配置域名访问Discuz…

DS:单链表的实现(超详细!!)

创作不易&#xff0c;友友们点个三连吧&#xff01; 在博主的上一篇文章中&#xff0c;很详细地介绍了顺序表实现的过程以及如何去书写代码&#xff0c;如果没看过的友友们建议先去看看哦&#xff01; DS&#xff1a;顺序表的实现&#xff08;超详细&#xff01;&#xff01;&…

最新整理盘点全球最先进的几十种人工智能大模型,OpenChat:性能高达105.7%,第一个超越ChatGPT的开源模型?附开源代码地址

最新整理盘点全球最先进的几十种人工智能大模型,OpenChat:性能高达105.7%,第一个超越ChatGPT的开源模型?附开源代码地址 前几天开源模型第一还是是Vicuna-33B、WizardLM,这不又换人了。对于开源模型的风起云涌,大家见怪不怪,不断更新的LLM榜单似乎也没那么吸引人了。 U…

ajax点击搜索返回所需数据

html 中body设置&#xff08;css设置跟进自身需求&#xff09; <p idsearch_head>学生信息查询表</p> <div id"div_1"> <div class"search_div"> <div class"search_div_item"> …

C#用 DateAndTime.DateAdd方法和DateTime.Add(TimeSpan) 方法分别添加一段时间间隔

目录 一、基本方法 1.用 DateAndTime.DateAdd方法添加一段时间间隔 2.用DateTime.Add方法添加一段时间间隔 二、实例 1.实例1&#xff1a;用 DateAndTime.DateAdd方法 2.实例2&#xff1a;用DateTime.Add方法 一、基本方法 1.用 DateAndTime.DateAdd方法添加一段时间间隔…

Sentinel:微服务守护神的崛起

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 Sentinel&#xff1a;微服务守护神的崛起 前言Sentinel简介&#xff1a;微服务流控的新宠Sentinel工作原理 前言 想象一下你正在主持一场盛大的马拉松比赛&#xff0c;参赛者如潮水般汇聚&#xff0c…

linux中配置文件目录为什么用etc来命名

在早期的 Unix 系统中&#xff0c;/etc 目录的名称确实来源于单词 “etcetera” 的缩写&#xff0c;最初意味着 “其他”&#xff0c;用来存放杂项或者不属于其他特定目录的文件。然而&#xff0c;随着时间的推移&#xff0c;/etc 目录的用途逐渐演变并专门化。 在现代的 Linux…

husky结合commitlint审查commit信息

commintlint是一个npm包用来规范化我们的commit信息&#xff0c;当然这个行为的操作时期是在git的commit-msg生命周期期间&#xff0c;这一点当然是有husky来控制&#xff0c;需要注意的是commit-msg作为一个git生命周期会被git commit和git merge行为唤醒&#xff0c;并且可以…