linux 线性表与数组,线性表之顺序表C++实现

线性表之顺序表

一、头文件:SeqList.h

//顺序线性表的头文件

#include

const int MaxSize = 100;

//定义顺序表SeqList的模板类

template

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

SeqList::SeqList(DataType array[], int n)

{

if (n > MaxSize)

{

throw "传入的顺序表长度过长";

}

//给顺序表的存储元素的数组赋值

for (int i = 0; i < n; i++)

{

data[i] = array[i];

}

//给顺序表的长度赋值

length = n;

}

//实现顺序表按位查找

template

DataType SeqList::GetElement(int i)

{

//判断是定的位置是否合理

if (i < 1 || i >length)

{

throw "位置有误";

}

else

{

//返回指定位置的元素

return data[i - 1];

}

}

//实现顺序表按值查找,返回该元素所在的位置

template

int SeqList::GetLocal(DataType x)

{

//遍历顺序表的元素

for (int i = 0; i < length; i++)

{

//判断指定的元素是否在顺序表中

if (data[i] == x)

{

//返回指定元素在顺序表中的位置

return (i + 1);

}

}

//如果指定的元素不在顺序表中,则返回位置为0

return 0;

}

//实现顺序表插入元素

template

void SeqList::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

DataType SeqList::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

void SeqList::PrintSeqList()

{

if (length < 1)

{

throw "顺序表中没有元素";

}

else

{

//顺序输出顺序表元素

for (int i = 0; i < length; i++)

{

cout << data[i] << " ";

}

cout << endl;

}

}

二、测试线性表之顺序表:TestSeqList.cpp

#include

#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 seqList = SeqList(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;

}

0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值