您的位置:首页 > 其它

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

2017-09-20 23:17 393 查看
实验一线性表的基本操作实现及其应用

 

一、实验目的

 

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

 

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

 

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

 

二、实验内容

 

1、顺序表的建立与操作实现建立 n 个元素的顺序表(n 的大小和表里数据自己确定),实现相关的操作:输出,插

 

入,删除,查找等功能。编写完整程序实现,程序语言不限定,使用技术形式不定。2、实际问题的解决(*)

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

 

三、实验步骤

 

1、依据实验内容分别说明实验程序中用到的数据类型的定义;

 

2、相关操作的算法表达;

 

3、完整程序;

 

4、总结、运行结果和分析。

 

5、总体收获和不足,疑问等。

 

四、实验要求

 

1、按照数据结构实验任务书,提前做好实验预习与准备工作。

 

2、加“*”为选做题。做好可加分。

 

3、严格按照数据结构实验报告模板和规范,及时完成实验报告。

 

4、在个人主页上发文章

一、C++语言实现

              在Microsoft Visual Studio编程环境下新建一个工程“”“SeqList”,在该工程中新建一个头文件SeqList.h。在该头文件包括顺序表类SeqList的定义,程序如下:

                                    

#ifndef SeqList_H //避免重复包含SeqList.h头文件

#define SeqList_H

const int MaxSize=10;//线性表最多有10个元素

class SeqList {

public:

         SeqList(){length=0;}//无参构造函数,创建一个空表

         SeqList(inta[], int n);//有参构造函数

   ~SeqList(){} //析构函数

         void Insert(int i,int x);//在线性表第i个位置插入值为x的元素

         int Delete(int i);//删除线性表的第i个元素

         int   Locate(int x);//查找x元素的位置       

         void  PrintList();//按序号依次输出各元素

 

private:

         int data[ MaxSize ];

         int length;

};

 #endif;

          在工程“”“SeqLlist”中新建一个源程序文件SeqList.cpp,该文件包括类SeqList中成员函数的定义,程序如下:

#include<iostream>//引入输入输出流

using namespace std;

#include "SeqList.h"//引入类SeqList的声明

                     //以下是类SeqList的成员函数定义

SeqList::SeqList(int a[], int n)

{

         if(n>MaxSize)throw"参数非法";

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

         d
a125
ata[i]=a[i];

         length=n;

}

 

 void SeqList::Insert(int i,int x)

         {

           if (length>=MaxSize) throw "上溢";

                    if(i<1||i>length+1)throw"位置非法";

                    for(int j=length;j>=1;j--)

                            data[j]=data[j-1]; //第j个元素存在数组下标为j-1处

                    data[i-1]=x;

                    length++;

         }

 

 

  intSeqList::Delete(int i)

  {

  if(length==0)throw"下溢" ;

             if(i<1||i>length+1)throw"位置非法";

                  intx=data[i-1];

                  for(intj=i;j<length;j++)

                          data[j-1]=data[j];

                  length--;

                  returnx;

  }

 

 

 

   int SeqList::Locate(int x)

         {

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

                          if(data[i]==x)return i+1;

                          return0;

         }

                 

        

 

 

         voidSeqList::PrintList()

         {

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

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

           cout<<endl;

         }

         在工程“SeqList”中新建一个源程序文件SeqList_main.cpp,该文件包括主函数,程序如下:

#include<iostream>//引入输入输出流

using namespace std;

#include "SeqList.h"//引入类SeqList的声明

 

void main()

{

         intr[5]={1,5,3,5,58};

         SeqListL(r,5);

         cout<<"执行插入操作前数据为:"<<endl;

         L.PrintList();//输出所有元素

         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<<"执行删除第1个元素操作,删除前数据为:"<<endl;

                  L.PrintList();//输出所有元素

                  try{

                  L.Delete(1);//删除第1个元素

                  }

                          catch(char*s)

                          {

                          cout<<s<<endl;

                          }

                          cout<<"删除后数据为:"<<endl;

                                   L.PrintList();//输出所有元素

}

 

运行结果如下图:

二、总结

         顺序表实现数据元素的增、删、查、改,在实际问题中有广泛的作用,而且不占用内存,适用于一次性操作。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: