线性表的顺序表示 (数组)
线性表ADT:
数据:
数组:长度为n的数组以存储线性表数据
运算:
Create():创建一个新的空线性表
Destroy():撤销一个线性表
IsEmpty():线性表是否为空
IsFull():线性表是否已满
Length():返回线性表长度
Insert(i,x):在线性表中特定位置插入数据
Delete(i):在线性表中特定位置删除一个数据
Find(i,x):查找线性表特定位置的一个数据并在x中返回
Search(x):在线性表中查找元素x并返回下标
Output(out):将表送至输出流
//头文件
class SequentialList{
private:
int maxSize = 0;
int *elements;
int n = 0;
public:
SequentialList(int max);
~SequentialList();
bool Insert(int i,int x);//在下标为i的地方插入元素x
bool Delete(int i);//删除下表为i的元素
bool Find(int i,int &x);//查找下标为i的元素,若存在返回true,否则返回false
int Search(int x);//查找元素x,若找到则返回下标,否则返回-1
void Output(outstream &out);//将表送至输出流
}
//cpp文件
SequentialList::SequentialList(int max){
maxSize = max;
elements = new int[max];
}
SequentialList::~SequentialList(){
delete[] elements;
}
bool SequentialList::IsEmpty(){
return n == 0;
}
bool SequentialList::IsFull(){
return n == maxSize;
}
bool SequentialList::Insert(int i,int x){
if(IsFull())return false;
if(i < 0){
cout<<"Underflow!"<<endl;
return false;
}
if(i >= maxSize){
cout<<"Overflow!"<<endl;
return false;
}
for(int j = n;j > i;j--){
elements[j] = elements[j-1];
}
elements[i] = x;
n++;
return true;
}
bool SequentialList::Delete(int i){
if(IsEmpty())return false;
if(i < 0){
cout<<"Underflow!"<<endl;
return false;
}
if(i >= maxSize){
cout<<"Overflow!"<<endl;
return false;
}
//question:what if i==0,and maxSize == 1 ?
for(int j = i;j < n-1;j++){
elements[j] = elements[j+1];
}
n--;
return true;
}
int SequentialList::Length(){
return n;
}
int SequentialList::Search(int x){
for(int i = 0;i < n;i++){
if(elements[i]==x)return i;
}
return -1;
}
void SequentialList::Output(outstream &out){
for(int i = 0;i < n;i++){
out<<elements[i]<<" ";
}
out<<endl;
}