数据结构(顺序表)

文章目录

  • 一、线性表
    • 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 10typedef 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; //长度+1L.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; //长度+1L.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 10typedef 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.rhkb.cn/news/246436.html

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

相关文章

第二百八十八回

文章目录 1. 概念介绍2. 使用方法2.1 实现步骤2.2 具体细节 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何获取文件类型"相关的内容&#xff0c;本章回中将介绍如何播放视频.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 播放视频是我们常用…

Docker Registry(镜像仓库)

什么是Docker Registry 镜像仓库负责存储&#xff0c;管理和分发镜像&#xff0c;并且提供登入认证能力&#xff0c;建立仓库的索引。镜像仓库管理多个repositoy&#xff0c;repositoy通过命名来区分。每个repository包含一个或多个镜像&#xff0c;镜像通过镜像名称和标签&am…

k8s从初识到上天系列第二篇:kubernetes的组件和架构

&#x1f609;&#x1f609; 欢迎加入我们的学习交流群呀&#xff01; ✅✅1&#xff1a;这是孙哥suns给大家的福利&#xff01; ✨✨2&#xff1a;我们免费分享Netty、Dubbo、k8s、Mybatis、Spring、SpringSecurity、Docker、Grpc、各种MQ、Rpc、SpringCloud等等很多应用和源码…

【JAVA语言-第15话】集合框架(二)——List、ArrayList、LinkedList、Vector集合

目录 List集合 1.1 概述 1.2 特点 1.3 常用方法 1.4 ArrayList集合 1.4.1 概述 1.4.2 练习 1.5 LinkedList集合 1.5.1 概述 1.5.2 特点 1.5.3 常用方法 1.5.4 练习 1.6 Vector类 1.6.1 概述 1.6.2 练习 1.7 List实现类的异同点 List集合 1.1 概述 java.util…

【自动化测试】读写64位操作系统的注册表

自动化测试经常需要修改注册表 很多系统的设置&#xff08;比如&#xff1a;IE的设置&#xff09;都是存在注册表中。 桌面应用程序的设置也是存在注册表中。 所以做自动化测试的时候&#xff0c;经常需要去修改注册表 Windows注册表简介 注册表编辑器在 C:\Windows\regedit…

一篇文章带你了解C++中隐含的this指针

文章目录 一、this指针的引出二、this指针的特性【面试题】 一、this指针的引出 我们先来定义一个日期类Date&#xff0c;下面这段代码执行的结果是什么呢&#xff1f; class Date { public:void Init(int year, int month, int day){_year year;_month month;_day day;}v…

