静态分配空间
#define MaxSize 50
typedef struct{
int date[Maxize];
int length;
}SqList;
初始化
void InitList(SqList &L){
for(int i=0;i<MaxSize;i++)
L.date[i]=0;
L.length=0;
}
在 i 插入 e O(n)
i节点及后面节点后移
bool ListInsert(SqList &L,int i,int e){
if(i<1||i>L.length+1) return false;//插入下标错误
if(L.length>=MaxSize) return false;//当前顺序表已满
for(int j=L.length;j>=i;j--)
date[j]=date[j-1];
date[i-1]=e;
L.length++;
return true;
}
删除 i 节点
i+1节点覆盖i节点
bool ListDelete(SqList &L,int i,int &e){
if(i<1||i>L.length+1) return false;//插入下标错误
e=L.date[i-1];
for(int j=i;j<L.length;j++)
L.date[j-1]=L.date[j];
L.length--;
return true;
}
获取i位置的值
int GetElem(SqList L,int i){
return L.date[i-1];
}
查询e所处的位置
int LocateElem(SqList L,int e){
for(int i=0;i<L.length)
if(L.date[i]==e)
return i+1;
return 0;
}
完整程序
#include<bits/stdc++.h>
using namespace std;
//静态分配空间
#define MaxSize 50
typedef struct{
int date[Maxize];
int length;
}SqList;
//初始化
void InitList(SqList &L){
for(int i=0;i<MaxSize;i++)
L.date[i]=0;
L.length=0;
}
//在i插入e O(n)=
bool ListInsert(SqList &L,int i,int e){
if(i<1||i>L.length+1) return false;//插入下标错误
if(L.length>=MaxSize) return false;//当前顺序表已满
for(int j=L.length;j>=i;j--)
date[j]=date[j-1];
date[i-1]=e;
L.length++;
return true;
}
bool ListDelete(SqList &L,int i,int &e){
if(i<1||i>L.length+1) return false;//插入下标错误
e=L.date[i-1];
for(int j=i;j<L.length;j++)
L.date[j-1]=L.date[j];
L.length--;
return true;
}
//获取i位置的值
int GetElem(SqList L,int i){
return L.date[i-1];
}
int LocateElem(SqList L,int e){
for(int i=0;i<L.length)
if(L.date[i]==e)
return i+1;
return 0;
}
int main(){
SqList L;//声明顺序表
InitList(L);//初始化
if(ListInsert(L,3,3)){//第3个位置插入3
cout<<"插入成功"<<endl;
}
else{
cout<<"插入失败"<<endl;
}
int e=-1;
if(ListDelete(L,3,e)){
cout<<"删除第3个元素:"<<e<<endl;
}
else{
cout<<"删除位序不合法"<<endl;
}
return 0;
}