#define MAXSIZE 100
#define OVERFLOW -2
typedef int ElemType;
typedef struct{
ElemType *elem;
int length;
}SqList;
//初始化为空表,动态申请存储空间(判断内存是否申请成功),元素个数为零所以表长为0
Status InitList(SqList &L){//L双向传递
//构造一个空的顺序表
L.elem=new ElemType[MAXSIZE];//为顺序表分配一个大小为MAXSIZE的数组空间
if(!L.elem) exit(OVERFLOW);//存储分配失败退出
L.length=0;//空表长度为0
return OK;
}
//顺序表的销毁
Status DestoryList(SqList &L){//L双向传递
if(L.elem){//判断元素是否存在
delete [] L.elem;//直接释放整个顺序表的空间
L.length==0;//空间已经释放表长为0
}
return OK;
}
//顺序表的清空
Status ClearList(SqList &L){//双向传递
L.length==0;//将表长置为0,因为插入,删除,查找等操作都会对参数有一个类似限制条件:if(i>L.length||i<1),这
// 样就保证了在把L.length==0后,其他操作就不能访问到原来的那些元素
return OK;
}
//判断顺序表是否为空
bool ListEmpty(SqList L) {//单向传递
if(L.length==0) return true;
return false;
}
//顺序表元素个数
Status ListLength(SqList L){
return L.length;
}
//顺序表的取值
Status GetElem(SqList L,int i,ElemType &e){//e双向传递
if(i<1||i>L.length) return ERROR;//逻辑排位顺序是从1开始,下标是从0开始,相差1
e=L.elem[i-1];//elem[i-1]单元存储第i个数据元素
return OK;
}
//顺序表的查找
Status LocateList(SqList L,ElemType e){
for(int i=0;i<L.length;i++)//按下标顺序遍历查找与e相同的元素,
if(L.elem[i]==e) return i+1;//查找成功返回i+1
return 0;//查找失败返回0
}
//顺序表中元素前驱的查找
Status PriorElem(SqList L,int i,ElemType &e){
if(i<=1||i>L.length) return ERROR;//元素不能是第一个,否则操作错误
e=L.elem[i];//得到前驱元素
return OK;
}
//顺序表中元素后继的查找
Status NextElem(SqList L,int i,ElemType &e){
if(i<1||i>=L.length) return ERROR;//元素不能是最后一个,否则操作错误
e=L.elem[i-2];//得到后继元素
return OK;
}
//顺序表的插入
Status ListInsert(SqList &L,int i,ElemType e){
//在顺序表中第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(int j=L.length-1;j>=i-1;j--)//后移时是从最后一个元素开始后移(j=L.length-1,j是下标,而L.length是按照逻辑排位顺序计数的所以是从1开始计数的
L.elem[j+1]=L.elem[j];//插入位置及之后的元素后移
L.elem[i-1]=e;//将新元素e放入第i个位置
L.length++;//表长加1
return OK;
}
//顺序表的删除
Status ListDelete(SqList &L,int i,ElemType e){
//在顺序表L中删除第i个元素,i值的合法范围是1<=i<=L.length
if(i<1||i>L.length) return ERROR;//i值不合法
for(int j=i;j<=L.length-1;j++)
L.elem[j-1]=L.elem[j];//被删除元素之后的元素前移
L.length--;//表长减1
return OK;
}
//创建顺序表
Status CreateList(SqList &L,int n){
for(int i=0;i<n;i++)
cin>>L.elem[i];
L.length=n;
return OK;
}
//遍历顺序表
Status TraverseList(SqList L){
cout<<"L=(";
for(int i=0;i<L.length;i++)
cout<<L.elem[i]<<',';
if(L.length) cout<<"\b";
cout<<")";
return OK;
}
数据结构顺序表基本操作
最新推荐文章于 2025-04-04 21:45:47 发布