線性表之順序表 一、頭文件:SeqList.h //順序線性表的頭文件#include<iostream> const int MaxSize = 100;//定義順序表SeqList的模板類template<class DataType>class SeqList{public: //順序表無參構 ...
線性表之順序表
一、頭文件:SeqList.h
//順序線性表的頭文件
#include<iostream>
const int MaxSize = 100;
//定義順序表SeqList的模板類
template<class DataType>
class SeqList{
public:
//順序表無參構造器(創建一個空的順序表)
SeqList(){ length = 0 }
//順序表有參構造器(創建一個長度為n的順序表)
SeqList(DataType array[], int n);
//順序表析構函數
~SeqList(){}
//求順序表的長度
int GetLength(){ return length; }
//順序表按位查找,返回i位置的元素
DataType GetElement(int i);
//順序表按值查找,返回該元素所在的位置
int GetLocal(DataType x);
//順序表在指定的位置插入指定的元素
void Insert(int i, DataType x);
//順序表刪除元素,返回刪除的元素
DataType Delete(int i);
//輸出順序表中的元素
void PrintSeqList();
private:
//一維數組,存放數據元素
DataType data[MaxSize];
//順序表的長度
int length;
};
//實現順序表有參構造器
template<class DataType>
SeqList<DataType>::SeqList(DataType array[], int n)
{
if (n > MaxSize)
{
throw "傳入的順序表長度過長";
}
//給順序表的存儲元素的數組賦值
for (int i = 0; i < n; i++)
{
data[i] = array[i];
}
//給順序表的長度賦值
length = n;
}
//實現順序表按位查找
template<class DataType>
DataType SeqList<DataType>::GetElement(int i)
{
//判斷是定的位置是否合理
if (i < 1 || i >length)
{
throw "位置有誤";
}
else
{
//返回指定位置的元素
return data[i - 1];
}
}
//實現順序表按值查找,返回該元素所在的位置
template<class DataType>
int SeqList<DataType>::GetLocal(DataType x)
{
//遍歷順序表的元素
for (int i = 0; i < length; i++)
{
//判斷指定的元素是否在順序表中
if (data[i] == x)
{
//返回指定元素在順序表中的位置
return (i + 1);
}
}
//如果指定的元素不在順序表中,則返回位置為0
return 0;
}
//實現順序表插入元素
template<class DataType>
void SeqList<DataType>::Insert(int index, DataType x)
{
//判斷插入的位置是否合理
if (length >= MaxSize)
{
throw "順序表已存放滿";
}
if (index<1 || index>length + 1)
{
throw "插入元素的位置有誤";
}
//如何插入的位置合理,則把順序表中從最後位置到指定插位置的元素整體向後移動一個位置
for (int j = length; j >= index; j--)
{
data[j] = data[j - 1];
}
//給插入的位置放入指定的元素
data[index - 1] = x;
length++;
}
//實現順序表刪除指定位置的元素
template<class DataType>
DataType SeqList<DataType>::Delete(int index)
{
//聲明要取出的元素
DataType x;
//判斷要刪除的位置是否合理
if (index<1 || index>length)
{
throw "刪除的位置有誤";
}
else
{
//取出指定位置的元素
x = data[index-1];
//將指定位置後的元素全部都向前移動一個位置
for (int i = index; i < length; i++)
{
data[i - 1] = data[i];
}
//刪除順序表中的元素後,其長度減1
length--;
}
return x;
}
//順序輸出順序表中的元素
template<class DataType>
void SeqList<DataType>::PrintSeqList()
{
if (length < 1)
{
throw "順序表中沒有元素";
}
else
{
//順序輸出順序表元素
for (int i = 0; i < length; i++)
{
cout << data[i] << " ";
}
cout << endl;
}
}
二、測試線性表之順序表:TestSeqList.cpp
#include<iostream>
#include"SeqList.h"
using namespace std;
void show()
{
cout << "---------------------------------------" << endl;
}
int main()
{
int array[10] = {1,3,4,2,5,6,8,7,9,10};
SeqList<int> seqList = SeqList<int>(array,10);
cout << "順序表為:" << endl;
seqList.PrintSeqList();
show();
cout << "順序表的長度為:" << seqList.GetLength()<< endl;
cout << "第三個位置的元素是:" << seqList.GetElement(3) << endl;
cout << "元素3的位置是:" << seqList.GetLocal(3) << endl;
show();
cout << "在第5個位置插入元素22" << endl;
seqList.Insert(5, 22);
cout << "順序表為:" << endl;
seqList.PrintSeqList();
cout << "順序表的長度為:" << seqList.GetLength() << endl;
show();
cout << "刪除第5個位置的元素" << endl;
seqList.Delete(5);
cout << "順序表為:" << endl;
seqList.PrintSeqList();
cout << "順序表的長度為:" << seqList.GetLength() << endl;
show();
return 0;
}