线性表(一)--顺序存储结构
来源:互联网 发布:java加载类的过程 编辑:程序博客网 时间:2024/06/06 19:30
线性表(List):零个或多个数据元素的有限序列。
线性表的抽象数据类型:
ADT 线性表(List)Data 线性表的数据对象集合为(a1,a2,......,an),每个元素的类型均为DataType。其中,除第一个元素a1外,每一个元素有且只有一个直接前驱元素,除了最后一个元素an外,每一个元素有且只有一个直接后继元素。数据元素之间的关系是一对一关系。Operation InitList(*L): 初始化操作,建立一个空的线性表L。 ListEmpty(L): 若线性表为空,返回true,否则返回false。 ClearList(*L): 将线性表清空。 GetElem(L,i,*e):将线性表L中的第i个位置元素值返回给e。 LocateElem(L,e):在线性表L中查找与给定值e相等的元素,如果 查找成功,返回该元素在表中序号表示成功;否则,返回0表示失败。 ListInsert(*L,i,e):在线性表L中的第i个位置插入新元素e。 ListDelete(*L,i,*e):删除线性表L中的第i个位置元素,并用e返回其值。 ListLength(L):返回线性表L的元素个数。endADT
线性表的顺序存储结构代码:
#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define MAXSIZE 50typedef int ElemType;typedef int Status;typedef struct{ ElemType data[MAXSIZE]; int length;}SqList;
说白了,线性表的顺序存储结构就三个属性:
1.存储空间的起始位置:数组data,它的存储位置就是存储空间的存储位置。2.线性表的最大存储容量:数组长度MAXSIZE。3.线性表的当前长度:length。
注: 数组的长度是存放线性表的存储空间的长度,也可以理解为线性表的最大长度;而线性表的长度是线性表中数据元素的个数。线性表的长度应小于或等于数组长度。
线性表的初始化,也就是将线性表长度置为0:
//初始化线性表Status InitList(SqList *L){ L->length=0; return OK;}
查找线性表中第i个元素,并返回值给e:
//查找线性表中第i个元素,并返回值给eStatus GetElem(SqList L,int i,ElemType *e){if(L.length==0||i<0||i>L.length) return ERROR; *e=L.data[i-1]; return OK;}
查找线性表中与e值相等的元素的位置(第i个元素):
//查找线性表中与e值相等的元素的位置(第i个元素)int LocateElem(SqList L,ElemType e){ int i; if(0==L.length) return ERROR; for(i=1;i<=L.length;i++){ if(e==L.data[i-1]) return i; else return ERROR; }}
判断线性表是否为空:
//判断线性表是否为空bool ListEmpty(SqList L){ if(L.length==0) return TRUE; else return FALSE;}
在线性表中第i个位置插入元素:
//在线性表中第i个位置插入元素Status ListInsert(SqList *L,int i,ElemType e){ int k; if(L.length==MAXSIZE||i<0||i>L.length+1) return ERROR; for(k=L.length;k>=i;k--){ L.data[k]=L.data[k-1]; } L.data[i-1]=e; return OK;}
删除线性表的第i个元素,并用e返回其值:
//删除线性表的第i个元素,并用e返回其值Status ListDelete(SqList *L,int i,ElemType *e){ int k; if(L.length==0||i<0||i>L.length) return ERROR; *e=L.data[i-1]; for(k=i;k<L.length;k++){ L.data[k-1]=L.data[k] } return OK;}
线性表的优缺点:
优点:1.无须为表示表中元素之间的逻辑关系而增加额外的存储空间。 2.可以快速地存取表中任一位置的元素。缺点:1.插入和删除操作需要移动大量元素。 2.当线性表长度变化较大时,难以确定存储空间的容量。 3.造成存储空间的“碎片”。
1 0
- 线性表(一)--顺序存储结构
- 02.线性表(一)顺序存储结构
- 线性表线性(顺序)存储结构
- 线性表的实现(一)顺序存储结构
- 线性表的顺序存储结构(一)
- 线性表数据结构解读(一)顺序存储结构ArrayList
- 数据结构线性表(一)之顺序存储结构思路
- 线性表(一)之线性表的顺序存储结构
- 【一】线性表以及线性表的顺序存储结构
- 顺序存储结构(线性表)
- 数据结构:线性表(顺序存储结构)
- 线性表的存储结构(顺序存储结构)
- 数据结构(一):线性表的顺序存储结构-顺序表的实现
- 线性表 -- 顺序存储结构
- 线性表顺序存储结构
- 线性表-顺序存储结构
- 线性表顺序存储结构
- 线性表顺序存储结构
- Linux下source命令
- 【Android】图片剪裁类库,解决com.android.camera.action.CROP在4.4版本以上遇到的intent类型问题
- 联想E530c 出现开机声音卡顿的问题
- java String.split丢失结尾空字符串的问题
- easyui-slider
- 线性表(一)--顺序存储结构
- U3D打图集流程
- LayoutInflater加载布局
- android典型代码系列(二十)------多线程下载、断点续传
- log4j日志配置详解
- Swift! Swift! Swift! 重要的事情说3遍!
- iOS之单例类两种实现
- iOS des加解密 base64输出
- Linux进程实时IO监控iotop命令