顺序表的定义

news2025/1/11 10:08:57

一.概述:


二.顺序表:

1.概念:

2.顺序表的实现:

1)静态分配:

比如数组,数组大小一旦确定,就不可以再被改变。

ElemType代表数据类型,比如整型,浮点型等。

例如:
#include<stdio.h>
#define MaxSize 10 //定义最大长度 
​
typedef struct
{
    int data[MaxSize]; //用静态的“数组”存放数据元素,最多存MaxSize个,且为int型,共4*10个字节 
    int length; //顺序表的当前长度 ,共4个字节 
}SqList; //顺序表的类型定义 
​
​
//基本操作 - 初始化一个顺序表
void InitList(SqList &L)
{
    for(int i=0;i<MaxSize;i++)
    {
        L.data[i]=0; //将所有数据元素设置为默认初始值 ,可省 
    }
    L.length=0; //顺序表初始长度为0 ,因为一开始没存元素 
} 
​
​
int main()
{
    SqList L; //声明一个顺序表 
    InitList(L); //初始化顺序表
    //...未完待续,后续操作 
    return 0;
}

上述代码将所有数据元素设置为默认初始值(InitList函数里)虽然可以省略,但还是会出问题,即如下代码:

如果没有初始化,访问数据到MaxSize,运行结果会有“脏数据”;

如果没有初始化,访问数据到length(顺序表的当前长度),运行结果不会走for循环,因为不初始化,意味着数组长度为0,就无法循环打印数组内容;

InitList函数里给顺序表长度length初始化为0不可省,因为无法预知在这小片的内存区域内之前存放的是什么数据,而且有的编译器默认给初始值,有的默认不给,为了保险,不可省初始化顺序表长度

注意:

静态分配局限性:“数组”长度不可调。

2)动态分配:

动态分配:“数组”长度可变。

指针data指向顺序表中的第一个数据元素。

malloc返回一个指向某个存储空间开始地址的指针。

ElemType指代数据类型,如整型,浮点型。

malloc函数和free函数都需要头文件#include<stdlib.h>。

3)实例:

#include<stdio.h>
#include<stdlib.h>
#define InitSize 10 //默认的最大长度 
​
typedef struct
{
    int *data; //指示动态分配数组的指针
    int MaxSize; //顺序表的最大容量
    int length; //顺序表的当前长度 
}SeqList;
​
​
void InitList(SeqList &L)
{
    //用malloc函数申请一片连续的存储空间
    L.data = (int *)malloc( InitSize*sizeof(int) ); //用最大长度乘,因为开辟的是整个空间
    L.length = 10; //一开始长度赋值为10,与InitSize(默认的最大长度 )一样 
    L.MaxSize = InitSize; 
}
​
​
//增加动态数组的长度
void IncreaseSize(SeqList &L,int len) //len是拓展的长度 
{
    int *p=L.data; //把L.data给指针p 
    L.data = (int *)malloc( (L.MaxSize+len)*sizeof(int) ); //此时申请的就是另一片新内存空间 
    for(int i=0 ; i<L.length ; i++)
    {
        L.data[i]=p[i]; //将数据复制到新区域 
    }
    L.MaxSize=L.MaxSize+len; //顺序表最大长度增加len
    free(p); //释放原来的内存空间(长度小的) 
} 
​
​
int main()
{
    SeqList L; //声明一个顺序表-->开辟连续的内存空间 
    InitList(L); //初始化顺序表
    //...往顺序表中随便插入几个元素...
    IncreaseSize(L,5); 
    return 0;
}


三.顺序表的实现:

1.顺序表的特点:

  • 随机访问,即可以在O(1)时间内找到第i个元素,因为顺序表是连续的,找到一个元素,剩下的元素加/减n(n为自然数)个字节就可以找到指定元素

  • 存储密度高,每个节点只存储数据元素(链式存储还存地址)

  • 拓展容量不方便(即便采用动态分配的方式实现,拓展长度的时间复杂度也比较高)

  • 插入和删除操作不方便,需要移动大量元素

2.图解:

3.总结:


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

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

相关文章

工厂数字化转型利器:.NET Core 与 ARMxy 嵌入式边缘计算网关

在当今数字化时代&#xff0c;工厂数字化转型已成为提高生产效率、降低成本、提升竞争力的关键。.NET Core与 ARMxy 嵌入式边缘计算网关的结合为工厂数字化转型提供了强大的技术支持。 一、.NET Core 的优势 跨平台性&#xff1a;.NET Core 可以在 Windows、Linux 和 macOS 等…

Python 从入门到实战10(流程控制-选择语句)

我们的目标是&#xff1a;通过这一套资料学习下来&#xff0c;通过熟练掌握python基础&#xff0c;然后结合经典实例、实践相结合&#xff0c;使我们完全掌握python&#xff0c;并做到独立完成项目开发的能力。 上篇文章我们通过举例学习了python 中集合的定义及相关操作。今天…

初识string(一)and内存管理

对类和对象的补充&#xff1a;缺省参数在函数定义中从右向左依次赋值&#xff0c;如果从右向左有一个参数没有赋值缺省参数&#xff0c;则左边的变量就不能在赋缺省参数&#xff0c;类中的变量可以赋缺省参数并且没有限制。 在类定义中我们总是看到函数后加const。这其实是调用…

算法备案究竟难在哪里?

算法备案究竟难在哪里&#xff1f; 在当今数字化社会中&#xff0c;算法备案已成为人工智能技术应用中的一个关键环节。然而&#xff0c;对于初学者和企业来说&#xff0c;这一过程充满了挑战和复杂性。本文将深入探讨算法备案的难度和应对策略。 算法备案的挑战 首先&#xff…

标准库标头 <filesystem> (C++17)学习

