ADT定义
typedef struct {
int *data; //存放顺序表元素的数组
int length; //存放顺序表的长度
}Sqlist; //顺序表类型的定义 ```
基本操作
展示表中数据
void display(Sqlist L){
cout<<"表中的数据元素为:"<<endl;
for(int i=0;i<L.length;i++)
{
cout<<L.data[i]<<'\t';
}
cout<<endl;
}
获得指定位置的元素,即用e返回L中p位置上的元素,获得成功则返回1,否则返回0
int getElem(Sqlist L, int p, int &e){
if (p<0||p>L.length-1)
return 0;
e = L.data[p];
return 1;
}
查找第一个值等于e的元素
int findElem(Sqlist L, int e){
int i;
for(i=0;i<L.length;i++)
{
if (e==L.data[i])
return i;
}
return -1;
}
将元素e插入到顺序表的第p个索引。如果p输入不正确,返回0,p输入正确,插入成功,返回1。
int insertElem(Sqlist &L,int p, int e){
int i;
if (p<0 || p>L.length || L.length ==maxSize) return 0;
++L.length;
for (i=L.length-1;i>=p;i--){
L.data[i] = L.data[i-1];
}
L.data[p] = e;
return 1;
}
删除表L中下标为p的元素,成功返回1,否则返回0,并将被删除元素的值赋给e。
int deleteElem(Sqlist &L,int p,int &e){
int i;
if (p<0||p>L.length-1) return 0;
e = L.data[p];
for (i=p;i<L.length-1;i++){
L.data[i] = L.data[i+1];
}
--L.length;
return 1;
}
代码实现
using namespace std;
// 顺序表的结构体定义
typedef struct
{
int *data; //存放顺序表元素的数组
int length; //存放顺序表的长度
}Sqlist; //顺序表类型的定义
//初始化顺序表
Sqlist initList()
{
Sqlist L;
L.data = (int*)malloc(maxSize*sizeof(int));
L.length = 0;
return L;
}
// 各函数声明
void display(Sqlist L); // 展示表中数据
int getElem(Sqlist L, int p, int &e); // 获得指定位置的元素,即用e返回L中p位置上的元素,获得成功则返回1,否则返回0.
int findElem(Sqlist L,int e); // 查找第一个值等于e的元素
int insertElem(Sqlist &L,int p, int e); // 将元素e插入到顺序表的第p个索引。如果p输入不正确,返回0,p输入正确,插入成功,返回1。
int deleteElem(Sqlist &L,int p,int &e); // 删除表L中下标为p的元素,成功返回1,否则返回0,并将被删除元素的值赋给e。
void display(Sqlist L){
cout<<"表中的数据元素为:"<<endl;
for(int i=0;i<L.length;i++)
{
cout<<L.data[i]<<'\t';
}
cout<<endl;
}
int getElem(Sqlist L, int p, int &e){
if (p<0||p>L.length-1)
return 0;
e = L.data[p];
return 1;
}
int findElem(Sqlist L, int e){
int i;
for(i=0;i<L.length;i++)
{
if (e==L.data[i])
return i; //若找到,则返回下标
}
return -1; //没有找到,返回-1
}
int insertElem(Sqlist &L,int p, int e){
int i;
if (p<0 || p>L.length || L.length ==maxSize) return 0;
++L.length;
for (i=L.length-1;i>=p;i--){
L.data[i] = L.data[i-1];
}
L.data[p] = e;
return 1;
}
int deleteElem(Sqlist &L,int p,int &e){
int i;
if (p<0||p>L.length-1) return 0;
e = L.data[p];
for (i=p;i<L.length-1;i++){
L.data[i] = L.data[i+1];
}
--L.length;
return 1;
}
int main()
{
//用户自定义输入表中元素
Sqlist L = initList();
int n;
cout<<"Please enter the number of tables: ";
cin>>n;
cout<<"Please enter the elements: ";
for(int i=0;i<n;i++)
{
cin>>L.data[i];
L.length++;
}
// //测试展示表中元素
// display(L);
// // 测试getElem
// int p,e;
// cout<<"请输入要获得元素的下标:";
// cin>>p;
// int result=getElem(L,p,e);
// cout<<"这个位置的元素为:"<<e;
//测试查找元素
// int e;
// cout<<"请输入要查找的元素";
// cin>>e;
// int result = findElem(L,e);
// cout<< "找到了与e相等的第一个元素的位置为"<<result;
// 测试插入元素
// int p, e;
// cout<<"Please enter the position to insert:";
// cin>>p;
// cout<<"Please enter the element to insert:";
// cin>>e;
// int result = insertElem(L,p,e);
// cout<<result;
// 测试deleteElem
int p,e;
cout<<"Please enter the subscript of the element to be deleted: ";
cin>>p;
int result = deleteElem(L,p,e);
cout<<result<<endl;
display(L);
}