基于springboot+vue的明星周边产品销售网站(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 研究背景…

Python tkinter (6) Listbox

Python的标准Tk GUI工具包的接口 tkinter系列文章 python tkinter窗口简单实现 Python tkinter (1) —— Label标签 Python tkinter (2) —— Button标签 Python tkinter (3) —— Entry标签 Python tkinter (4) —— Text控件 GUI 目录 Listbox 创建listbox 添加元素…

AI数字人-数字人视频创作数字人直播效果媲美真人

在科技的不断革新下&#xff0c;数字人技术正日益融入到人们的生活中。近年来&#xff0c;随着AI技术的进一步发展&#xff0c;数字人视频创作领域出现了一种新的创新方式——AI数字人。数字人视频通过AI算法生成虚拟主播&#xff0c;其外貌、动作、语音等方面可与真实人类媲美…

09. Springboot集成sse服务端推流

目录 1、前言 2、什么是SSE 2.1、技术原理 2.2、SSE和WebSocket 2.2.1、SSE (Server-Sent Events) 2.2.2、WebSocket 2.2.3、选择 SSE 还是 WebSocket&#xff1f; 3、Springboot快速集成 3.1、添加依赖 3.2、创建SSE控制器 3.2.1、SSEmitter创建实例 3.2.2、SSEmi…

C++:引用

目录 概念&#xff1a; 引用的使用格式&#xff1a; 引用特性&#xff1a; 常引用 使用场景&#xff1a; 1、做参数 二级指针时的取别名 一级指针取别名 一般函数取别名 2、做返回值 函数返回值的原理&#xff1a; 引用的返回值使用&#xff1a; 引用和指针的对比&…

YOLOv8训练自己的数据集,通过LabelImg

记录下labelImg标注数据到YOLOv8训练的过程,其中容易遇到labelImg的坑 数据集处理 首先在mydata下创建4个文件夹 images文件夹下存放着所有的图片&#xff0c;包括训练集和测试集等。后续会根据代码进行划分。 json文件夹里存放的是labelImg标注的所有数据。需要注意的是&…

Ubuntu findfont: Font family ‘SimHei‘ not found.

matplotlib中文乱码显示 当我们遇到这样奇怪的问题时, 结果往往很搞笑 尝试1不行 Stopping Jupyter Installing font-manager: sudo apt install font-manager Cleaning the matplotlib cache directory: rm ~/.cache/matplotlib -fr Restarting Jupyter. 尝试2 This work fo…

Spring Boot 中的外部化配置

Spring Boot 中的外部化配置 一、配置文件基础1.配置文件格式&#xff08;1&#xff09;YAML 基本语法规则&#xff08;2&#xff09;YAML 支持三种数据结构 2.application 文件3.application.properties 配置文件4.application.yml 配置文件5.Environment6.组织多文件7.多环境…

HTTP动态代理的原理及其对网络性能的影响

HTTP动态代理是一种通过代理服务器来转发HTTP请求和响应数据的网络技术&#xff0c;它可以优化网络性能、提高网络安全性&#xff0c;并解决跨域请求的问题。本文将详细介绍HTTP动态代理的原理及其对网络性能的影响。 一、HTTP动态代理的原理 HTTP动态代理的基本原理是在客户…

微信小程序(十四)分包和分包预加载

注释很详细&#xff0c;直接上代码 上一篇 新增内容&#xff1a; 1.分包的配置 2.分包预加载的写法 先说说为什么需要分包&#xff1a; 小程序追求小而快&#xff0c;主包的大小控制是小程序上线的硬性要求&#xff0c;分包有利于小程序优化加载速度 分包的注意事项&#xff1a…

大模型+自动驾驶

论文&#xff1a;https://arxiv.org/pdf/2401.08045.pdf 大型基础模型的兴起&#xff0c;它们基于广泛的数据集进行训练&#xff0c;正在彻底改变人工智能领域的面貌。例如SAM、DALL-E2和GPT-4这样的模型通过提取复杂的模式&#xff0c;并在不同任务中有效地执行&#xff0c;从…

数字图像处理(实践篇)三十一 Raw图像数据转为RGB图像实践

目录 1 Raw图像和RGB图像 2 Raw图像的排布方式 3 方案 4 实践 5 其他 1 Raw图像和RGB图像 Raw图片是未经压缩的,没有任何数据损失,Raw图片保留了从图像传感器捕获的每个像素的原始信息,因此可以实现更高的图像质量。

用C语言实现贪吃蛇游戏!!!(破万字)

前言 大家好呀&#xff0c;我是Humble&#xff0c;不知不觉在CSND分享自己学过的C语言知识已经有三个多月了&#xff0c;从开始的C语言常见语法概念说到C语言的数据结构今天用C语言实现贪吃蛇已经有30余篇博客的内容&#xff0c;也希望这些内容可以帮助到各位正在阅读的小伙伴…

Flink实现数据写入MySQL

先准备一个文件里面数据有&#xff1a; a, 1547718199, 1000000 b, 1547718200, 1000000 c, 1547718201, 1000000 d, 1547718202, 1000000 e, 1547718203, 1000000 f, 1547718204, 1000000 g, 1547718205, 1000000 h, 1547718210, 1000000 i, 1547718210, 1000000 j, 154771821…