您的位置:首页 > 其它

简单的顺序表,及其5大功能的实现!!!

2017-09-17 22:50 113 查看
**

简单的顺序表,及其5大功能的实现!!!

顺序表,就是用一段地址连续的储存单元依次储存线性表的数据元素!



顺序表是在计算机内存中以数组的形式保存的线性表。线性表采用顺序存储的方式存储就称之为顺序表,顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。

首先

const int MaxSize = 100;
template<class T>
class BOOK {
public:
BOOK() { length = 0; }                         //无参构造函数,建立一个空的顺序表
BOOK(T a[], int n);                            //有参构造函数,建立一个长度为n的顺序表
~BOOK() {}                                     //析构函数为空
int Length() { return length; }                //求线性表的长度,为后面的功能服务
T Get(int i);                                  //按位查找,在线性表中查找第i个元素
int Locate(T x);                               //按值查找,在线性表中查找值为x的元素序号
void Insert(int i, int x);                     //插入操作,在线性表中插入第i个元素
T Delete(int i);                               //删除操作,删除线性表中的第i个元素
void PrintList();                              //遍历操作,按序号查找依次输出各个元素,即打印功能
private:
T data[MaxSize];                               //存放数据的元素的数组
int length;                                    //线性表的长度
};


我们采用了模板类,功能含有按位查找功能、按值查找功能、插入功能、删除功能、遍历功能。

构造函数

//构造函数
template<class T>
BOOK<T>::BOOK(T a[], int n) {

for (int i = 0; i < n; i++)
{
data[i] = a[i];
length = n;
}

}


有参构造函数,创建一个长度为n的顺序表,并将给定的数组元素作为线性表的数据元素传入顺序表中,并将传入的元素个数作为顺序表的长度。

插入功能

//插入功能
template<class T>
void BOOK<T>::Insert(int i, int x) {

for (int j = length; j >= i; i--)
{
data[j] = data[j - 1];
}
data[i - 1] = x;
length++;

}


插入功能的实现,是通过移动元素来实现的,即插入位置以前的元素不动,以后的元素向后移动,防止出错,所以建议从最后开始移动,逐渐至目标元素的位置。

按值查找

//顺序表按值查找法
template<class T>
int BOOK<T>::Locate(int x) {
for (int i = 0; i < length; i++)

af3c
if (data[i] == x)
{
return i + 1;                                   //下标为i的元素等于x,返回其序号i+1
}
}


按值查找就是按顺序进行元素比较,若相同则返回该值,即完成查找。

按位查找

//按位查找功能
template<class T>
T BOOK<T>::Get(int i) {
return data[i - 1];

}


按位查找的实现是通过一个Get函数来实现的,输入你要查找的位置的序号,返回你所查找许皓的-1的值,故直接输入序号即可。

删除功能

//删除功能
template<class T>
T BOOK<T>::Delete(int i) {

int x = 0;
x = data[i - 1];                                        //取出位置i的元素
for (int j = i; j < length; j++)
{
data[j - 1] = data[j];                              //此处的j已经是元素所在的数组下标
length--;
return x;
}
}


遍历功能

//顺序表遍历算法
template<class T>
void BOOK<T>::PrintList() {
for (int i = 0; i < length; i++) {
cout << data[i];                                  //依次输出线性表的元素值
}
cout << endl;
}


遍历功能,没什么要说的,就是逐一输出各个元素。

最后,完整顺序表及其基础功能的实现

#include<iostream>
using namespace std;

const int MaxSize = 100;
template<class T>
class BOOK {
public:
BOOK() { length = 0; } //无参构造函数,建立一个空的顺序表
BOOK(T a[], int n); //有参构造函数,建立一个长度为n的顺序表
~BOOK() {} //析构函数为空
int Length() { return length; } //求线性表的长度
T Get(int i); //按位查找,在线性表中查找第i个元素
int Locate(int x); //按值查找,在线性表中查找值为x的元素序号
void Insert(int i, int x); //插入操作,在线性表中插入第i个元素
T Delete(int i); //删除操作,删除线性表中的第i个元素
void PrintList(); //遍历操作,按序号查找依次输出各个元素
private:
T data[MaxSize]; //存放数据的元素的数组
int length; //线性表的长度
};
//构造函数 template<class T> BOOK<T>::BOOK(T a[], int n) { for (int i = 0; i < n; i++) { data[i] = a[i]; length = n; } }

//顺序表按位查找法
template<class T>
T BOOK<T>::Get(int i) {
return data[i - 1];

}
//顺序表按值查找法
template<class T>
int BOOK<T>::Locate(int x) {
for (int i = 0; i < length; i++)

if (data[i] == x)
{
return i + 1; //下标为i的元素等于x,返回其序号i+1
}
}

//顺序表插入算法
template<class T>
void BOOK<T>::Insert(int i, int x) {

for (int j = length; j >= i; i--)
{
data[j] = data[j - 1]; //因为是存在数组中的,故要减一
}
data[i - 1] = x;
length++;

}

//顺序表删除算法
template<class T>
T BOOK<T>::Delete(int i) {

int x = 0;
x = data[i - 1]; //取出位置i的元素
for (int j = i; j < length; j++)
{
data[j - 1] = data[j]; //此处的j已经是元素所在的数组下标
length--;
return x;
}
}

//顺序表遍历算法 template<class T> void BOOK<T>::PrintList() { for (int i = 0; i < length; i++) { cout << data[i]; //依次输出线性表的元素值 } cout << endl; }

int main() {
int r[5] = { 1,2,3,4,5 };
BOOK<int> L(r, 5); //定义一个长度为5的顺序表
L.PrintList(); //输出所有的元素
L.Insert(3, 3); //在第2个位置插入值为3的元素
L.PrintList(); //输出所有的元素
cout << L.Locate(3) << endl; //查找第三个位置的元素
L.Delete(2); //删除第2个元素
L.PrintList(); //输出所有的元素

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: