1、顺序表的顺序存储结构及实现
顺序表中数据元素的存储地址是其序号的线性函数,通常使用一维数组来实现顺序表,因为顺序表的结构与一维数组很相似
顺序表的实现
#include <iostream>
#include <string>
using namespace std;
const int MaxSize = 100;
class SeqList{
public:
SeqList(); //建立空的顺序表
SeqList(int a[], int n); //建立长度为n的顺序表
~SeqList(){} //析构函数
int Length(); //返回线性表的长度
int Get(int i); // 查找第i个元素的值
int Locate(int x); //查找值为x元素的位置
void Insert(int i, int x); //在第i个位置插入值为x的元素
int Delete(int i); // 删除第i个元素
int Empty(); //判断线性表是否为空
void PrintList(); //遍历打印顺序表
private:
int data[MaxSize]; //存放数据元素的数组
int length; //线性表的长度
};
SeqList::SeqList()
{
length = 0;
}
SeqList::SeqList(int a[], int n)
{
if(n > MaxSize) throw "参数非法";
for(int i = 0;i < n;i++)
{
data[i] = a[i];
}
length = n;
}
int SeqList::Length()
{
return length;
}
void SeqList::Insert(int i, int x)
{
int temp;
if(length == MaxSize) throw"上溢异常";
if(i < 1 || i > length + 1) throw"插入位置错误";
for(int j = length;j >= i;j--)
{
data[j] = data[j-1];
}
data[i-1] = x;
length++;
// for(int j = 0;j < length;j++)
// {
// if(j == i)
// {
// temp = data[j];
// data[j] = x;
// length++;
// data[++j] = temp;
// }
// }
}
int SeqList::Delete(int i)
{
int temp;
// for(int j = 0;j < length;j++)
// {
// if(i == j)
// {
// temp = data[i];
// data[i] = data[i+1];
// length--;
// }
// }
if(length == 0) throw"下溢";
if(i < 1 || i > length) throw"删除位置错误";
temp = data[i-1];
for(int j = i;j < length;j++)
{
data[j-1] = data[j];
}
length--;
return temp;
}
int SeqList::Get(int i)
{
if(i < 1 || i > length) throw"查找位置非法";
// int x;
// for(int j = 0;j < length;j++)
// {
// if(i == j)
// {
// x = data[j];
// }
// }
return data[i];
}
int SeqList::Locate(int x)
{
int l;
for(int i = 0;i < length;i++)
{
if(x == data[i])
{
l = i;
}
}
return l;
}
int SeqList::Empty()
{
if(length == 0) return 0;
else return 1;
}
void SeqList::PrintList()
{
for(int i = 0;i < length;i++)
{
cout << data[i] << " ";
}
}
int main()
{
int n,x,l,b;
// scanf("%d", &n);
// int a[n];
// for(int i = 0; i < n;i++)
// {
// scanf("%d", &a[i]);
// }
n = 5;
int a[n] = {1,2,3,4,5};
SeqList s(a, n);
// cout << endl;
// cout << "请输入你要查找的数位置: ";
// scanf("%d", &x);
// cout << s.Get(x);
// cout << endl;
// cout << "请输入你要查找的数: ";
// scanf("%d", &x);
// cout << s.Locate(x);
cout << "请输入要插入的位置和数" << endl;
scanf("%d %d",&l, &x);
s.Insert(l,x);
// cout << "请输入你要删除的数: ";
// scanf("%d", &b);
// cout << s.Delete(b);
s.PrintList();
return 0;
}
其中亮的部分是根据书上来的,注释的部分是自己思考得出,由于发现书上的代码更为方便,时间复杂度也比较好,所以一并写上。