实验题目:验证顺序表类和模板类
一、实验目的
- 掌握线性表的顺序存储结构;
- 验证顺序表及其基本操作的实现;
- 理解算法与程序的关系,能够将顺序表算法转换为对应的程序。
二、实验内容
- 建立含有若干个元素的顺序表;
- 对已建立的顺序表实现插入、删除、查找等基本操作;
- 在《数据机构(C++版)学习辅导与实验指导》P171的基础上,
- 加入求线性表的长度等操作;
- 重新给定测试数据,验证抛出异常机制。
三、设计和编码
1. 本实验用到的理论知识
线性表(顺序存储结构)
2. 算法设计
大部分接口实现已经给出,详见《数据机构(C++版)学习辅导与实验指导》P172。下面只给出书上没有的求长度和按位查找的算法设计。
下面我们只以顺序表类举例,顺序表模板类的有关算法实现大同小异。
求长度
由于已经存储了length
,直接返回即可。
伪代码如下
int Length() { return length; }
时间复杂度 | 空间复杂度 |
---|---|
O ( 1 ) O(1) O(1) | O ( 0 ) O(0) O(0) |
按位查找,在线性表中查找第i个元素
int Get(int i) {
if (length == 0) throw "下溢";
if (i < 1 || i > length) throw "位置非法";
return data[i - 1];
}
时间复杂度 | 空间复杂度 |
---|---|
O ( 1 ) O(1) O(1) | O ( 0 ) O(0) O(0) |
3. 编码
书本上用的是void main()
,下已更正。
程序清单如下
顺序表类
// SeqList_main.cpp
// Encoding: UTF-8
#include <iostream> //引入输入输出流
using namespace std;
#include "SeqList.h" //引入类SeqList的声明
int main()
{
int r[5] = {
1, 2, 3, 4, 5};
SeqList L(r, 5);
cout << "执行插入操作前数据为:" << endl;
L.PrintList(); //输出所有元素
cout<<"SeqList Length: "<<L.Length()<<endl; //输出顺序表长度
try
{
L.Insert(2, 3); //在第2个位置插入值为3的元素
}
catch (char *s)
{
cout << s << endl;
}
cout << "执行插入操作后数据为:" << endl;
L.PrintList(); //输出所有元素
cout << "值为3的元素位置为:";
cout << L.Locate(3) << endl; //查找元素3,并返回在顺序表中位置
cout << "执行删除第一个元素操作,删除前数据为:" << endl;
L.PrintList(); //输出所有元素
cout<<"SeqList Length: "<<L.Length()<<endl; //输出顺序表长度
try
{
L.Delete(1); //删除第1个元素
}
catch (char