线性表实验
一、实验目的
1.掌握线性表的顺序存储结构
2.验证顺序表及其基本操作的实现
3.理解算法与程序的关系们能够将顺序表算法转换为对应的程序
二、实验步骤
1.建立含有若干个元素的顺序表
2.对已建立的顺序表实现插入、删除、查找等基本操作
代码如下
#include<iostream>
using namespace std;
const int Max = 100;
class SeqList
{
public:
SeqList(){ length = 0; }
SeqList(int a[], int n);
~SeqList(){};
void Insert(int i, int x);
int Delete(int i);
int Locate(int x);
void PrintList();
private:
int length;
int data[Max];
};
//有参构造函数
SeqList::SeqList(int a[], int n)
{
if (n>Max)throw "参数非法";
for (int i = 0; i<n; i++)
{
data[i] = a[i];
length = n;
}
}
//在顺序表第i个位置插入值为x的元素
void SeqList::Insert(int i, int x)
{
if (length >= Max) throw"上溢";
if (i<1 || i>length + 1) throw "位置非法";
else
{
for (int j = length; j >= i; j--)
{
data[j] = data[j - 1]; //第j个元素存在数组下标为j-1处
}
data[i - 1] = x;
length++;
}
}
//删除顺序表的第i个元素
int SeqList::Delete(int i)
{
if (length == 0) throw"下溢";
if (i<1 || i>length) throw "位置非法";
else
{
int x = data[i - 1];
for (int j = i; j<length; j++)
{
data[j - 1] = data[j];
}
length--;
return x;
}
}
//求线性表中值为x的元素序号
int SeqList::Locate(int x)
{
for (int i = 0; i<length; i++)
{
if (data[i] == x) return i + 1;
}
return 0;
}
//遍历函数
void SeqList::PrintList()
{
for (int i = 0; i<length; i++)
{
cout << data[i] << " ";
cout << endl;
}
}
//主函数
void main()
{ //操作前遍历
int r[5] = { 1, 2, 3, 4, 5 };
SeqList L(r, 5);
cout << "执行操作前的数据为:" << endl;
L.PrintList();
//插入数据
L.Insert(2,7);
cout << '\n' << "插入位置2数字7后顺序表的内容为:" << endl;
L. PrintList();
//删除数据
int k;
cout << '\n' << "请输入需要删除的数据序号:";
cin >> k;
cout << "删除成功!你所删除的数据为:" << L.Delete(k) << endl;
cout << "顺序表的内容为:" << endl;
L.PrintList();
//按值查找
int y;
cout << '\n' << "请输入要查找的数据:";
cin >> y;
cout << "你所查找的值所在的位置为:" << L.Locate(y) << endl;
}
实验结果
三、实验心得
Insert函数想写成用户自己输入数据这一点还要多修改,暂时只能做到利用写好的程序显示出来。
课本第一章课后习题0
4.(1)顺序表的优点是:无需为表中的元素之间的逻辑关系而增加额外的存储空间;可以快速地存取表中任一位置的元素(即随机存储)
顺序表的缺点是:插入和删除操作需移动大量元素;表的容量难以确定;造成存储空间的碎片
单链表的优点是:不必事先知道线性表的长度;插入和删除元素时只需修改指针,不用移动元素
单链表的缺点是:指针的结构性开销;存取表中任意元素不方便,只能进行顺序存取
(2)顺序存储结构;链接存储结构;链接存储结构