热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

线性顺序表c语言,数据结构学习笔记——线性表之顺序表(c语言实现)

1.概念顺序表即线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表数据元素。在线性表中,每个数据元素的类型都相同,一般可以

1.概念

顺序表即线性表的顺序存储结构 ,指的是用一段地址连续的存储单元依次存储线性表数据元素。在线性表中,每个数据元素的类型都相同,一般可以用一维数组来实现顺序存储结构。

4ea34b0c2a1a5de31a7387dd8d63f5f5.png

2.实现

完整代码下载地址 https://download.csdn.net/download/luotuoxiansheng/10746233

(1)建立顺序表的结构

利用c语言结构体来建立顺序表的结构,顺序表结构体中包含数据和表长。

#define MAXSIZE 10 //存储空间初始分配量

typedef int ElemType; //定义类型,此处为int(可变)

typedef int Status;

typedef struct

{

ElemType data[MAXSIZE];//创建数组存储空间

int length; //线性表当前长度

}sqlist;

(2)初始化表单

初始化一个n长度的顺序表并打印,表单数据初始化为1~n,n为函数形参InitLength。

1

2

3

4

5

n

示例代码:

void sqlistInit(sqlist *sl,int InitLength)

{

int j;

sl->length=0;

printf("当前表单:");

for(j=0;jdata[j]=j+1;

printf("%d ",sl->data[j]);

++sl->length;

}

printf("\n初始表单长度:%d\n",sl->length);

}

结果演示:

21a5c8f312df00013d57de01561caad4.png

f8dd29155dd910c2abdd10655dcc9637.png

(3)增:在表中第i个位置增加数据e

fbc0e3aaa3cef75d2406310a046cba79.png

示例代码:

Status sqlistInsert(sqlist *L,int i,ElemType e)

{

int k;

if(L->length==MAXSIZE)//表已满

{

printf("表已满!\n");

return error;

}

if(i<1||i>L->length&#43;1)//i不在范围内

{

printf("插入位置不在表单范围内&#xff01;\r\n\n");

return error;

}

if(ilength&#43;1)//插入数据不在表尾

{

for(k&#61;L->length;k>&#61;i;k--)//插入位置后数据元素依次向后移动一位

L->data[k]&#61;L->data[k-1];

}

L->data[i-1]&#61;e;//插入新元素

L->length&#43;&#43;;

return ok;

}

结果演示&#xff1a;

在任意位置插入数字&#xff1a;

e9ee60cd9404be258e5ca3daa07bbc1e.png

也可以在头部和尾部插入&#xff1a;

609be3ec139565a7786b938ddc07b789.png

(4)删&#xff1a;删除表中第i个位置数据

要删除第i个数据&#xff0c;即将i位置后数据依次左移&#xff0c;表长减一

fe80c90baf81770ed9fda1a218a18db1.png

示例代码&#xff1a;

Status sqlistDelete(sqlist *L,int i)

{

int k;

if(L->length&#61;&#61;0)//空表

{

printf("无删除对象&#xff0c;这是一个空表&#xff01;\n");

return error;

}

if(i<1||i>L->length)//i不在范围内

{

printf("找不到该删除对象&#xff01;\r\n\n");

return error;

}

for(k&#61;i;klength;k&#43;&#43;)//第i个位置后数据依次左移

L->data[k-1]&#61;L->data[k];

L->length--;

return ok;

}

结果演示&#xff1a;

删除第三个数字

53d74994c5f0bbb7911cd62d898c72a2.png

(5)改&#xff1a;改变表中第i个位置数据

6554374c33aa32d0d0fa4c27b54b27c5.png

示例代码&#xff1a;

Status sqlistChange(sqlist *L,int i,ElemType e)

{

int k;

if(L->length&#61;&#61;0)//空表

{

printf("无改变对象&#xff0c;这是一个空表&#xff01;\n");

return error;

}

if(i<1||i>L->length)//i不在范围内

{

printf("找不到该对象&#xff01;\r\n\n");

return error;

}

L->data[i-1]&#61;e;//改变数值

return ok;

}

5b5e323e4ed51c89b82591bc933c0e01.png

(6)查&#xff1a;查找表中第i个位置数据,并返回该值

第i个数据即为元素da[i-1]&#xff0c;在表单范围内返回该值即可

示例代码&#xff1a;

Status sqlistLocate(sqlist *L,int i)

{

int k;

if(L->length&#61;&#61;0)//空表

{

printf("这是一个空表&#xff01;\n");

return error;

}

if(i<1||i>L->length)//i不在范围内

{

printf("找不到该对象&#xff01;\r\n\n");

return error;

}

return L->data[i-1];

}

结果演示&#xff1a;

4af1e738654200fd42f70114746e72e7.png

(7)其他

此外还设计了打印表单&#xff0c;清零表单&#xff0c;重置表单等操作&#xff0c;详见完整代码

https://download.csdn.net/download/luotuoxiansheng/10746233

3.优劣势分析

优点

缺点

不需要为表中元素之间的逻辑关系而增加额外的存储空间

可以快速地存取表中任意位置的元素

插入和删除操作需要移动大量元素

当线性表长度变化较大时&#xff0c;难以确定存储空间的容量

造成存储空间的“碎片”及浪费

以上就是对顺序存储结构的线性表的学习及分享。



推荐阅读
  • 本文详细介绍了在ASP.NET中获取插入记录的ID的几种方法,包括使用SCOPE_IDENTITY()和IDENT_CURRENT()函数,以及通过ExecuteReader方法执行SQL语句获取ID的步骤。同时,还提供了使用这些方法的示例代码和注意事项。对于需要获取表中最后一个插入操作所产生的ID或马上使用刚插入的新记录ID的开发者来说,本文提供了一些有用的技巧和建议。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • 本文介绍了使用哈夫曼树实现文件压缩和解压的方法。首先对数据结构课程设计中的代码进行了分析,包括使用时间调用、常量定义和统计文件中各个字符时相关的结构体。然后讨论了哈夫曼树的实现原理和算法。最后介绍了文件压缩和解压的具体步骤,包括字符统计、构建哈夫曼树、生成编码表、编码和解码过程。通过实例演示了文件压缩和解压的效果。本文的内容对于理解哈夫曼树的实现原理和应用具有一定的参考价值。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • c语言\n不换行,c语言printf不换行
    本文目录一览:1、C语言不换行输入2、c语言的 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • Go语言实现堆排序的详细教程
    本文主要介绍了Go语言实现堆排序的详细教程,包括大根堆的定义和完全二叉树的概念。通过图解和算法描述,详细介绍了堆排序的实现过程。堆排序是一种效率很高的排序算法,时间复杂度为O(nlgn)。阅读本文大约需要15分钟。 ... [详细]
  • 李逍遥寻找仙药的迷阵之旅
    本文讲述了少年李逍遥为了救治婶婶的病情,前往仙灵岛寻找仙药的故事。他需要穿越一个由M×N个方格组成的迷阵,有些方格内有怪物,有些方格是安全的。李逍遥需要避开有怪物的方格,并经过最少的方格,找到仙药。在寻找的过程中,他还会遇到神秘人物。本文提供了一个迷阵样例及李逍遥找到仙药的路线。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
  • 本文介绍了一种轻巧方便的工具——集算器,通过使用集算器可以将文本日志变成结构化数据,然后可以使用SQL式查询。集算器利用集算语言的优点,将日志内容结构化为数据表结构,SPL支持直接对结构化的文件进行SQL查询,不再需要安装配置第三方数据库软件。本文还详细介绍了具体的实施过程。 ... [详细]
author-avatar
荣清右
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有