数据结构线性表(一)之顺序存储结构思路

来源:互联网 发布:网络用语奶是什么意思 编辑:程序博客网 时间:2024/05/22 00:14

一:顺序存储,利用数组来实现顺序存储的.

注:线性表长度是线性表数据元素的个数,所以恒小于或等于数组长度

二:顺序存储结构代码

#define maxsize 20typedef int ElemType;//typedef struct  //具体typedef用法见博客{ElemType data[maxsize]; int length;  //线性表当前长度}SqList;

三:推算线性表的存储位置

LOC(ai+1)=LOC(ai)+c //LOC是获得该位置的函数,c指该变量占的存储单元

==>LOC(ai)=LOC(a1)+(i-1)*c

四:线性表与数组区别

线性表定义从1开始而数组从0开始,所以线性表的i位置就是数组i-1的位置

五:线性表获取元素操作

#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0typedef int Status/*status是函数类型,其值是函数结果状态代码,如ok等*/i>=1&&i<=ListLength操作结果:用e返回L中第i个数据元素的值Status GetElem(SqList L,int i,ElemType *e)  //L为结构体变量{if(L.length==0||i<1||i>L.length)return ERROR; //return了之后就退出了*e=L.data[i-1];return ok;}

六:顺序存储结构插入操作

思路:1.插入位置是否合理

            2.数组和线性表长度问题

            3.表长加1

一个元素插入到线性表i位置

操作结构

Status ListInsert(SqList *L,int i,ElemType e){int k;if(L->length==maxsize)return ERROR;if(i<1||i>L->length+1)return ERROR;if(i<=L->length){for(k=L->length-1;k>=i-1;k--) //将数组i-1位置之后元素向后移1L->data[k+1]=L->data[k];}L->data[i-1]=e;  //插入数据L->length++; //表长加1return OK;}

七.顺序存储结构删除操作

思路:1.删除位置是否合理

            2.取出删除数据元素

            3.从删除元素位置开始遍历到最后一个元素分别向前移动1个位置

            4.表长减1

删除线性表i位置的数据元素

Status ListDelete(SqList *L,int i,ElemType *e){int k;if(L->length==0)return ERROR;if(i<1||i>L->length)return ERROR;*e=L->data[i-1]; //删除if(i<L->length) //如果删除不是最后位置{for(k=i;k<L->length;k++) //将数组i-1位置之后元素向前移一个位置L->data[k-1]=L->data[k];}L->length--; //表长减1return OK;}

八.线性表顺序存储结构缺点:

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

2.当线性表长度变化大时,难以确定存储空间的容量(数组大小)

3.造成存储空间的“碎片”








3 0
原创粉丝点击