线性表
基本操作(12个)
//线性表的基本操作 12个//构造一个空的线性表L void InitList(SqList &L);//销毁线性表L void DestroyList(SqList &L);//将线性表L重置为空表 void ClearList(SqList &L);////表判空:空 返回TRUE(1) 非空返回FALSE(0) Status ListEmpty(SqList L);//返回线性表L中数据元素的个数 int ListLength(SqList L);//用e返回L中第i个位置的数据元素的值 Status GetElem(SqList L,int i,ElemType &e);//返回L中第一个与e满足关系compare()的数据元素的位序, //如果这样的元素不存在,则返回0 int LocateElem(SqList L,ElemType e,Status(*compare)(ElemType,ElemType));//如果cur_e是L的数据元素,且不是第一个,则用pre_e返回其前驱; //否则操作失败,pre_e无定义 Status PriorElem(SqList L,ElemType cur_e,ElemType &pre_e);//若cur_e是L的数据元素,且不是最后一个,用next_e返回其后继; //否则操作失败,next_e无定义 Status NextElem(SqList L,ElemType cur_e,ElemType &next_e);//在L中第i个位置之前插入新的数据元素e,L的长度加1 Status ListInsert(SqList &L,int i,ElemType e);//删除L的第i个数据元素,并用e返回其值,L的长度减1 Status ListDelete(SqList &L,int i,ElemType &e);//依次对L的每个数据元素调用函数visit(), //visit()函数的形参加&,表明可以通过函数visit()改变元素的值 void ListTraverse(SqList L,void(*visit)(ElemType &));
顺序表
1. 动态分配存储结构
#define LIST_INIT_SIZE 10 //线性表存储空间的初始分配量 #define LIST_INCREMENT 2 //线性表存储空间的分配增量 typedef struct SqList{ElemType *elem;//存储空间基地址int length;//当前长度int listsize;//当前分配的存储容量(以sizeof(ElemType)为单位) }SqList;
2. 静态分配存储
#define MaxSize 50 //定义线性表的最大长度为50 typedef struct {ElemType data[MaxSize];//顺序表的元素int length;//顺序表的当前长度 }SqList;//顺序表的类型定义
注意区分线性表和数组的区别:线性表中的元素位序是从1开始,而数组中的元素下标是从0开始的.
动态分配和静态分配的优缺点比较
静态分配的缺点:静态分配时,由于数组的大小和空间事先已经固定,一旦空间已经满了,再加入新的数据将会产生溢出,进而导致程序崩溃.
动态分配优点:而动态分配时,存储数组的空间是在程序执行过程中通过动态存储分配语句分配的,一旦数据空间已经满了就可以另外开辟一块更大的存储空间,用来替换原来的存储空间,从而达到扩充存储空间的目的,
而不需要为线性表一次性划分所有空间.