一.顺序表存储结构
1.顺序表存储结构
/*顺序表存储结构*/
#define MAXSIZE 100//顺序表可能达到的最大长度
typedef struct{
ElemType *elem; //存储空间的基地址
int length; //当前长度
}SqList;
2.实例运用
//多项式的顺序存储结构
#define MAXSIZE 100
typedef struct{
float coef;//系数
int expn;//指数
}Polynomial;
typedef struct{
Polynomial *elem;//存储空间的基地址
int length; //多项式中当前项的个数
}SqList;
//图书数据的顺序存储结构
#define MAXSIZE 10000
typedef struct{
char no[20];
char name[50];
float price;
}Book;
typedef struct{
Book*elem;
int length;
}SqList;
二.顺序表中基本操作的实现
1.顺序表的初始化
//顺序表的初始化(构造一个空的顺序表)
Status InitList(SqList &L){
//构造一个空的顺序表L
L.elem=new elemType(MAXSIZE);//为顺序表分配一格大小为MAXSIZE的数组空间
if(!L.elem)exit(OVERFLOW);//存储分配失败退出
L.length=0;//空表长度为0
return OK;
}
2.顺序表的取值
//顺序表的取值
Status GetElem(SqList L,int i,ElemType &e){
if(i<1||i>L.length) return ERROR;//判断i值是否合理,若不合理,返回ERROR
e=L.elem[i-1];//elem[i-1]单元存出第i个数据元素
return OK;
}
3.顺序表的查找
//顺序表的查找
int LocalteElem(SqList L,ElemType e){
for(int i=0;i<L.length;i++){
if(L.elem[i]==e) return i+1;//查找成功,返回序号i+1
return 0;//查找失败,返回0
}
}
4. 顺序表的插入
//顺序表的插入
Status ListInsert(SqList &L,int i,ElemType e){
//在顺序表L中第i个位置之前插入新的元素e,i值的合法范围是1<=i<=L.length+1
if(i<1||i>L.length+1) return ERROR;//i值不合法
if(L.length==MAXSIZE) return ERROR;//当前存储空间已满
for(j=L.length-1;j>=i-1;j--){
L.elem[j+1]=L.elem[j] //插入位置及以后的元素后移
}
L.elem[i-1]=e;//将新元素e放入第i个位置
++L.length;
return OK;//表长加1
}
5.顺序表删除
//顺序表删除
Status ListDelete(SqList &L,int i){
//在顺序表L中删除第i个位置,i值的合法范围是1<=i<=L.length
if(i<1||i>L.length) return ERROR;//i值不合法
for(j=i;j<=L.length-1;j++){
L.elem[j-1]=L.elem[j]//被删除之后的元素前移
}
--L.length;
return OK;
}
——插入和删除的区别:
1.插入:L.elem[i-1]=e;
删除:无传入e;
2.插入:1<=i<=L.length+1;
删除:1<=i<=L.length;
3…插入:for(j=L.length-1;j>=i-1;j–);
删除: for(j=i;j<=L.length-1;j++);