顺序表 (C语言版)

顺序存储:

 把逻辑上相邻的元素存储在物理位置上也相邻的存储单元中,元素之间的关系由存储单元的邻接关系来体现。

顺序表的特点:

  1. 能在O(1)的时间内找到第i个元素
  2. 存储密度高
  3. 拓展容量不方便
  4. 插入,删除操作不方便

C语言中可使用:sizeof(ElemType) 来查询数据元素的大小

顺序表的实现:

静态分配:

#include <stdio.h>
#define MaxSize 10    //宏定义最大长度为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]=%d\n",i,L.data[i]);
}

动态分配:

#include <stdlib.h>
#define InitSize 10 //默认最大长度为10
typedef struct{     //定义一个顺序表int *date;      //指示动态分配的指针int MaxSize;    //顺序表的最大容量int length;     //顺序表当前长度
}SeqList;void InitList(SeqList &L){  //初始化一个顺序表L.date = (int *)malloc( InitSize*sizeof(int) );     //用malloc申请一片连续的存储空间L.length = 0;L.MaxSize = InitSize;
}void IncreaseSize(SeqList &L, int len){     //动态增加顺序表的长度int *p = L.date;        //将旧数据保存L.date = (int *)malloc((L.MaxSize + len) * sizeof(int));    //开辟更大的存储空间for(int i = 0; i < L.length; i++){      //循环将旧数据复制到新区域L.date[i] = p[i];}L.MaxSize = L.MaxSize + len;        //最大长度增加lenfree(p);        //释放原来的存贮空间
}int main(){SeqList L;      //声明一个顺序表InitList(L);    //初始化顺序表//...此处省略部分代码,在顺序表中随便插入几个元素...IncreaseSize(L, 5);     //增加长度为5return 0;
}

顺序表的插入和删除:

插入:

将元素e插入到第i个位置

平均时间复杂度为O(n)

#include <stdio.h>
#define MaxSize 10    //宏定义最大长度为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;
}bool ListInsert(SqList &L, int i, int e){if(i<1 || i>L.length)return false;if(L.length >= MaxSize)return false;for(int j=L.length; j>=i; j--)L.data[j] = L.data[j-1];L.data[i-1] = e;L.length++;return true;
}int main() {SqList L;InitList(L);//此处省略一些代码,随便向顺序表中插入几个元素ListInsert(L, 3, 3);for(int i=0; i<MaxSize; i++)printf("data[%d]=%d\n",i,L.data[i]);
}

删除:

将第i个元素删除,并用e返回

平均时间复杂度为O(n)

