最近开始系统的学习数据结构的内容,数据结构中的第一种结构是线性表,线性表包含有顺序存储结构和链式存储结构。线性的顺序存储结构指的是用一段地址连续的存储单元依次存储线性表的数据元素。线性存储结构比较简单,下面是c++的实现代码:
#include<iostream>
using namespace std;
const int MaxSize = 100;//定义线性表最大长度为100
template<typename T>
class SeqList {
public:
SeqList() { length = 0 } //1.1 创建空顺序表
SeqList(T arr[], int n); //1.2. 创建一个长度为n的顺序表
~SeqList(){} //析构函数
int GetLength(){ return length; } //2. 得到顺序表长度
T GetElem(int i); //3. 得到顺序表元素
int GetLocal(T x); //4. 得到元素位置
void ListInsert(int i, T x); //5. 插入元素
void ListDelete(int i); //6. 删除元素
void ClearList(); //7. 清空顺序表
bool ListEmpty(); //8. 判断顺序表是否为空
void PrintSeqList(); //9. 打印顺序表内容
private:
T data[MaxSize];
int length;
};
//1.2. 创建一个长度为n的顺序表
template<typename T>
SeqList<T>::SeqList(T arr[], int n){
//长度超过抛出异常
if (n > MaxSize)
throw "Out of Range.";
//顺序表元素赋值
for (int i = 0; i < n; ++i)
data[i] = arr[i];
length = n; //顺序表长度赋值
}
//3. 得到顺序表元素
template<typename T>
T SeqList<T>::GetElem(int i){
if (i>length)
throw "out of range";
if (i <= length)
return data[i-1];
}
//4. 得到元素位置
template<typename T>
int SeqList<T>::GetLocal(T x){
for (int i = 0; i < length; ++i){
if (x == data[i])
return i + 1;
}
return 0;
}
//5. 插入元素
template<typename T>
void SeqList<T>::ListInsert(int i, T x){
if (i>length)
throw "out of range";
length += 1;
for (int j = length; j >= i; --j)
data[j] = data[j - 1];
data[i - 1] = x;
}
//6. 删除元素
template<typename T>
void SeqList<T>::ListDelete(int i){
if (i>length)
throw "out of range";
for (int j = i; j < length; ++j)
data[j - 1] = data[j];
length -= 1;
}
//7. 清空顺序表
template<typename T>
void SeqList<T>::ClearList(){
for (int i = 0; i < length; ++i)
data[i] = 0;
length = 0;
}
//8. 判断顺序表是否为空
template<typename T>
bool SeqList<T>::ListEmpty(){
if (length == 0)
return true;
return false;
}
//9. 打印顺序表内容
template<typename T>
void SeqList<T>::PrintSeqList(){
for (int i = 0; i < length; ++i){
cout << data[i] << " ";
}
cout << endl;
}