一位来自停电52个半小时的海妙小可爱的实验一报告

来源:互联网 发布:普通话练习软件 编辑:程序博客网 时间:2024/06/09 17:48

信管1162肖琼的数据结构实验一报告

 

实验一线性表的基本操作实现及其应用

 

一、实验目的

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

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

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

 

二、实验内容

1、顺序表的建立与操作实现

建立N个元素的顺序表(n的大小和表里数据自己确定),实现相关的操作:输出、插入、删除、查找等功能。

 

2、实际问题的解决

使用顺序表来实现约瑟夫环问题

 

三、实验步骤源代码

#include <iostream>using namespace std;const int MaxSize = 100;template<class DataType>class SeqList{public:SeqList() { length = 0; }SeqList(DataType a[], int n);~SeqList() {};int Length(){return length;}DataType Get(int i);int Locate(DataType x);void Insert(int i, DataType x);DataType Delete(int i);void PrintList();private:DataType data[MaxSize];int  length;};//顺序表有参构造函数SeqListtemplate<class DataType>SeqList<DataType>::SeqList(DataType a[], int n){if (n > MaxSize)throw "参数非法";for (int i = 0; i < n; i++)data[i] = a[i];length = n;}//顺序表按位查找算法Gettemplate<class DataType>DataType SeqList<DataType>::Get(int i){if (i<1 && i>length)throw  "查找位置非法";else return data[i - 1];}//顺序表按值查找算法Locatetemplate<class DataType>int SeqList<DataType>::Locate(DataType x){for (int i = 0; i < length; i++)if (data[i] == x)//下标为1的元素等于x,返回其序号i+1return i + 1;return  0;//退出循环,说明查找失败}//顺序表插入算法Inserttemplate<class DataType>void  SeqList<DataType>::Insert(int i, DataType x){if (length >= MaxSize)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++;}//顺序表删除算法Deletetemplate<class DataType>DataType SeqList<DataType>::Delete(int i){if (length == 0)throw "下溢";if (i<1 || i>length)throw "删除位置非法";DataType x = data[i - 1];for (int j = i; j < length; j++)data[j - 1] = data[j];length--;return x;}//顺序表遍历算法 PrintListtemplate<class DataType>void  SeqList<DataType>::PrintList(){for (int i = 0; i < length; i++)cout << data[i] << endl;   //依次输出线性表的元素值}int main(){int arr[10] = { 1,22,50,26,70,52,20,2,24,6 };SeqList<int> demo(arr, 10);demo.PrintList();//cout << demo.Delete(2) << endl;//demo.Insert(5, 66);cout << "--------------------" << endl;cout << "////////////////////" << endl;cout << "--------------------" << endl;//cout <<  demo.Locate(2)<<endl; //cout << demo.Get(5) << endl;demo.PrintList();return 0;}
//该程序未经过处理,所有操作进行了注释!


四、程序运行结果截图

①未经操作程序 对比

int main(){int arr[10] = { 1,22,50,26,70,52,20,2,24,6 };SeqList<int> demo(arr, 10);demo.PrintList();//cout << demo.Delete(2) << endl;//demo.Insert(5, 66);cout << "--------------------" << endl;cout << "////////////////////" << endl;cout << "--------------------" << endl;//cout <<  demo.Locate(2)<<endl; //cout << demo.Get(5) << endl;demo.PrintList();return 0;}


②按位查找算法Get

int main(){int arr[10] = { 1,22,50,26,70,52,20,2,24,6 };SeqList<int> demo(arr, 10);demo.PrintList();cout << "--------------------" << endl;cout << "////////////////////" << endl;cout << "--------------------" << endl;cout << demo.Get(5) << endl;demo.PrintList();return 0;}
查找数据中的第五位元素,将第五位元素“70”提取到最前面,其他的元素按照原排列顺序不变进行遍历。


③按值查找算法Locate

int main(){int arr[10] = { 1,22,50,26,70,52,20,2,24,6 };SeqList<int> demo(arr, 10);demo.PrintList();cout << "--------------------" << endl;cout << "////////////////////" << endl;cout << "--------------------" << endl;cout <<  demo.Locate(2)<<endl; demo.PrintList();return 0;}
查找值为“2”的元素,将位置显示至首位。“2”元素对应的位置是第8个,则显示为“8”。

查找值为“100”的元素,若是没有则位置显示为“0”


④删除算法Delete

int main(){int arr[10] = { 1,22,50,26,70,52,20,2,24,6 };SeqList<int> demo(arr, 10);demo.PrintList();cout << demo.Delete(2) << endl;cout << "--------------------" << endl;cout << "////////////////////" << endl;cout << "--------------------" << endl;demo.PrintList();return 0;}

删除第二位的元素,即“22”,其余数据遍历输出,则无该数据。


五、疑问

1. 为啥书上的代码有一部分是伪代码?每次敲出来都要修改贼久,需要给一些漏掉的未定义类型的变量,增加类型。

2.约瑟夫环问题尚未解决


六、收获总结

通过一个简单的顺序表系统的编写,我重拾了丢下快3个月的C++语言。这次主要是对着书本上代码敲入电脑,进行运行。

对格式方面的问题,在敲的过程中,也有着重注意。通过顺序表的查找、增加、删除、遍历输出的小功能,实现了C++和数据结构的过渡和衔接。让我知道C++这门基础编程语言,将贯彻我们专业4年,使我更加重视。相比于上学期的为了考试和完成课程设计的目的而言,现在更希望是能重新好好学习,日常多使用,真正把这门语言化为自己能熟练掌握的技能!

原创粉丝点击