#include <stdio.h>
#define MaxSize 10    //宏定义最大长度为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;
}bool ListDelete(SqList &L, int i, int &e){if(i<1||i>L.length)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() {SqList L;   InitList(L);//此处省略一些代码,随便向顺序表中插入几个元素int e = -1;if (ListDelete(L, 1, e))printf("已删除第3个元素,删除的元素值=%d", e);elseprintf("删除失败");return 0;       
}

查找元素:

按位查找:

平均时间复杂度O(1)

int GetElen(SqList L, int i){return L.data[i-1];
}

 按值查找:

平均时间复杂度O(n)

int LocateElem(SqList L, int e){for(int i=0; i<L.length; i++)if(L.data[i] == e)return i+1;return 0
}

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

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

相关文章

已解决java.lang.IllegalThreadStateException: 非法线程状态异常的正确解决方法,亲测有效!!!

已解决java.lang.IllegalThreadStateException: 非法线程状态异常的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 目录 问题分析 场景描述 报错原因 解决思路 解决方法 检查线程状态 正确管理线程生命周期 异常处理 总结 博主v&#xff1a…

JavaEE >> Spring Boot(1)

Spring Boot 前面已经介绍了 Spring &#xff0c;是为了简化 Java 程序开发的&#xff0c;而在前面创建的过程中就会发现其实 Spring 还是有点复杂&#xff0c;此时 Spring Boot 就诞生了&#xff0c; Spring Boot 是为了简化 Spring 程序开发的。 Spring Boot 即 Spring 脚手…

history日志发送到远程日志服务器

主要目标是设置history信息包含谁、源IP、在哪个目录下、做了什么工作&#xff0c;并实时将日志发送到日志审计服务。 &#xff08;一&#xff09;基础知识 1.logger 是一个shell接口&#xff0c;可以通过该接口使用rsyslog的日志模块 2./etc/profile.d/history.sh比配置/etc…

Android某钉数据库的解密分析

声明 1 本文章中所有内容仅供学习交流&#xff0c;抓包内容、敏感网址、数据接口均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 目的 1 解密app数据库&#xff0c;用数据库软件打开查看信息内容 入手…

【后端】python与django的开发环境搭建指南

安装Git 双击Git 客户端安装文件&#xff0c;在安装页面&#xff0c;单击“Next” 在安装路径选择页面&#xff0c;保持默认&#xff0c;单击“Next” 在功能组件选择页面&#xff0c;保持默认&#xff0c;单击“Next” 在开始菜单文件夹设置页面&#xff0c;保持默认&am…

浅谈rDNS在IP情报建设中的应用

在当今数字化世界中&#xff0c;互联网已经成为人们日常生活和商业活动中不可或缺的一部分。在这个庞大而复杂的网络生态系统中&#xff0c;IP地址是连接和识别各种网络设备和服务的基础。然而&#xff0c;仅仅知道一个设备的IP地址并不足以充分理解其在网络中的角色和行为。为…

复现SMO算法:理解SVM、SMO和高斯核【一、了解相关概念】

任务要求 复现带有高斯核的SMO算法。在LIBSVM中找到一个包含超过1000条数据的数据集。在保持超参数一致的情况下&#xff0c;确保自己实现的模型的精度与LIBSVM相比&#xff0c;相差不超过1%。 复现SMO算法&#xff1a;理解SVM、SMO和高斯核 在这篇博客中&#xff0c;我将深…

win11 桌面图标突然多 绿色小对勾,如何去除掉

突然间桌面图标每个上面都有一个绿色小狗狗&#xff0c;如下图所示&#xff0c;以为中病毒了&#xff0c;后来一查不是。 去除方法 1、鼠标在桌面空白处单击&#xff0c;选择“个性化”&#xff08;或直接按“windows键I键”&#xff09;调出设置菜单。 2、在左侧选择“主题”…

oracle varchar2类型如何转化为date类型

ALTER TABLE unit_bin_h ADD TRANS_TIME_TEMP DATE; –处理中文 上午/下午 –UPDATE unit_bin_h SET TRANS_TIME_TEMP TO_CHAR(TO_TIMESTAMP(trans_time, ‘dd-mon-rr hh.mi.ss.ff am’), ‘yyyy-MM-dd hh24:mi:ss’) WHERE TRANS_TIME LIKE ‘%下午’ OR TRANS_TIME LIKE ‘%…

C++:const成员和取地址操作符

目录 一、const成员 二、取地址及const取地址操作符重载 一、const成员 将const修饰的“成员函数”称之为const成员函数&#xff0c;const修饰类成员函数&#xff0c;实际修饰该成员函数 隐含的this指针&#xff0c;表明在该成员函数中不能对类的任何成员进行修改。 注&…

21.基础乐理-等音调扩展篇、为何一共十五个大调

首先 等音调 的概念是基于 等音 的概念&#xff0c;比如下图中的音名&#xff1a;因为用的按键相同&#xff0c;音名不同&#xff0c;所以被称为等音调 然后音名一共有35个&#xff0c;如下图&#xff1a;所以在理论上它会有35个大调&#xff0c;但是人总是倾向于选择简单、简洁…

MAC如何重装系统(怒冲30大洋,才拿到的教程~,收藏点赞兄弟们)

背景 应该是之前装了一些远程的软件&#xff0c;卸载一直不干净&#xff0c;导致电脑很卡&#xff0c;而且网络貌似出现了问题&#xff0c;钉钉直接登陆不上了。其余软件网络倒是还好。所以就去PDD&#xff0c;买了个教程&#xff0c;重装了一下。才发现是mac自带&#xff0c;…

云赛道---AI开发框架

MindSpore 旨在提供端边云全场景的 AI 框架。 MindSpore 可部署于端、边、云不同的 硬件环境&#xff0c;满足不同环境的差异化需求&#xff0c;如支持端侧的轻量化部署&#xff0c;支持云侧丰富的 训练功能如自动微分、混合精度、模型易用编程等。 MindSpore 全场景的几个重…

交互式探索微生物群落与生态功能的关系

微生物群落在生态系统中发挥则重要功能&#xff0c;我们在对微生物群落进行分析时&#xff0c;会将不同分类水平&#xff08;从门到属&#xff09;的微生物类群的相对丰度与测定的某一生态功能进行相关性分析。但由于微生物类群数较多&#xff0c;又有不同的分类水平&#xff0…

leetcode-二叉树的镜像-91

题目要求 思路1 1.遍历一遍二叉树&#xff0c;将左边的结点对应创建一个右边的结点 2.用此方法空间复杂度O(n)&#xff0c;并不是最优 思路2 1.将一个结点的左右子树进行交换&#xff0c;如果左子树还有左右结点&#xff0c;就再交换左子树的左右结点&#xff0c;以此递归下去…

Java23种设计模式-行为型模式之模板方法模式

模板方法模式&#xff08;Template Method Pattern&#xff09;在超类中定义了一个算法的骨架&#xff0c;将一些步骤延迟到子类中实现。模板方法模式使得子类可以在不改变算法结构的情况下&#xff0c;重新定义算法的某些步骤。 基本组成&#xff1a; Abstract &#xff08;抽…

富格林:安全落实防备诱导欺诈建议

富格林悉知&#xff0c;作为一项投资活动&#xff0c;炒黄金在近些年来备受欢迎&#xff0c;它交易灵活&#xff0c;投资者采取正规做单操作即可获取不错收益。但大家也要知道&#xff0c;投资存在一定风险&#xff0c;一定要做好防备虚假欺诈操作&#xff0c;避免诱导上当亏损…

单例模式(设计模式)

文章目录 概述懒汉式饿汉式双重加锁机制类级内部类方式单例模式适用场景Spring 的单例实现原理单例被破坏的五个场景单例的实现方式实现线程安全的单例模式 概述 单例模式&#xff1a;单例对象能保证在一个JVM中&#xff0c;该对象只有一个实例存在。保证被创建一次&#xff0…

Kubernetes:云原生时代的核心引擎

文章目录 一、Kubernetes简介&#xff1a;引领云原生潮流二、K8s的核心特性&#xff1a;自动化与智能化三、K8s的实践应用&#xff1a;打造高效云原生应用架构四、K8s的挑战与应对&#xff1a;安全与性能并重五、K8s的未来展望&#xff1a;无限可能与挑战并存《Kubernetes快速进…

【windows-搭建Ubuntu22LTS】

一、环境要求 1. windows版本要求 至少Windows 10 2020年5月(2004) 版, Windows 10 2019年5月(1903) 版&#xff0c;或者 Windows 10 2019年11月(1909) 版 2. 控制面板开启相关的程序(需要重启) 二、Microsoft store安装unbuntu 下载后直接运行&#xff08;稍微等会&#…