收藏 分销(赏)

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

上传人:快乐****生活 文档编号:4354537 上传时间:2024-09-12 格式:DOC 页数:17 大小:76KB 下载积分:8 金币
下载 相关 举报
数据结构实验报告(实验一).doc_第1页
第1页 / 共17页
数据结构实验报告(实验一).doc_第2页
第2页 / 共17页


点击查看更多>>
资源描述
深 圳 大 学 实 验 报 告     课程名称:  数据结构实验与课程设计        实验项目名称:  实验一:顺序表得应用           学院:         计算机与软件学院          专业:                                指导教师:        蔡平          报告人:  文成  学号:  2011150259ﻩ   班级:  5       实验时间:                2012-9—17          实验报告提交时间:     2012—9-24         教务部制 一、实验目得与要求: 目得: 1、掌握线性表得基本原理 2、掌握线性表地基本结构 3、掌握线性表地创建、插入、删除、查找得实现方法 要求: 1、熟悉C++语言编程 2、熟练使用C++语言实现线性表地创建、插入、删除、查找得实现方法 二、实验内容: Problem 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得位置 Problem 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 本题执行两次交换操作,注意写好输入接口。 Problem 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;ﻩ//顺序表最大长度 ﻩint length; ﻩ//顺序表当前长度 public: List(int size);ﻩ//构造函数 ~List(); //析构函数 int ListLength(); //获取顺序表得实际长度 int ListInsert(int i,int e);ﻩ//插入一个元素 ﻩint ListDelete(int i); //删除一个元素,返回删除得元素 int GetElem(int i);ﻩﻩ//获取一个元素,返回元素值 }; List::List(int size) //构造函数 { ﻩlistsize=size; length=0; elem=new int[listsize]; } List::~List() //析构函数 { ﻩdelete[]elem; //回收空间 } int List::ListLength()ﻩ//获取顺序表得实际长度 { ﻩreturn length; } int List::ListInsert(int i,int e)ﻩ//插入一个元素 { if (length==listsize) ﻩ return 0;ﻩ//顺序表已满 if (i<1 || i>length+1) ﻩreturn 0; //i值不合法 ﻩif (i==length+1) ﻩelem[length]=e; else ﻩﻩfor (int j=length;j>i—1;j-—) elem[j]=elem[j-1]; //位置i后面得元素全部后移一位 ﻩelem[i—1]=e; ﻩlength++; return 1; } int List::ListDelete(int i) //删除一个元素,返回删除得元素 { ﻩif (length==0) ﻩ return 0; ﻩif (i〈1 || i>length) return 0; int temp=elem[i—1]; ﻩfor (int j=i-1;j<length;j++)ﻩ//位置i后面得元素全部前移一位 ﻩﻩelem[j]=elem[j+1]; ﻩlength-—; ﻩreturn temp; } int List::GetElem(int i) //获取一个元素,返回元素值 { ﻩif(i<1 || i>length) ﻩﻩreturn 0; ﻩreturn elem[i—1]; } int main() { ﻩint i,len,temp; List myList(20);ﻩ//创建一个顺序表,最大长度为20 cin〉〉len; ﻩfor(i=1;i〈len+1;i++) ﻩ{ cin>〉temp; myList、ListInsert(i,temp); ﻩ} ﻩfor(i=1;i<myList、ListLength()+1;i++)ﻩ//打印顺序表 ﻩcout〈〈myList、GetElem(i)〈〈” ”; cout〈〈endl; ﻩint elem,j; ﻩ cin>>elem>〉j;ﻩ//输入插入数以及插入得位置 myList、ListInsert(j,elem);ﻩ //执行插入操作 for(i=1;i<myList、ListLength()+1;i++) //打印插入后得结果 ﻩcout<〈myList、GetElem(i)<<” "; ﻩcout<〈endl; ﻩcin>>j; //输入删除得位置 ﻩmyList、ListDelete(j); ﻩ//执行删除操作 for(i=1;i〈myList、ListLength()+1;i++) //打印插入后得结果 cout<<myList、GetElem(i)<〈" "; ﻩcout<<endl; cin>〉j; ﻩcout<<myList、GetElem(j)〈<endl; //输出指定位置得数据 return 0; } B: #include<iostream〉 using namespace std; class List { private: ﻩint *elem;ﻩ//数组元素 int listsize; //顺序表最大长度 ﻩint length;ﻩﻩ//顺序表当前长度 public: List(int size);//构造函数 ﻩ~List(); //析构函数 int ListLength();ﻩ//获取顺序表得实际长度 ﻩint ListInsert(int i,int e); //插入一个元素 int ListDelete(int i); //删除一个元素,返回删除得元素 int GetElem(int i);ﻩ ﻩ//获取一个元素,返回元素值 ﻩint s a,int b);ﻩﻩ//交换二个元素 }; List::List(int size)//构造函数 { ﻩlistsize=size; ﻩlength=0; elem=new int[listsize]; } List::~List()//析构函数 { ﻩdelete[]elem; } int List::ListLength()//获取顺序表得实际长度 { ﻩreturn length; } int List::ListInsert(int i,int e) //插入一个元素 { if (length==listsize) return 0; //顺序表已满 ﻩif (i<1 || i〉length+1) ﻩ return 0;ﻩ//i值不合法 if (i==length+1) elem[length]=e; else ﻩfor (int j=length;j〉i—1;j-—)ﻩ//位置i后面得元素全部后移一位 ﻩ elem[j]=elem[j-1]; elem[i-1]=e; ﻩlength++; ﻩreturn 1; } int List::ListDelete(int i)//删除一个元素,返回删除得元素 { ﻩif (length==0) return 0; ﻩif (i<1 || i>length) ﻩreturn 0; ﻩint temp=elem[i—1]; ﻩfor (int j=i—1;j<length;j++)ﻩﻩ//位置i后面得元素全部前移一位 ﻩelem[j]=elem[j+1]; ﻩlength——; return temp; } int List::GetElem(int i) ﻩ//获取一个元素,返回元素值 { ﻩif(i<1 || i>length) ﻩreturn 0; ﻩreturn elem[i-1]; } int List::s a,int b) //交换二个元素 { if (a<1 || a〉length || b〈1 || b〉length || a==b) ﻩ{ﻩ ﻩcout〈<"error”;ﻩ//输入不合法,则报错 ﻩ return 0; ﻩ} else { ﻩint temp=elem[a-1]; ﻩ//交换元素 elem[a-1]=elem[b-1]; elem[b-1]=temp; ﻩ} return 1; } int main() { int i,len,temp; List myList(100);ﻩ//创建一个顺序表,最大长度为100 ﻩcin>〉len; for(i=1;i<len+1;i++) { ﻩﻩcin〉〉temp; myList、ListInsert(i,temp); } ﻩfor(i=1;i<myList、ListLength()+1;i++)ﻩ//打印顺序表 ﻩﻩcout〈〈myList、GetElem(i)<<" ”; ﻩcout〈<endl; ﻩint x,y; //输入交换元素得位置 ﻩcin〉>x〉>y; ﻩif (myList、s))ﻩ//交换这二个元素 ﻩ{ for(i=1;i<myList、ListLength()+1;i++)//打印交换元素后得顺序表 ﻩcout<<myList、GetElem(i)<<" ”; cout〈<endl; ﻩ} cin〉〉x>〉y; ﻩif (myList、s))ﻩ//交换这二个元素 { for(i=1;i<myList、ListLength()+1;i++)//打印交换元素后得顺序表 cout〈〈myList、GetElem(i)<<” "; ﻩcout<〈endl; } return 0; } C: #include〈iostream〉 using namespace std; class List { private: int *elem; int listsize;ﻩ//顺序表最大长度 ﻩint length; //顺序表当前长度 public: ﻩList(int size); //构造函数 ~List(); ﻩ//析构函数 ﻩint ListLength();ﻩ//获取顺序表得实际长度 int ListInsert(int i,int e); //插入一个元素 ﻩint ListDelete(int i);ﻩ//删除一个元素,返回删除得元素 ﻩint GetElem(int i);ﻩﻩ//获取一个元素,返回元素值 ﻩfriend int func(List &a,List &b);//实现两个顺序表得合并 }; List::List(int size)ﻩ//构造函数 { listsize=size; length=0; elem=new int[listsize]; } List::~List()ﻩﻩ//析构函数 { ﻩdelete[]elem;//回收空间 } int List::ListLength() //获取顺序表得实际长度 { ﻩreturn length; } int List::ListInsert(int i,int e)ﻩ//插入一个元素 { ﻩif (length==listsize) ﻩ return 0;ﻩ//顺序表已满 if (i<1 || i>length+1) ﻩreturn 0; //i值不合法 ﻩif (i==length+1) ﻩelem[length]=e; else ﻩfor (int j=length;j〉i-1;j--) ﻩ elem[j]=elem[j—1];ﻩ//位置i后面得元素全部后移一位 elem[i-1]=e; length++; ﻩreturn 1; } int List::ListDelete(int i)ﻩ//删除一个元素,返回删除得元素 { ﻩif (length==0) ﻩﻩreturn 0; ﻩif (i<1 || i〉length) return 0; int temp=elem[i—1]; ﻩfor (int j=i—1;j<length;j++) ﻩ elem[j]=elem[j+1];ﻩ//位置i后面得元素全部前移一位 ﻩlength—-; ﻩreturn temp; } int List::GetElem(int i)ﻩ//获取一个元素,返回元素值 { ﻩif(i<1 || i〉length) ﻩﻩreturn 0; ﻩreturn elem[i—1]; } int func(List &A,List &B)ﻩ//实现两个顺序表得合并 { ﻩint a;     for (int i=0;i<B、ListLength();i++) ﻩ{ a=—1; ﻩfor(int j=0;j<A、ListLength();j++) ﻩ{ ﻩﻩﻩif (B、elem[i]<A、elem[j])//寻找插入得位置 ﻩﻩ{ ﻩ ﻩa=j; ﻩﻩﻩﻩbreak; ﻩ } } ﻩ if(a==—1) ﻩ { ﻩﻩﻩA、elem[A、length]=B、elem[i];ﻩ//B、elem[i]就是最大得,插到末尾 ﻩﻩ A、length++; //顺序表当前长度+1 ﻩ} ﻩelse ﻩ { ﻩ for(int k=A、length—1;k>=a;k—-)//位置i后面得元素全部前移一位 ﻩﻩﻩ A、elem[k+1]=A、elem[k];  A、elem[a]=B、elem[i];//将B、elem[i]插到位置i处 ﻩ   A、length++; //顺序表当前长度+1 ﻩ } } ﻩreturn 0; } int main() { int i,len,temp; ﻩList myList1(100); //创建一个顺序表1,最大长度为100 ﻩList myList2(100);ﻩ//创建一个顺序表2,最大长度为100 cin>〉len;//输入顺序表1长度 for(i=1;i<len+1;i++)//输入数据 ﻩ{ cin>>temp; ﻩ myList1、ListInsert(i,temp); } cin〉>len;//输入顺序表2长度 ﻩfor(i=1;i<len+1;i++)//输入数据 ﻩ{ cin>>temp; ﻩmyList2、ListInsert(i,temp); ﻩ} ﻩfunc(myList1,myList2);ﻩ//将顺序表1与顺序表2合并 for(i=1;i<myList1、ListLength()+1;i++)ﻩ//输出合并后得结果 ﻩ cout〈〈myList1、GetElem(i)<〈" "; ﻩcout<<endl; return 0; } D: #include<iostream〉 using namespace std; class List { private: int *elem; ﻩint listsize; //顺序表最大长度 int length; ﻩ//顺序表当前长度 public: ﻩList(int size); //构造函数 ~List();ﻩﻩ//析构函数 int ListLength();ﻩ//获取顺序表得实际长度 ﻩint ListInsert(int i,int e);ﻩ//插入一个元素 ﻩint ListDelete(int i); //删除一个元素,返回删除得元素 int GetElem(int i);ﻩﻩ//查找一个元素,返回元素值 int Move(int a,int b); }; List::List(int size) //构造函数 { listsize=size; ﻩlength=0; ﻩelem=new int[listsize]; } List::~List()ﻩﻩ//析构函数 { ﻩdelete[]elem;//回收空间 } int List::ListLength() //获取顺序表得实际长度 { ﻩreturn length; } int List::ListInsert(int i,int e) //插入一个元素 { ﻩif (length==listsize) ﻩ return 0;ﻩ//顺序表已满 if (i<1 || i>length+1) ﻩreturn 0; //i值不合法 ﻩif (i==length+1) ﻩ elem[length]=e; ﻩelse for (int j=length;j>i-1;j--) elem[j]=elem[j—1];ﻩ//位置i后面得元素全部后移一位 elem[i-1]=e; ﻩlength++; ﻩreturn 1; } int List::ListDelete(int i)ﻩ//删除一个元素,返回删除得元素 { if (length==0) ﻩﻩreturn 0; ﻩif (i<1 || i>length) ﻩﻩreturn 0; int temp=elem[i-1]; ﻩfor (int j=i-1;j<length;j++) ﻩ elem[j]=elem[j+1];ﻩ//位置i后面得元素全部前移一位 ﻩlength——; return temp; } int List::GetElem(int i)ﻩ//查找一个元素,返回元素值 { if(i〈1 || i>length) ﻩﻩreturn 0; return elem[i-1]; } int List::Move(int a,int b) { ﻩint i,j; ﻩint *p=new int[2*length];//先构造一个2倍长度得空间 for (i=0;i<length;i++) ﻩp[i]=elem[i]; for (j=0;j〈length;j++,i++) ﻩﻩp[i]=elem[j]; //实际上p指向得就是elem*2得数组 ﻩif (a==0)//若a==0,则向左移 ﻩ for(i=0;i<length;i++) ﻩelem[i]=p[i+b];//将向左移b位后得结果给elem ﻩif (a==1)//若a==1,则向右移 for(i=0;i<length;i++) ﻩ elem[i]=p[i+length-b];//将向右移b位后得结果给elem ﻩreturn 0; } int main() { ﻩint i,len,temp; ﻩList myList(100);ﻩ//创建一个顺序表,最大长度为100 ﻩcin>>len;//输入顺序表长度 for(i=1;i<len+1;i++)//输入数据 { cin〉>temp; myList、ListInsert(i,temp); ﻩ} for(i=1;i〈myList、ListLength()+1;i++)//打印顺序表 ﻩcout<<myList、GetElem(i)<<" "; ﻩcout<<endl; int a,b; ﻩcin〉>a〉〉b; myList、Move(a,b);ﻩ//循环移位 ﻩfor(i=1;i〈myList、ListLength()+1;i++)//打印顺序表 cout<<myList、GetElem(i)<〈" ”; cout<<endl; cin>〉a>>b; //循环移位 myList、Move(a,b); for(i=1;i〈myList、ListLength()+1;i++)//打印顺序表 ﻩcout〈<myList、GetElem(i)<<" ”; cout<<endl; return 0; } 四、实验结果及数据处理分析: A: 实验基本达到实验要求 B: 实验基本达到实验要求 C: 实验基本达到实验要求 D: 实验基本达到实验要求 五、实验结论与体会: 从这个实验中我学会了线性表一些基本操作,例如插入、查找与删除。也复习了一边C++语言程序得规范。原先试了很多次都就是出现错误,最后才发现太久没编程,犯了很多低级错误,从中体会到编程就是需要时间与耐心得。   要求挺简单得,就就是如此简单得插入、查找、删除、循环移位等。程序写完了,但就是还发现程序中还有许多不完善得地方、不严谨得地方,如异常处理,在不按正确输入格式输入时,会出现程序错误或死了得情况. 指导教师批阅意见: 成绩评定:               指导教师签字:                年   月   日 备注: 注:1、报告内得项目或内容设置,可根据实际情况加以调整与补充。    2、教师批改学生实验报告时间应在学生提交实验报告时间后10日内。
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服