此头文件是文件系统支持库的一部分。本篇介绍filesystem命名空间的一些函数。 函数 在命名空间 std::filesystem 定义 absolute (C17) 组成一个绝对路径 (函数) canonicalweakly_canonical (C17) 组成一个规范路径 (函数) relativeproximate (C17) 组成一个相对路径 (函数) c…

提高开发效率的实用工具库VueUse

VueUse中文网&#xff1a;https://vueuse.nodejs.cn/ 使用方法 安装依赖包 npm i vueuse/core单页面使用&#xff08;useThrottleFn举例&#xff09; import { useThrottleFn } from "vueuse/core"; // 表单提交 const handleSubmit useThrottleFn(() > {// 具…

Android中Fragment的最佳实践—简易版的新闻应用

文章目录 Android中Fragment的最佳实践—简易版的新闻应用app/build.gradle当中添加依赖库新建新闻实体类News新建布局文件news_content_frag.xml新建NewsContentFragment类单页模式需新建NewsContentActivity新建news_title_frag.xml新建news_item.xml新建NewsTitleFragment修…

el-date-picker年份选择默认值为当前年,并且将获取时间转为年月日格式

<el-date-pickervalue-format"yyyy"v-model"leftQuery.year":disabled"timeArr && timeArr.length ! 0 ? true : false"type"year"placeholder"选择年"changechangeYear:picker-options"pickerOptions&quo…

Python GUI入门详解-学习篇

一、简介 GUI就是图形用户界面的意思&#xff0c;在Python中使用PyQt可以快速搭建自己的应用&#xff0c;自己的程序看上去就会更加高大上。 有时候使用 python 做自动化运维操作&#xff0c;开发一个简单的应用程序非常方便。程序写好&#xff0c;每次都要通过命令行运行 pyt…

第4章-03-用WebDriver获取页面Cookie

🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,CSDN博客专家,阿里云社区专家博主,2023年CSDN全站百大博主。 🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责人。 🏆本文已收录于专栏:Web爬虫入门与实战精讲,后续完整更新内容如下。 文章…

IDEA提交git代码前执行checkstyle校验

为了统一团队人员代码风格&#xff0c;在代码协同时经常会引入对应的checkstyle校验功能&#xff0c;配置好代码style后一般在IDEA执行mvn validate功能即可&#xff0c;如下图所示&#xff1a; 但是有时忘记执行怎么办&#xff0c;IDEA在代码提交前也有对应的配置&#xff0c;…

【Java并发编程 | JUC】线程

Java 线程 项目配置 pom.xml <dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.10</version></dependency><dependency><groupId>ch.qos.…

orcle 数据库 day0903

ok奥家人们&#xff0c;今天继续学习orcle数据库 一. 数据完整性 向某张表插入数据、更新、删除数据之前会对数据做校验&#xff0c;目 的就是为了确保数据的正确性、一致性、最大限度 减少重复 的数据、避免脏数据&#xff0c;这就是数据完整性。以下的数据就是脏 数据&a…

表情,符号,数字,字母,加密和解密源码

表情&#xff0c;符号&#xff0c;数字&#xff0c;字母&#xff0c;加密和解密源码 可以将表情&#xff0c;动物&#xff0c;水果&#xff0c;表情&#xff0c;手势&#xff0c;猫语&#xff0c;兽语&#xff0c;狗语&#xff0c;爱语&#xff0c;符号&#xff0c;数字&#x…

Mac M1安装Hive

一、下载解压Hive 1.官网地址 https://dlcdn.apache.org/hive/ 2.选择对应版本进行下载&#xff0c;这里我以3.1.3为例&#xff1b; 3.下载好后&#xff0c;进行解压&#xff0c;并重命名为hive-3.1.3&#xff0c;放到资源库目录下&#xff1b; 二、配置系统环境 1.打开~/…

WebGL系列教程一(开篇)

目录 1 前言2 推荐的书籍和网站3 WebGL简介4 本教程包含的主要内容预览4.1 顶点着色器4.2 片元着色器4.3 绘制点线面4.4 绘制三角形和四边形4.5 缓冲区4.6 旋转、平移、缩放4.7 动画4.8 颜色和纹理4.9 GLSL语法4.10 模型变换、视图变换、投影变换4.11 光照4.12 层次模型4.13 鼠…

【MySQL】MySQL常用的数据类型——表的操作

前言&#xff1a; &#x1f31f;&#x1f31f;本期讲解关于MySQL常用数据类型&#xff0c;表的简单使用&#xff0c;希望能帮到屏幕前的你。 &#x1f308;上期博客在这里&#xff1a;http://t.csdnimg.cn/wwaqe &#x1f308;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondl…

传统CV算法——特征匹配算法

Brute-Force蛮力匹配 Brute-Force蛮力匹配是一种简单直接的模式识别方法&#xff0c;经常用于计算机视觉和数字图像处理领域中的特征匹配。该方法通过逐一比较目标图像中的所有特征点与源图像中的特征点来寻找最佳匹配。这种方法的主要步骤包括&#xff1a; 特征提取&#xff…

JAVA开源项目 图书个性化推荐系统 计算机毕业设计

本文项目编号 T 015 &#xff0c;文末自助获取源码 \color{red}{T015&#xff0c;文末自助获取源码} T015&#xff0c;文末自助获取源码 目录 一、系统介绍1.1 业务分析1.2 用例设计1.3 时序设计 二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究…

jmeter之循环控制器使用

一、循环控制器介绍及使用 循环控制器作用&#xff1a; 通过设置循环次数&#xff0c;来实现循环发送请求 位置&#xff1a;测试计划------>线程组(右键添加)------>逻辑控制器------>循环控制器 如图&#xff1a; 参数介绍&#xff1a; 循环次数&#xff1a;5 …