欢迎访问有用文档网!

当前位置: 有用文档网 > 述职报告 >

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

| 浏览次数:

 深

 圳

 大

 学

 实

 验

 报

 告 告

 课程名称:

 数据结构实验与课程设计

 实验项目名称:

  实验一:顺序表得应用

  学院:

 计算机与软件学院

 专业:

 指导教师:

 :

  蔡平

 报告人:

 :

 文成

 学号:

 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 日内。

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

热门排行Top Ranking

弦振动实验报告

弦振动得研究 一、实验目得 1、观察固定均匀弦振动共振干涉形成驻波时得波形,加深驻波得认识。 2、了

宣传委员述职报告12020 幼儿园党支部宣传委员述职报告

下面是小编为大家精心整理的宣传委员述职报告12020幼儿园党支部宣传委员述职报告文章,供大家阅读参考。宣传委员述

党建工作现场述职会上讲话 公安局长在党建工作现场会上的讲话

下面是小编为大家精心整理的党建工作现场述职会上讲话公安局长在党建工作现场会上的讲话文章,供大家阅读参考。党建工作现场

支部宣传委员述职述廉报告范例 幼儿园党支部宣传委员述职报告

下面是小编为大家精心整理的支部宣传委员述职述廉报告范例幼儿园党支部宣传委员述职报告文章,供大家阅读参考。支部宣传

政治生态评估报告5篇

可能会捆绑住经办人员的手脚,不利于业务工作的开展。致使个别中层干部主体责任压力传导出现能量损耗;个别

2021年领导述职报告合集2020 县领导述职报告

下面是小编为大家精心整理的2021年领导述职报告合集2020县领导述职报告文章,供大家阅读参考。2

工商局监察室主任述职述廉报告

工商局监察室主任述职述廉报告 第一篇:工商局监察室主任述职述廉报告 我叫haoword,中共党员,现

党支部书记个人述职报告 对村党支部书记述职报告的点评

下面是小编为大家精心整理的党支部书记个人述职报告对村党支部书记述职报告的点评文章,供大家阅读参考。党支部书记个人

财务分析课程报告4篇

财务分析课程报告4篇财务分析课程报告篇1一年来,在领导和同事们的的支持帮助和指导下,加上自身的不断努

结合乡村振兴战略人才工作述职报告 乡村振兴工作员年度述职

下面是小编为大家精心整理的结合乡村振兴战略人才工作述职报告乡村振兴工作员年度述职文章,供大家阅读参考。结合

个人安全生产履职报告[安全生产述职报告] 党委书记安全生产履职报告

下面是小编为大家精心整理的个人安全生产履职报告[安全生产述职报告]党委书记安全生产履职报告文章,供大家阅读参

企业年度工作总结报告范文13篇

企业年度工作总结报告范文13篇企业年度工作总结报告范文篇1时光飞逝,转眼已经毕业一年了,我顺利地完成