数据结构(C语言版)学习日记(6)

发布时间:2026/7/22 6:35:17
数据结构(C语言版)学习日记(6) 2.2线性表的顺序表示和实现顺序存储定义逻辑上相邻的数据元素存储在物理上相邻的存储单元中的存储结构。即逻辑上相邻物理上也相邻线性表顺序存储结构占用一片连续的存储空间。若中间存在空的存储单元即不连续则不是线性表的顺序存储单元例下面线性表中存在空的存储单元即不是线性表的顺序存储单元123顺序表中元素存储位置计算若知道每个元素的存储单元为lai的存储位置i则ai1存储位置为il例若每个数据元素占8个存储单元ai的存储位置是2000单元则ai1的存储位置是2008单元顺序表的特点类似数组因此可以用一维数组表示顺序表1地址连续2依次存放3随机存取4类型相同一维数组定义方式类型说明符 数组名【常量表达式】例int a[10]线性表长可变但是数组的长度不可动态定义解决方法用一变量表示顺序表的长度属性# define LIST_INIT_SIZE 100 //线性表的初始存储大小#define LISTINCREMENT 10 //线性表存储空间的分配增量typedef struct{ElemType *elem; //存储空间的基址int length; //当前的长度int listsize; //当前分配的存储容量}SqList(elem指示线性表的基地址length表示线性表的当前的长度listsize指示顺序表当前分配的存储空间大小一旦因插入元素而空间不足时可增加一个大小为存储LISTINCREMENT个数据元素的空间)线性顺序表操作注需要先预定义常量和类型# define TRUE 1# define FALSE 0# define OK 1# define ERROR 0# define INFFEASIBLE -1# define OVERFLOW -2typedef int Status;typedef char ElemType;Status InitList_Sq(SqList L){ //初始化LL.elem new ElemType[MAXSIZE];if (!L.elem) exit(OVERFLOW);L.length 0;return OK;}void DestroyList(SqList L){ //销毁Lif (L.elem) delete L.elem;}void ClearList(SqList L){ //清空LL.length 0;}int GetLength(SqList L){ //获得L的长度return (L.length);}int IsEmpty(SqList L){ //判断是否为空if (L.length 0) return 1;else return 0;}int GetElem(SqList Lint iElemType e){ //顺序表随机取值if (i 1 || i L.length) return ERROR;e L.elem[i-1];return OK;}