数据结构顺序表实验

一、实验目的

1、熟练掌握线性表的结构特点,掌握顺序表的基本操作。

2、巩固 C++相关的程序设计方法与技术。

3、学会使用顺序表解决实际问题。

二、实验内容
1、顺序表的建立与操作实现
建立n个元素的顺序表(n的大小和表里数据自己确定),实现相关的操作:输出,插
入,删除,查找等功能。编写完整程序实现,程序语言不限定,使用技术形式不定。
2、实际问题的解决(*)
使用顺序表来实现约瑟夫环问题。
三、实验步骤
1、依据实验内容分别说明实验程序中用到的数据类型的定义;
2、相关操作的算法表达;
3、完整程序;
4、总结、运行结果和分析。
5、总体收获和不足,疑问等。

四、代码实现

1、设计模板类   "list.h"

const int Size = 100;
template         //定义模板类SeqList  
class SeqList
{
public:
	SeqList() { length = 0; }            //无参构造函数,建立空顺序表  
	SeqList(Type a[], int n);       //有参构造函数,建立长度为n的顺序表  
	~SeqList() { }                   //析构函数  
	int Length() { return length; }        //求线性表的长度  
	Type Get(int i);               //按位查找,在表中查找第i个元素  
	int Locate(Type x);           //按值查找,在表中查找值为x的元素序号  
	void Insert(int i, Type x);       //插入操作,在表中第i个位置插入值为x的元素  
	Type Delete(int i);              //删除操作,删除表的第i个元素  
	void PrintList();                     //遍历操作,按序号依次输出各元素  
private:
	Type data[Size];           //存放数据元素的数组  
	int length;                        //线性表的长度  
};
2、函数实现代码  "list.cpp"

#include "list.h"  

template 
SeqList ::SeqList(Type a[], int n)
{
	if (n > Size) throw "错误";
	for (int i = 0; i < n; i++)
	{
		data[i] = a[i];
	}
	length = n;
}

template 
Type SeqList::Get(int i)
{
	if (i < 1 && i > length) throw "查找位置非法";
	else return data[i - 1];
}

template 
int SeqList ::Locate(Type x)
{
	for (int i = 0; i < length; i++)
	{
		if (data[i] == x) return i + 1;
	}
	return 0;                           
}

template 
void SeqList ::Insert(int i, Type x)
{
	if (length >= Size) throw "上溢错误";
	if (i < 1 || i > length + 1) throw "位置";
	for (int j = length; j >= i; j--)
	{
		data[j] = data[j - 1];             //注意第j个元素存在数组下标为j-1处
	}
	data[i - 1] = x;
	length++;
}

template 
Type SeqList ::Delete(int i)
{
	if (length == 0) throw "下溢";
	if (i < 1 || i > length) throw "位置";
	Type x = data[i - 1];              //取出位置i的数据 
	for (int j = i; j < length; j++)
		data[j - 1] = data[j];        //注意此处j已经是元素所在的数组下标  
	length--;
	return x;
}

template 
void SeqList ::PrintList()
{
	for (int i = 0; i < length; i++)
	{
		cout << data[i]<<' ';                   //遍历输出数据  
	}
	cout << endl << endl;
}

3、主函数  "listmain.cpp"

#include             
using namespace std;
#include "list.cpp"          
void main()
{
	int student[7] = { 11,22,33,44,55,66,77 };
	SeqList ScoreList(student, 7);
	cout << ">>>插入前数据为:" << endl;
	ScoreList.PrintList();              
	try
	{
		ScoreList.Insert(1, 88);
	}
	catch (char *s)
	{
		cout << s << endl;
	}
	cout << ">>>插入后数据为:" << endl;
	ScoreList.PrintList();              
	cout << ">>>值为33的元素位置为:";
	cout << ScoreList.Locate(33) << endl<>>第二个元素的值为:" ;
	cout << ScoreList.Get(2) << endl<>>删除第2个元素,删除前数据为:" << endl;
	ScoreList.PrintList();             
	try
	{
		ScoreList.Delete(2);                
	}
	catch (char *s)
	{
		cout << s << endl;
	}
	cout << ">>>删除后数据为:" << endl;
	ScoreList.PrintList();              
}

五、实验结果

数据结构顺序表实验_第1张图片

六、问题分析

1、对于C++面向对象的熟练程度不够;

2、算法分析不足,元素所在数组下标分析容易出现错误;

七、实验总结

在编写过程中,由于许久没有用到C++进行编程,在代码实现过程中总不太熟练,所以应先温习C++面向对象,能使代码编写流畅,在分析问题中总有不足,应加强对算法的分析。

你可能感兴趣的:(数据结构,C++)