D.S基本操作及存储结构总结

线性表

基本操作(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开始的.

 

动态分配和静态分配的优缺点比较

静态分配的缺点:静态分配时,由于数组的大小和空间事先已经固定,一旦空间已经满了,再加入新的数据将会产生溢出,进而导致程序崩溃.

动态分配优点:而动态分配时,存储数组的空间是在程序执行过程中通过动态存储分配语句分配的,一旦数据空间已经满了就可以另外开辟一块更大的存储空间,用来替换原来的存储空间,从而达到扩充存储空间的目的,

而不需要为线性表一次性划分所有空间.

posted @ 2025-03-05 19:41  JaneEyreWork  阅读(7)  评论(0)    收藏  举报