线性表
//主要基本操作(创销、增删改查)
InitList(&L):初始化表。构造一个空的线性表。
DestroyList(&L):销毁操作。销毁线性表,并释放线性表L所占用的内存空间。
ListInset(&L,i,e):插入操作。在表L中的第i个位置上插入指定元素e
ListDelete(&L,i,&e):删除操作。删除表L中的第i个位置元素,并用e返回删除元素的值。
LocateElem(L,e):按值查找操作。在表L中查找具有给定关键字值的元素。
GetElem(L,i):按位查找操作。获取表L中第i个位置的元素的值。
//其他常用操作
Length(L):求表长。返回线性表L的长度,即L中数据元素的个数。
Empty(L):判空操作。若L为空表,则返回true,否则返回false。
PrintList(L):输出操作。按前后顺序输出线性表L的所有元素值。
顺序表
静态分配
1. #define MaxSize 50 //定义线性表最大的长度
2. typedef struct{
3. ElemType data[MaxSize]; //顺序表的元素
4. int length; //顺序表的当前长度
5. }SqList;
初始化(静态分配)
1. void InitList(SqList &L){
2. for(int i=0;i<MaxSize;i++)
3. L.data[i]=0; //将所有数据元素设置为默认值
5. L.length=0; //顺序表初始长度为0
6. }
动态分配
1. #define InitSize 100 //表长度的初始定义
2. typedef struct{
3. ElemType *data; //指示动态分配数组的指针
4. int MaxSize,length; //数组的最大容量和当前个数
5. }SeqList;
初始化(动态分配)
1. viod InitList(SeqList &L){
//用malloc函数申请一片连续的存储空间
2. L.data=(int *)malloc(InitSize*sizeof(int));
3. L.lebgth=0;
4. L.MaxSize=InitSize;
5. }
增加长度(动态分配)
1. void IncreaseSize(SeqList &L,int len){
2. int *p=L.data;
3. L.data=(int *)malloc((L.MaxSize+len)*sizeof(int));
4. for(int i=0;i<L.length;i++){
5. L.data[i]=p[i];
6. }
7. L.MaxSize=L.MaxSize+len;
8. free(p);
9. }
插入操作
1. bool ListInsert(SqList &L,int i,ElemType e){
2. if(i<1||i>L.length+1) //判断i的范围是否有效
3. return false;
4. if(L.length>=MaxSize) //当前存储空间已满,不能插入
5. return false;
6. for(int j=L.length;j>=i;j--) //将第i个元素及之后元素后移
7. L.data[j]=L.data[j-1];
8. L.data[i-1]=e;
9. L.length++;
10. return true;
11. }
删除操作
1. bool ListDelete(SqList &L;int i;ElemType &e){
2. if(i<1||i>L.length) //判断i的位置是否有效
3. return false;
4. e=L.data[i-1]; //将被删除的元素赋值给e
5. for(int j=i;j=<L.length;j++) //将第i个位置后的元素前移
6. L.data[j-1]=L.data[j];
7. L.length--; //线性表的长度减1
8. return true;
9. }
按值查找
1. int LocateElem(SqList L;ElemType e){
2. int i;
3. for(i=0;i=<L.length;i++)