当前位置: 首页 > news >正文

数据结构2:线性表1-线性表类型及其特点

文章目录

  • 简介
  • 线性表分类
  • 顺序表和链表差异对比
  • 函数接口
    • 函数调用代码

简介

线性表最常用的数据结构之一,在实际应用中有着很多的应用,例如在操作系统中的各种链表以及数据库中的结构等。
线性表(LIST)的定义如下:零个或多个数据元素的有限序列。
从定义中可以看出线性表中的数据元素可以有零个,也可以有很多个,但总是有限的;数据元素与数据之间并不是无序的,而是有序的。除去第一个元素无前驱,最后一个数据元素无后继,每个数据元素如图所示。
线性表逻辑结构简图

线性表分类

根据存储类型,线性表分为顺序存储的线性表和链式存储的线性表。顺序存储的线性表(本教程简称为顺序表)的数据元素处于一片连续的存储空间内,有点类似于数组,如图2所示;
现象表顺序结构
链式存储的线性表(本教程简称链表),元素与元素之间不是连续的,而是像链子连起来的一样,如图3所示。
在这里插入图片描述

顺序表和链表差异对比

由于存储方式的不同,导致顺序表和链表的实现方式和性能有着很大的差异,应用也又所不同(接下来的教程会详细进行讲解),如表所示。

比较项目顺序表链表
元素读取速度可以根据线性表首地址和地址偏移量快速地计算出元素地址,可以迅速的获得想要读取的元素的值查找某个元素需要对链表进行遍历,元素的位置不同,查找的时间也不同,平均时间较长
存储空间的使用顺序表中所有的元素需要存储在一片连续的内存空间内,内存空间需要提前开辟,内存空间的大小很难把握,容易出现顺序表空间大小不够或者内存浪费的情况内存空间可以根据元素的数量很灵活地进行开辟和释放,不需要整块较大的连续内存来存储,相对会节约
代码实现难度可以依照数组或结构体数组的方式进行实现,相对而言,代码逻辑较为简单,易于理解和实现需要使用指针和结构体的知识,在插入很删除元素时,涉及到较多的指针操作,链表类型较多,代码不易理解

函数接口

虽然顺序表和链表有着很大的差异,但是他们的应用接口函数(API函数)都是类似的,下面介绍一下线性表的API函数。
代码结构如下:
List.h中是线性表结构的定义和各个API函数声明现,List.c中是线性表的各个API函数具体实现(代码实际并未实现,本章只是进行简单的介绍,后续章节会有详细的功能代码)。
线性表的API函数:

/*********************************
注意:本章节代码只是用于介绍线性表的
API函数和使用方法,函数和数据类型
本身实际意思不大,后续章节会有具体
的实现代码。
*********************************/
//定义线性表元素数据类型
typedef struct 
{int data;
}element;
//定义线性表数据类型
typedef struct
{int element;int length;
}List;
//生成一个线性表
List * ListCreate();
//销毁一个链表
int ListDestory(List *list); 
//清空一个链表
int ListClear (List *list);
//获取链表的长度
int ListGetLength(List *list);
//删除链表中相应位置的元素
element ListDelete(List *list, int position);
//在线性表中的相应位置添加元素
int ListAdd(List *list, int position, element e);
//获取线性表中相应位置的元素
element ListGet(List *list, int position);

函数调用代码

#include "mylist.h"
#include "stdio.h"
#include "stdlib.h"
int main()
{//建立一个线性表指针List * MyList = NULL;//建立三个线性表元素,并赋值element data0, data1, data2;data0.data = 0;data1.data = 1;data2.data = 2;//建立一个线性表MyList = ListCreate();//向线性表中增加元素ListAdd(MyList,0,data0);ListAdd(MyList,0,data1);ListAdd(MyList,1,data2);//获取线性表中0位置对应的元素ListGet(MyList, 0);//获取链表的长度ListGetLength(MyList);//删除线性表中1位置对应的长度ListDelete(MyList, 1);//清空线性表ListClear(MyList);//销毁线性表ListDestory(MyList);return 0;
}
http://www.dtcms.com/a/487442.html

相关文章:

  • 网站外包如何报价做那种事的网站
  • 张家港做网站的推荐驻马店app和网站开发公司
  • 目标检测(一)
  • 石家庄免费做网站专做药材的网站有哪些
  • 基本功 | 一文讲清多线程和多线程同步
  • 360门户网站怎样做广州百度seo代理
  • C++蓝桥杯之函数与递归
  • Oracle AWR报告分析:诊断RAC Global cache log flush性能故障
  • python - 第四天
  • 领取流量网站药剂学教学网站的建设
  • 端端网站开发网络广告网站怎么做
  • threejs(五)纹理贴图、顶点UV坐标
  • debug - MDK - arm-none-eabi - 将MDK工程编译过程的所有命令行参数找出来
  • 网站怎么维护百度会收录双域名的网站么
  • Oracle数据库基本命令的8个模块
  • Vue3中的计算属性和监视属性【5】
  • Docker部署WordPress及相关配置
  • 大自然的网站设计营销型企业网站源码
  • 网站如何做线上支付功能免费刷推广链接的网站
  • 使用Flask部署PyTorch模型
  • 新版视频直播点播平台EasyDSS用视频能力破局!
  • python_视频切分
  • vscode 侧边文件夹名字体大一点
  • C++ 进阶特性深度解析:从友元、内部类到编译器优化与常性应用
  • Linux 线程与页表
  • 做产地证的网站江苏和住房建设厅网站
  • 西安网站制作开发深圳专业建站多少钱
  • QT for Android 安卓开发之调用Java程序
  • 攻防世界-Web-题目名称-文件包含
  • **云迁移之旅:探索发散创新的路径**随着云计算技术的日益成熟,越来越多的企业开始