(一)该顺序表下标从一开始,具有增删查等操作
实现如下:
#include<iostream>
using namespace std;
const int maxSize = 100;
class sqlist{
public:
sqlist():length(0){}
int LocateElem(int x);//查找元素位置
int insert(int x);//在顺序表最后插入元素
int insert(int p,int x);//在指定下标中插入元素
int deleteElem(int p,int &e);//删除指定下标的元素
int deleteElem(int &e);//删除最后一个元素
int getElem(int p,int &e);
void createList(int arr[],int n);
void showList();
private:
int data[maxSize];
int length;
};
int sqlist::LocateElem(int x){
int i;
for(i=1;i<=length;i++)
if(x == data[i])
return i;
return 0;//若没找到,则返回0,因为0位置也不存放元素
}
int sqlist::insert(int p,int x){//在指定下标中插入元素
if(p < 1 || p > length+1 || p > maxSize - 1)
return 0;
for(int i=length;i>=p;i--)
data[i+1] = data[i];
data[p] = x;
length++;//顺序表长度要加一
return 1;
}
int sqlist::insert(int x){//在顺序表最后插入元素
if(length == maxSize - 1)
return 0;
data[length+1] = x;
length++;//顺序表长度要加一
return 1;
}
int sqlist::deleteElem(int p,int &e){//删除指定位置的元素
if(p < 1 || p > length)
return 0;
e = data[p];
for(int i = p;i <= length-1;i++)
data[i] = data[i+1];
length--;//长度减一
return 1;
}
int sqlist::deleteElem(int &e){//删除最后一个元素
if(length < 1)
return 0;
e = data[length];
length--;//长度减一
return 1;
}
void sqlist::showList(){
for(int i=1;i<=length;i++)
cout<<data[i]<<" ";
cout<<endl;
}
int sqlist::getElem(int p,int &e){
if(p < 1 || p > length)
return 0;
e = data[p];
return 1;
}
void sqlist::createList(int arr[],int n){
if(arr == nullptr || n < 0)
return;
for(int i=1;i<=n;i++)
data[i] = arr[i-1];
length = n;
}
int main(){
sqlist list;
int arr[] = {234,423,573,123,786,2314,87,1324,86,3421};
list.createList(arr,sizeof(arr)/sizeof(arr[0]));
list.showList();
list.insert(6,860);//指定位置插入
list.showList();
list.insert(878);//顺序表最后插入
list.showList();
cout<<"删除指定位置元素:"<<endl;
int n,e;
cin>>n;
list.deleteElem(n,e);
cout<<e<<endl;
list.showList();
cout<<"删除最后一个元素:"<<endl;
list.deleteElem(e);
cout<<e<<endl;
list.showList();
cout<<"查找下标元素:"<<endl;
cin>>n;
list.getElem(n,e);
cout<<e<<endl;
return 0;
}
运行结果如下:
(二)构建一个元素递增有序排列的顺序表
实现代码如下:
#include<iostream>
using namespace std;
const int maxSize = 100;
//构造一个递增的顺序表,数值从下标1开始
class sqlist{
public:
sqlist():length(0){}
int LocateElem(int x);//找到插入的位置
void insert(int x);//
void createList(int arr[],int n);//构造一个递增的顺序表
void showList();
int deleteElem(int p,int &e);//删除指定下标的元素
int deleteElem(int &e);//删除最后一个元素
private:
int data[maxSize];
int length;
};
int sqlist::LocateElem(int x){
int i;
for(i=1;i<=length;i++)
if(x < data[i])
return i;
return i;//若没找到,则插入到表尾即可(顺序表为空时也会插入到第一个)
}
void sqlist::insert(int x){//按从小到大插入
if(length > maxSize - 1)
return;
int p;
p = LocateElem(x);
for(int i=length;i>=p;i--)
data[i+1] = data[i];
data[p] = x;
length++;//顺序表长度要加一
}
int sqlist::deleteElem(int &e){//删除最后一个元素
if(length < 1)
return 0;
e = data[length];
length--;//长度减一
return 1;
}
void sqlist::createList(int arr[],int n){
if(arr == nullptr || n < 0)
return ;
length = 0;
for(int i=0;i<n;i++)
insert(arr[i]);
}
void sqlist::showList(){
for(int i=1;i<=length;i++)
cout<<data[i]<<" ";
cout<<endl;
}
int sqlist::deleteElem(int p,int &e){
if(p < 1 || p > length)
return 0;
e = data[p];
for(int i = p;i <= length-1;i++)
data[i] = data[i+1];
length--;//长度减一
}
int main(){
sqlist list;
int arr[] = {234,65,6,45,89,13,75,314,78};
list.createList(arr,sizeof(arr)/sizeof(arr[0]));
list.showList();
cout<<"删除指定位置元素:"<<endl;
int n,e;
cin>>n;
list.deleteElem(n,e);
cout<<e<<endl;
list.showList();
cout<<"删除最后一个元素:"<<endl;
list.deleteElem(e);
cout<<e<<endl;
list.showList();
return 0;
}
运行结果如下: