博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构教程--李春葆版(总结)之线性表-顺序存储结构概念
阅读量:2383 次
发布时间:2019-05-10

本文共 2844 字,大约阅读时间需要 9 分钟。

本文的主要内容来自数据结构教程--李春葆版,由“你是木头人”博主进行总结。

线性表的顺序存储结构

性质:

线性表所占用存储空间大小:

n乘以sizeof(ElemType),其中n表示线性表的长度,ElemType是线性表中的数据元素。

表中某数据元素的存储地址:

LOC(A)+i*sizeof(ElemType)(其中LOC(A)表示为起始位置,i为顺序表的下标序号)

线性表的顺序存储结构定义:

typedef struct{ElemType data[MaxSize]; //线性表的元素int length;             //线性表的长度}SqList;

线性表的顺序存储结构,如图所示:

建立顺序表

void CreateList(SqList *&L.ElemType a[],int n)//在长度为n的数组a中建立顺序表{int i;L=(SqList*)malloc(sizeof(SqList));  //分配线性表的顺序存储空间for(i=0;i
data[i]=a[i]; //把内容逐一存放在线性表的数组data之中L->length=n; //把该长度保存在线性表的结构体里}

建立顺序表,如线性表的顺序存储结构图所示。

初始化顺序表

void InitList(SqList *&L){L=(SqList*)malloc(sizeof(SqList));L->length=0;//只开辟内存但没有内容,要设置为空线性表,即长度置为0.}

初始化顺序表,如图所示:

 

销毁线性表

void DestroyList(SqList *&L){free(L);//销毁mallo申请的一块内存就相当于销毁线性表。}

判定线性表是否为空表

bool ListEmpty(SqList *L) //判线性表是否为空表{         return(L->length==0);}

线性表的长度

int ListLength(SqList *L)  //求线性表的长度{         return(L->length);}

输出线性表

void DispList(SqList *L)    {         int i;         if (ListEmpty(L)) return;         for (i=0;i
length;i++)                   printf("%c ",L->data[i]);         printf("\n");}

已知线性表的第i个元素,求该位置的元素值。

bool GetElem(SqList *L,int i,ElemType &e){         if (i<1 || i>L->length)                   return false;                               e=L->data[i-1];                                              return true;                                 }

已知线性表的元素值,求该元素值的位置。

int LocateElem(SqList *L, ElemType e)    {         int i=0;         while (i
length && L->data[i]!=e)                   i++;                                        //查找元素e         if (i>=L->length)                           //未找到时返回0                   return 0;         else                   return i+1;                                    //找到后返回其逻辑序号}

插入数据元素

bool ListInsert(SqList *&L,int i,ElemType e)    {         int j;         if (i<1 || i>L->length+1)                   return false;                       //参数错误时返回false         i--;                                         //将顺序表逻辑序号转化为物理序号         for (j=L->length;j>i;j--)  //将data[i]及后面元素后移一个位置                   L->data[j]=L->data[j-1];         L->data[i]=e;                                //插入元素e         L->length++;                                //顺序表长度增1         return true;                                  //成功插入返回true}

插入数据元素,如图所示:

 

删除数据元素

bool ListDelete(SqList *&L,int i,ElemType &e)        {         int j;         if (i<1 || i>L->length)                 //参数错误时返回false                   return false;         i--;                                   //将顺序表逻辑序号转化为物理序号         e=L->data[i];         for (j=i;j
length-1;j++)          //将data[i]之后的元素前移一个位置                   L->data[j]=L->data[j+1];         L->length--;                                  //顺序表长度减1         return true;                                  //成功删除返回true}

删除数据元素,如图所示:

 

 

 

转载地址:http://nwwab.baihongyu.com/

你可能感兴趣的文章
Emoji表情符号录入MySQL数据库报错的解决方案
查看>>
Linux系统CentOS6.2版本下安装JDK7详细过程
查看>>
Android Studio之Activity切换动画(三)
查看>>
我是怎样和Linux系统结缘并通过红帽RHCE认证的
查看>>
DIYer最担心的事来了!CPU降价彻底无望
查看>>
WannaCry勒索软件还在继续传播和感染中
查看>>
为发展中国家儿童提供的OLPC OS 13.2.10 发布
查看>>
帅的代价!无框车门冻死:特斯拉一招解决
查看>>
美银美林提高Intel科技股的股票评级
查看>>
专家预测2019年的网络安全形势
查看>>
简单聊聊Linux学习经历
查看>>
欧盟即将在免费开源软件项目中推行“漏洞赏金”
查看>>
苹果股价下跌会迎来iPhone最黑暗时刻吗?
查看>>
智能校服受到多数学生追捧
查看>>
这么多CPU/显卡成就是AMD首创:大写的YES
查看>>
java实现解压缩(Unzip)功能的实现
查看>>
java操作Access *.mdb数据库的实现
查看>>
jdbc连接数据库的代码片段
查看>>
X86汇编:debug命令详解
查看>>
flex(通过URLLoader)与后台jsp进行交互的例子,包括中文乱码的处理
查看>>