格斯文档网

您现在的位置是:格斯文档网 > 述职报告 >

数据结构实验报告(实验一)

 深

 圳

 大

 学

 实

 验

 报

 告 告

 课程名称:

 数据结构实验与课程设计

 实验项目名称:

  实验一:顺序表得应用

  学院:

 计算机与软件学院

 专业:

 指导教师:

 :

  蔡平

 报告人:

 :

 文成

 学号:

 20 111 50259

  级班ﻩ 班级:

 5

  实验时间:

 20 12-9 —17

 实验报告提交时间:

 20 12—9 -2 4

 教务部制 一、实验目得与要求: 目得: 1、掌握线性表得基本原理 2、掌握线性表地基本结构 3、掌握线性表地创建、插入、删除、查找得实现方法 要求: 1、熟悉 C++语言编程 2、熟练使用C++语言实现线性表地创建、插入、删除、查找得实现方法

 二、实验内容:

 Pr oblem

 A:

 数据结构 ——验 实验 1 —— 顺序表例程 Description 实现顺序表得创建、插入、删除、查找 Input 第一行输入顺序表得实际长度 n 第二行输入 n 个数据 第三行输入要插入得新数据与插入位置 第四行输入要删除得位置 第五行输入要查找得位置 Output 第一行输出创建后,顺序表内得所有数据,数据之间用空格隔开 第二行输出执行插入操作后,顺序表内得所有数据,数据之间用空格隔开 第三行输出执行删除操作后,顺序表内得所有数据,数据之间用空格隔开 第四行输出指定位置得数据 Sample Input 6 11 22 33 44 55 66 888 3 5 2 Sample Output 11 22 33 44 55 66

 11 22 888 33 44 55 66

 11 22 888 33 55 66

 22 HINT 第 i 个位置就是指从首个元素开始数起得第i个位置,对应数组内下标为 i-1得位置 Prob lem B :

 数据结构-— —验 实验 1 —— 顺序表得数据交换 Description 实现顺序表内得元素交换操作 Input 第一行输入 n 表示顺序表包含得·n 个数据 第二行输入n个数据,数据就是小于 100 得正整数 第三行输入两个参数,表示要交换得两个位置 第四行输入两个参数,表示要交换得两个位置 Output 第一行输出创建后,顺序表内得所有数据,数据之间用空格隔开 第二行输出执行第一次交换操作后,顺序表内得所有数据,数据之间用空格隔开 第三行输出执行第二次交换操作后,顺序表内得所有数据,数据之间用空格隔开 注意加入交换位置得合法性检查,如果发现位置不合法,输出error。

 Sample Input 5 11 22 33 44 55 2 4 0 1 Sample Output 11 22 33 44 55

 11 44 33 22 55

 error HINT 本题执行两次交换操作,注意写好输入接口。

 Proble m C:

 数据结构 ——验 实验 1 —— 顺序表得合并 Description 假定两个顺序表得数据已经按照从小到大得顺序排列,实现两个顺序表得合并 Input 第一行输入 n 表示顺序表 A 包含得·n 个数据 第二行输入 n 个数据,数据就是小于 100 得正整数 第三行输入 m 表示顺序表 B 包含得·n 个数据 第二行输入m个数据,数据就是小于 100 得正整数 Output 输出合并后得顺序表内得所有数据,数据之间用空格隔开 Sample Input 3 11 33 55 4 22 44 66 88 Sample Output 11 22 33 44 55 66 88

 问题 D: 数据结构— —- 实验 1 —— 顺序表得循环移位 题目描述 顺序表得移位就是循环移位,例如顺序表:1,2,3,4,5,6。如果左移 1 位,即原来得头元素移动到末尾,其它元素向左移 1 位,变成 2,3,4,5,6,1。同理,如果右移 1 位,即原来得尾元素移动到头,其它元素向右移 1 位,变成 6,1,2,3,4,5.以下就是移位得多个例子:

 原数据:1,2,3,4,5,6 左移 3 位:4,5,6,1,2,3,与原数据对比 右移4位:3,4,5,6,1,2,与原数据对比 请编写程序实现顺序表得循环移位操作 输入 第一行输入n表示顺序表包含得·n 个数据 第二行输入 n 个数据,数据就是小于 100得正整数 第三行输入移动方向与移动得位数,左移方向为 0,右移方向为 1 第三行输入移动方向与移动得位数,左移方向为 0,右移方向为 1

 输出 第一行输出创建后,顺序表内得所有数据,数据之间用空格隔开 第二行输出执行移位操作后,顺序表内得所有数据,数据之间用空格隔开 第三行输出执行移位操作后,顺序表内得所有数据,数据之间用空格隔开 如果发现输入得移动方向或位数不合法,不执行移位操作,输出 error 样例输入 5 11 22 33 44 55 0 2 1 4 样例输出 11 22 33 44 55

 33 44 55 11 22

 44 55 11 22 33

 三、 实验步骤与过程:

 思路: 1.顺序表类定义 2、顺序表得创建、插入、删除、查找等功能得实现 3、顺序表得测试运行 源代码: A :

 #include<iostream> using namespace std; class List { private:

 int *elem;//

 素元组数ﻩ int listsize;// 度长大最表序顺ﻩ ;htgnel tniﻩ // 度长前当表序顺ﻩpublic:

 List(int size);// 数函造构ﻩ ~List();

 //析构函数

 int ListLength(); //获取顺序表得实际长度

  int ListInsert(int i,int e);// 素元个一入插ﻩ ;)i tni(eteleDtsiL tniﻩ //删除一个元素,返回删除得元素

 int GetElem(int i);// 值素元回返,素元个一取获ﻩﻩ}; List::List(int size) //构造函数 {

 ;ezis=ezistsilﻩ length=0;

 elem=new int[listsize]; } List::~List() //析构函数 {

 ;mele][eteledﻩ //回收空间 } int List::ListLength()// 度长际实得表序顺取获ﻩ{

 ;htgnel nruterﻩ} int List::ListInsert(int i,int e)// 素元个一入插ﻩ{

 if (length==listsize)

 ﻩ return 0;// 满已表序顺ﻩ if (i<1 || i>length+1)

  法合不值 i// ;0 nruterﻩ )1+htgnel==i( fiﻩ

 ;e=]htgnel[meleﻩ else

 )—-j;1—i>j;htgnel=j tni( rofﻩﻩ

  elem[j]=elem[j-1]; //位置 i 后面得元素全部后移一位

 ;e=]1—i[meleﻩ ;++htgnelﻩ return 1; } int List::ListDelete(int i)

 //删除一个元素,返回删除得元素 {

 )0==htgnel( fiﻩ ﻩ return 0;

 )htgnel>i || 1〈i( fiﻩ

 return 0;

 int temp=elem[i—1]; /)++j;htgnel<j;1-i=j tni( rofﻩ/ 位一移前部全素元得面后 i 置位ﻩ ;]1+j[mele=]j[meleﻩﻩ ;—-htgnelﻩ ;pmet nruterﻩ

 } int List::GetElem(int i)

 //获取一个元素,返回元素值 {

 )htgnel>i || 1<i(fiﻩ ;0 nruterﻩﻩ ;]1—i[mele nruterﻩ} int main()

 {

 ;pmet,nel,i tniﻩ List myList(20);// 02 为度长大最,表序顺个一建创ﻩ cin〉〉len;

 )++i;1+nel〈i;1=i(rofﻩ {ﻩ

 cin>〉temp;

  myList、ListInsert(i,temp);

 }ﻩ/)++i;1+)(htgneLtsiL、tsiLym<i;1=i(rofﻩ/ 表序顺印打ﻩ

 ;” ”〈〈)i(melEteG、tsiLym〈〈tuocﻩ cout〈〈endl;

 ;j,mele tniﻩ

 ﻩ cin>>elem>〉j;// 置位得入插及以数入插入输ﻩ myList、ListInsert(j,elem);//

 作操入插行执ﻩ for(i=1;i<myList、ListLength()+1;i++) //打印插入后得结果

  ;" ”<<)i(melEteG、tsiLym〈<tuocﻩ ;ldne〈<tuocﻩ

 ;j>>nicﻩ //输入删除得位置 / ;)j(eteleDtsiL、tsiLymﻩ/ 作操除删行执ﻩ for(i=1;i〈myList、ListLength()+1;i++)

 //打印插入后得结果

  cout<<myList、GetElem(i)<〈" ";

 ;ldne<<tuocﻩ

  cin>〉j;

 据数得置位定指出输// ;ldne<〈)j(melEteG、tsiLym<<tuocﻩ return 0; } B: #include<iostream〉 using namespace std; class List {

 private: /;mele* tniﻩ/ 素元组数ﻩ int listsize; //顺序表最大长度 /;htgnel tniﻩ/ 度长前当表序顺ﻩﻩpublic:

 List(int size);//构造函数 ~ ;)(tsiLﻩ

 //析构函数

 int ListLength();// 度长际实得表序顺取获ﻩ ;)e tni,i tni(tresnItsiL tniﻩ //插入一个元素

 int ListDelete(int i);

 //删除一个元素,返回删除得元素

 int GetElem(int i); ﻩ // 值素元回返,素元个一取获ﻩ/;)b tni,a s tniﻩ/ 素元个二换交ﻩﻩ}; List::List(int size)//构造函数 {

 ;ezis=ezistsilﻩ ;0=htgnelﻩ elem=new int[listsize]; } List::~List()//析构函数 {

 ;mele][eteledﻩ} int List::ListLength()//获取顺序表得实际长度 {

 ;htgnel nruterﻩ} int List::ListInsert(int i,int e)

 //插入一个元素 {

 if (length==listsize)

  return 0; //顺序表已满

 )1+htgnel〉i || 1<i( fiﻩ ﻩ return 0;// 法合不值 iﻩ if (i==length+1)

  elem[length]=e;

 else

 /)—-j;1—i〉j;htgnel=j tni( rofﻩ/ 位一移后部全素元得面后 i 置位ﻩ ﻩ

 elem[j]=elem[j-1];

 elem[i-1]=e;

 ;++htgnelﻩ ;1 nruterﻩ} int List::ListDelete(int i)//删除一个元素,返回删除得元素 {

  )0==htgnel( fiﻩ

 return 0;

 )htgnel>i || 1<i( fiﻩ

 ;0 nruterﻩ ;]1—i[mele=pmet tniﻩ/)++j;htgnel<j;1—i=j tni( rofﻩ/ 位一移前部全素元得面后 i 置位ﻩﻩ

 ;]1+j[mele=]j[meleﻩ ;——htgnelﻩ return temp; } int List::GetElem(int i)

 // 值素元回返,素元个一取获ﻩ{

 )htgnel>i || 1<i(fiﻩ

 ;0 nruterﻩ ;]1-i[mele nruterﻩ} int List::s a,int b)

 //交换二个元素 {

 if (a<1 || a〉length || b〈1 || b〉length || a==b)

 ﻩ{ﻩ /;”rorre"<〈tuocﻩ/ 错报则,法合不入输ﻩ ﻩ return 0;

 }ﻩ else

 {

 / ;]1-a[mele=pmet tniﻩ/ 素元换交ﻩ

 elem[a-1]=elem[b-1];

  elem[b-1]=temp;

 }ﻩ return 1; } int main()

 {

 int i,len,temp;

 List myList(100);// 001为度长大最,表序顺个一建创ﻩ ;nel〉>nicﻩ for(i=1;i<len+1;i++)

 {

 ;pmet〉〉nicﻩﻩ

 myList、ListInsert(i,temp);

 } /)++i;1+)(htgneLtsiL、tsiLym<i;1=i(rofﻩ/ 表序顺印打ﻩ ;” "<<)i(melEteG、tsiLym〈〈tuocﻩﻩ ;ldne<〈tuocﻩ

  置位得素元换交入输// ;y,x tniﻩ ;y>〉x>〉nicﻩ/))s、tsiLym( fiﻩ/ 素元个二这换交ﻩ {ﻩ for(i=1;i<myList、ListLength()+1;i++)//打印交换元素后得顺序表

  ;” "<<)i(melEteG、tsiLym<<tuocﻩ cout〈<endl;

 }ﻩ

  cin〉〉x>〉y; /))s、tsiLym( fiﻩ/ 素元个二这换交ﻩ {

 for(i=1;i<myList、ListLength()+1;i++)//打印交换元素后得顺序表

  cout〈〈myList、GetElem(i)<<” ";

 ;ldne〈<tuocﻩ }

 return 0; } C :

 #include〈iostream〉 using namespace std; class List { private:

 int *elem;

 int listsize;// 度长大最表序顺ﻩ

 ;htgnel tniﻩ //顺序表当前长度 public:

 数函造构// ;)ezis tni(tsiLﻩ ~List(); // 数函构析ﻩ/;)(htgneLtsiL tniﻩ/ 度长际实得表序顺取获ﻩ int ListInsert(int i,int e); //插入一个元素 /;)i tni(eteleDtsiL tniﻩ/ 素元得除删回返,素元个一除删ﻩ/;)i tni(melEteG tniﻩ/ 值素元回返,素元个一取获ﻩﻩ 并合得表序顺个两现实//;)b& tsiL,a& tsiL(cnuf tni dneirfﻩ}; List::List(int size)// 数函造构ﻩ{

 listsize=size;

 length=0;

 elem=new int[listsize];

 } List::~List()// 数函构析ﻩﻩ{

 间空收回//;mele][eteledﻩ} int List::ListLength() //获取顺序表得实际长度 {

 ;htgnel nruterﻩ} int List::ListInsert(int i,int e)// 素元个一入插ﻩ{

 )ezistsil==htgnel( fiﻩ ﻩ return 0;// 满已表序顺ﻩ if (i<1 || i>length+1)

  法合不值 i// ;0 nruterﻩ )1+htgnel==i( fiﻩ

 ;e=]htgnel[meleﻩ else

  )--j;1-i〉j;htgnel=j tni( rofﻩ

 ﻩ elem[j]=elem[j—1];// 位一移后部全素元得面后 i 置位ﻩ elem[i-1]=e;

 length++;

 ;1 nruterﻩ} int List::ListDelete(int i)// 素元得除删回返,素元个一除删ﻩ{

 )0==htgnel( fiﻩ ;0 nruterﻩﻩ )htgnel〉i || 1<i( fiﻩ

 return 0;

 int temp=elem[i—1];

 )++j;htgnel<j;1—i=j tni( rofﻩ ﻩ elem[j]=elem[j+1];// 位一移前部全素元得面后 i 置位ﻩ ;-—htgnelﻩ ;pmet nruterﻩ} int List::GetElem(int i)// 值素元回返,素元个一取获ﻩ{

 )htgnel〉i || 1<i(fiﻩ ;0 nruterﻩﻩ ;]1—i[mele nruterﻩ} int func(List &A,List &B)// 并合得表序顺个两现实ﻩ{

  ;a tniﻩ

 for (int i=0;i<B、ListLength();i++)

  {ﻩ

 a=—1;

  )++j;)(htgneLtsiL、A<j;0=j tni(rofﻩ

 {ﻩﻩ置位得入插找寻//)]j[mele、A<]i[mele、B( fiﻩ

 {ﻩﻩ

 ﻩ

 ;j=aﻩ;kaerbﻩﻩ

 ﻩ }

  }

 ﻩ if(a==—1)

 ﻩ { ﻩ/;]i[mele、B=]htgnel、A[mele、Aﻩ/插,得大最是就]i[mele、Bﻩ到末尾

 ﻩﻩ A、length++; //顺序表当前长度+1

  }ﻩ

 esleﻩ ﻩ {

 ﻩ for(int k=A、length—1;k>=a;k—-)//位置 i 后面得元素全部前移一位

 ﻩ;]k[mele、A=]1+k[mele、Aﻩ

  A、elem[a]=B、elem[i];//将 B、elem[i]插到位置 i 处

 1+度长前当表序顺// ;++htgnel、Aﻩ ﻩ }

  }

 ;0 nruterﻩ} int main()

 {

 int i,len,temp;

 ;)001(1tsiLym tsiLﻩ //创建一个顺序表1,最大长度为 100 /;)001(2tsiLym tsiLﻩ/ 001为度长大最,2 表序顺个一建创ﻩ cin>〉len;//输入顺序表 1 长度

 for(i=1;i<len+1;i++)//输入数据

 {ﻩ

 cin>>temp;

 ﻩ myList1、ListInsert(i,temp);

 }

 cin〉>len;//输入顺序表 2 长度

 据数入输//)++i;1+nel<i;1=i(rofﻩ {ﻩ

 cin>>temp;

 ;)pmet,i(tresnItsiL、2tsiLymﻩ }ﻩ/;)2tsiLym,1tsiLym(cnufﻩ/ 并合 2 表序顺与 1 表序顺将ﻩ for(i=1;i<myList1、ListLength()+1;i++)//结得后并合出输ﻩ果

 ﻩ cout〈〈myList1、GetElem(i)<〈" ";

 ;ldne<<tuocﻩ return 0; } D: #include<iostream〉 using namespace std; class List { private:

 int *elem;

 度长大最表序顺// ;ezistsil tniﻩ int length; // 度长前当表序顺ﻩpublic:

 数函造构// ;)ezis tni(tsiLﻩ ~List();// 数函构析ﻩﻩ int ListLength();// 度长际实得表序顺取获ﻩ/;)e tni,i tni(tresnItsiL tniﻩ/ 素元个一入插ﻩ 素元得除删回返,素元个一除删// ;)i tni(eteleDtsiL tniﻩ int GetElem(int i);// 值素元回返,素元个一找查ﻩﻩ int Move(int a,int b); }; List::List(int size) //构造函数 {

 listsize=size;

 ;0=htgnelﻩ ;]ezistsil[tni wen=meleﻩ} List::~List()// 数函构析ﻩﻩ{

 间空收回//;mele][eteledﻩ} int List::ListLength()

 //获取顺序表得实际长度 {

 ;htgnel nruterﻩ} int List::ListInsert(int i,int e)

 //插入一个元素 {

  )ezistsil==htgnel( fiﻩ ﻩ return 0;// 满已表序顺ﻩ if (i<1 || i>length+1)

  ;0 nruterﻩ //i值不合法

 )1+htgnel==i( fiﻩ ﻩ elem[length]=e;

 esleﻩ

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

 elem[j]=elem[j—1];// 位一移后部全素元得面后 i 置位ﻩ elem[i-1]=e;

 ;++htgnelﻩ ;1 nruterﻩ} int List::ListDelete(int i)// 素元得除删回返,素元个一除删ﻩ{

 if (length==0)

 ;0 nruterﻩﻩ )htgnel>i || 1<i( fiﻩ ;0 nruterﻩﻩ int temp=elem[i-1];

 )++j;htgnel<j;1-i=j tni( rofﻩ ﻩ elem[j]=elem[j+1];// 位一移前部全素元得面后 i 置位ﻩ ;——htgnelﻩ return temp; } int List::GetElem(int i)// 值素元回返,素元个一找查ﻩ{

 if(i〈1 || i>length)

 ;0 nruterﻩﻩ return elem[i-1]; } int List::Move(int a,int b)

 {

 ;j,i tniﻩ 间空得度长倍2个一造构先//;]htgnel*2[tni wen=p* tniﻩ for (i=0;i<length;i++)

  ;]i[mele=]i[pﻩ for (j=0;j〈length;j++,i++)

 ;]j[mele=]i[pﻩﻩ //实际上p指向得就是 elem*2 得数组

 移左向则,0==a 若//)0==a( fiﻩ ﻩ for(i=0;i<length;i++)

 mele 给果结得后位 b 移左向将//;]b+i[p=]i[meleﻩ 移右向则,1==a 若//)1==a( fiﻩ

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

  ﻩ

 elem[i]=p[i+length-b];//将向右移 b 位后得结果给 elem

 ;0 nruterﻩ} int main() {

 ;pmet,nel,i tniﻩ/;)001(tsiLym tsiLﻩ/ 001 为度长大最,表序顺个一建创ﻩ 度长表序顺入输//;nel>>nicﻩ for(i=1;i<len+1;i++)//输入数据

 {

  cin〉>temp;

  myList、ListInsert(i,temp);

 }ﻩ for(i=1;i〈myList、ListLength()+1;i++)//打印顺序表

  ;" "<<)i(melEteG、tsiLym<<tuocﻩ ;ldne<<tuocﻩ int a,b;

 ;b〉〉a>〉nicﻩ myList、Move(a,b);// 位移环循ﻩ 表序顺印打//)++i;1+)(htgneLtsiL、tsiLym〈i;1=i(rofﻩ

 cout<<myList、GetElem(i)<〈" ”;

 cout<<endl;

 cin>〉a>>b;

 //循环移位

 myList、Move(a,b);

 for(i=1;i〈myList、ListLength()+1;i++)//打印顺序表

  ;” "<<)i(melEteG、tsiLym<〈tuocﻩ cout<<endl;

 return 0; }

 四、实验结果及数据处理分析:

 A:

 实验基本达到实验要求 B:

 实验基本达到实验要求 C:

 实验基本达到实验要求 D:

  实验基本达到实验要求 五、实验结论 与体会:

  从这个实验中我学会了线性表一些基本操作,例如插入、查找与删除。也复习了一边C++语言程序得规范。原先试了很多次都就是出现错误,最后才发现太久没编程,犯了很多低级错误,从中体会到编程就是需要时间与耐心得。

  要求挺简单得,就就是如此简单得插入、查找、删除、循环移位等。程序写完了,但就是还发现程序中还有许多不完善得地方、不严谨得地方,如异常处理,在不按正确输入格式输入时,会出现程序错误或死了得情况.

 指导教师批阅意见:

 成绩评定:

 指导教师签字:

  年

 月

 日 备注:

 注:1、报告内得项目或内容设置,可根据实际情况加以调整与补充。

  2、教师批改学生实验报告时间应在学生提交实验报告时间后10 日内。

推荐访问:实验 数据结构 报告

版权所有:格斯文档网 2010-2024 未经授权禁止复制或建立镜像[格斯文档网]所有资源完全免费共享

Powered by 格斯文档网 © All Rights Reserved.。浙ICP备19042928号