数据结构实验报告实验一.docx
- 文档编号:9549231
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:27
- 大小:53.87KB
数据结构实验报告实验一.docx
《数据结构实验报告实验一.docx》由会员分享,可在线阅读,更多相关《数据结构实验报告实验一.docx(27页珍藏版)》请在冰豆网上搜索。
数据结构实验报告实验一
深 圳大学 实验报告
课程名称:
数据结构实验与课程设计
实验项目名称:
实验一:
顺序表得应用
学院:
计算机与软件学院
专业:
指导教师:
蔡平
报告人:
文成 学号:
2011150259ﻩ 班级:
5
实验时间:
2012-9—17
实验报告提交时间:
2012—9-24
教务部制
一、实验目得与要求:
目得:
1、掌握线性表得基本原理
2、掌握线性表地基本结构
3、掌握线性表地创建、插入、删除、查找得实现方法
要求:
1、熟悉C++语言编程
2、熟练使用C++语言实现线性表地创建、插入、删除、查找得实现方法
二、实验内容:
Problem A:
数据结构——实验1——顺序表例程
Description
实现顺序表得创建、插入、删除、查找
Input
第一行输入顺序表得实际长度n
第二行输入n个数据
第三行输入要插入得新数据与插入位置
第四行输入要删除得位置
第五行输入要查找得位置
Output
第一行输出创建后,顺序表内得所有数据,数据之间用空格隔开
第二行输出执行插入操作后,顺序表内得所有数据,数据之间用空格隔开
第三行输出执行删除操作后,顺序表内得所有数据,数据之间用空格隔开
第四行输出指定位置得数据
SampleInput
6
11 2233445566
8883
5
2
SampleOutput
11 22334455 66
11 22888 334455 66
1122888 335566
22
HINT
第i个位置就是指从首个元素开始数起得第i个位置,对应数组内下标为i-1得位置
ProblemB:
数据结构-—实验1——顺序表得数据交换
Description
实现顺序表内得元素交换操作
Input
第一行输入n表示顺序表包含得·n个数据
第二行输入n个数据,数据就是小于100得正整数
第三行输入两个参数,表示要交换得两个位置
第四行输入两个参数,表示要交换得两个位置
Output
第一行输出创建后,顺序表内得所有数据,数据之间用空格隔开
第二行输出执行第一次交换操作后,顺序表内得所有数据,数据之间用空格隔开
第三行输出执行第二次交换操作后,顺序表内得所有数据,数据之间用空格隔开
注意加入交换位置得合法性检查,如果发现位置不合法,输出error。
SampleInput
5
1122334455
24
0 1
SampleOutput
1122334455
1144 332255
error
HINT
本题执行两次交换操作,注意写好输入接口。
ProblemC:
数据结构——实验1——顺序表得合并
Description
假定两个顺序表得数据已经按照从小到大得顺序排列,实现两个顺序表得合并
Input
第一行输入n表示顺序表A包含得·n个数据
第二行输入n个数据,数据就是小于100得正整数
第三行输入m表示顺序表B包含得·n个数据
第二行输入m个数据,数据就是小于100得正整数
Output
输出合并后得顺序表内得所有数据,数据之间用空格隔开
Sample Input
3
113355
4
22 446688
Sample Output
11 2233 44556688
问题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 22334455
0 2
1 4
样例输出
11223344 55
3344551122
4455112233
3、实验步骤与过程:
思路:
1.顺序表类定义
2、顺序表得创建、插入、删除、查找等功能得实现
3、顺序表得测试运行
源代码:
A:
#include<iostream>
usingnamespacestd;
classList
{
private:
int*elem;ﻩ//数组元素
intlistsize;ﻩ//顺序表最大长度
ﻩintlength;ﻩ//顺序表当前长度
public:
List(intsize);ﻩ//构造函数
~List();//析构函数
intListLength();//获取顺序表得实际长度
intListInsert(int i,inte);ﻩ//插入一个元素
ﻩintListDelete(inti);//删除一个元素,返回删除得元素
intGetElem(inti);ﻩﻩ//获取一个元素,返回元素值
};
List:
:
List(int size)//构造函数
{
ﻩlistsize=size;
length=0;
elem=new int[listsize];
}
List:
:
~List()//析构函数
{
ﻩdelete[]elem;//回收空间
}
intList:
:
ListLength()ﻩ//获取顺序表得实际长度
{
ﻩreturnlength;
}
intList:
:
ListInsert(inti,inte)ﻩ//插入一个元素
{
if(length==listsize)
ﻩreturn0;ﻩ//顺序表已满
if(i<1||i>length+1)
ﻩreturn0;//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++;
return1;
}
intList:
:
ListDelete(inti)//删除一个元素,返回删除得元素
{
ﻩif (length==0)
ﻩreturn0;
ﻩif (i〈1||i>length)
return0;
inttemp=elem[i—1];
ﻩfor(intj=i-1;j ﻩﻩelem[j]=elem[j+1]; ﻩlength-—; ﻩreturntemp; } intList: : GetElem(inti)//获取一个元素,返回元素值 { ﻩif(i<1||i>length) ﻩﻩreturn0; ﻩreturnelem[i—1]; } intmain() { ﻩinti,len,temp; ListmyList(20);ﻩ//创建一个顺序表,最大长度为20 cin〉〉len; ﻩfor(i=1;i〈len+1;i++) ﻩ{ cin>〉temp; myList、ListInsert(i,temp); ﻩ} ﻩfor(i=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< ﻩcout< cin>〉j; ﻩcout< return 0; } B: #include<iostream〉 using namespacestd; classList { private: ﻩint*elem;ﻩ//数组元素 int listsize;//顺序表最大长度 ﻩintlength;ﻩﻩ//顺序表当前长度 public: List(intsize);//构造函数 ﻩ~List();//析构函数 intListLength();ﻩ//获取顺序表得实际长度 ﻩintListInsert(inti,inte);//插入一个元素 intListDelete(inti);//删除一个元素,返回删除得元素 intGetElem(int i);ﻩﻩ//获取一个元素,返回元素值 ﻩintsa,intb);ﻩﻩ//交换二个元素 }; List: : List(intsize)//构造函数 { ﻩlistsize=size; ﻩlength=0; elem=newint[listsize]; } List: : ~List()//析构函数 { ﻩdelete[]elem; } intList: : ListLength()//获取顺序表得实际长度 { ﻩreturn length; } intList: : ListInsert(int i,int e)//插入一个元素 { if(length==listsize) return0;//顺序表已满 ﻩif(i<1||i〉length+1) ﻩreturn0;ﻩ//i值不合法 if (i==length+1) elem[length]=e; else ﻩfor(intj=length;j〉i—1;j-—)ﻩ//位置i后面得元素全部后移一位 ﻩelem[j]=elem[j-1]; elem[i-1]=e; ﻩlength++; ﻩreturn1; } intList: : ListDelete(inti)//删除一个元素,返回删除得元素 { ﻩif(length==0) return 0; ﻩif(i<1||i>length) ﻩreturn0; ﻩinttemp=elem[i—1]; ﻩfor (intj=i—1;j<length;j++)ﻩﻩ//位置i后面得元素全部前移一位 ﻩelem[j]=elem[j+1]; ﻩlength——; returntemp; } intList: : GetElem(inti)ﻩ//获取一个元素,返回元素值 { ﻩif(i<1||i>length) ﻩreturn0; ﻩreturn elem[i-1]; } intList: : sa,intb)//交换二个元素 { if (a<1||a〉length ||b〈1||b〉length||a==b) ﻩ{ﻩ ﻩcout〈<"error”;ﻩ//输入不合法,则报错 ﻩreturn 0; ﻩ} else { ﻩinttemp=elem[a-1];ﻩ//交换元素 elem[a-1]=elem[b-1]; elem[b-1]=temp; ﻩ} return1; } int main() { int i,len,temp; ListmyList(100);ﻩ//创建一个顺序表,最大长度为100 ﻩcin>〉len; for(i=1;i<len+1;i++) { ﻩﻩcin〉〉temp; myList、ListInsert(i,temp); } ﻩfor(i=1;i ﻩﻩcout〈〈myList、GetElem(i)<<"”; ﻩcout〈 ﻩintx,y;//输入交换元素得位置 ﻩcin〉>x〉>y; ﻩif(myList、s))ﻩ//交换这二个元素 ﻩ{ for(i=1;i<myList、ListLength()+1;i++)//打印交换元素后得顺序表 ﻩcout< 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 namespacestd; class List { private: int *elem; int listsize;ﻩ//顺序表最大长度 ﻩintlength;//顺序表当前长度 public: ﻩList(intsize);//构造函数 ~List();ﻩ//析构函数 ﻩintListLength();ﻩ//获取顺序表得实际长度 int ListInsert(inti,inte);//插入一个元素 ﻩintListDelete(inti);ﻩ//删除一个元素,返回删除得元素 ﻩintGetElem(inti);ﻩﻩ//获取一个元素,返回元素值 ﻩfriendintfunc(List&a,List &b);//实现两个顺序表得合并 }; List: : List(int size)ﻩ//构造函数 { listsize=size; length=0; elem=newint[listsize]; } List: : ~List()ﻩﻩ//析构函数 { ﻩdelete[]elem;//回收空间 } intList: : ListLength()//获取顺序表得实际长度 { ﻩreturnlength; } intList: : ListInsert(int i,inte)ﻩ//插入一个元素 { ﻩif(length==listsize) ﻩreturn0;ﻩ//顺序表已满 if(i<1||i>length+1) ﻩreturn0;//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++; ﻩreturn1; } intList: : ListDelete(inti)ﻩ//删除一个元素,返回删除得元素 { ﻩif(length==0) ﻩﻩreturn0; ﻩif(i<1||i〉length) return0; inttemp=elem[i—1]; ﻩfor(intj=i—1;j<length;j++) ﻩelem[j]=elem[j+1];ﻩ//位置i后面得元素全部前移一位 ﻩlength—-; ﻩreturntemp; } intList: : GetElem(inti)ﻩ//获取一个元素,返回元素值 { ﻩif(i<1||i〉length) ﻩﻩreturn 0; ﻩreturn elem[i—1]; } intfunc(List&A,List &B)ﻩ//实现两个顺序表得合并 { ﻩint a; for(inti=0;i<B、ListLength();i++) ﻩ{ a=—1; ﻩfor(intj=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 ﻩ} } ﻩreturn0; } int main() { inti,len,temp; ﻩList myList1(100);//创建一个顺序表1,最大长度为100 ﻩListmyList2(100);ﻩ//创建一个顺序表2,最大长度为100 cin>〉len;//输入顺序表1长度 for(i=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 ﻩcout〈〈myList1、GetElem(i)<〈" "; ﻩcout< return0; } D: #include<iostream〉 usingnamespace std; class List { private: int*elem; ﻩintlistsize;//顺序表最大长度 int length;ﻩ//顺序表当前长度 public: ﻩList(intsize);//构造函数 ~List();ﻩﻩ//析构函数 intListLength();ﻩ//获取顺序表得实际长度 ﻩintListInsert(inti,inte);ﻩ//插入一个元素 ﻩint ListDelete(inti);//删除一个元素,返回删除得元素 intGetElem(int i);ﻩﻩ//查找一个元素,返回元素值 int Move(inta,intb); }; List: : List(intsize)//构造函数 { listsize=size; ﻩlength=0; ﻩelem=new int[listsize]; } List: : ~List()ﻩﻩ//析构函数 { ﻩdelete[]elem;//回收空间 } int List: : ListLength()//获取顺序表得实际长度 { ﻩreturnlength; } intList: : ListInsert(int i,inte)//插入一个元素 { ﻩif (length==listsize) ﻩreturn 0;ﻩ//顺序表已满 if (i<1||i>length+1) ﻩreturn0;//i值不合法 ﻩif(i==length+1) ﻩelem[length]=e; ﻩelse for (intj=length;j>i-1;j--) elem[j]=elem[j—1];ﻩ//位置i后面得元素全部后移一位 elem[i-1]=e; ﻩlength++; ﻩreturn1; } intList: : ListDelete(inti)ﻩ//删除一个元素,返回删除得元素 { if(length==0) ﻩﻩreturn0; ﻩif(i<1||i>length) ﻩﻩreturn 0; inttemp=elem[i-1]; ﻩfor(intj=i-1;j ﻩelem[j]=elem[j+1];ﻩ//位置i后面得元素全部前移一位 ﻩlength——; returntemp; } intList: : GetElem(inti)ﻩ//查找一个元素,返回元素值 { if(i〈1|| i>length) ﻩﻩreturn0; returnelem[i-1]; } int List: : Move(inta,int b) { ﻩint i,j; ﻩint *p=newint[2*length];//先构造一个2倍长度得空间 for(i=0;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 ﻩelem[i]=p[i+length-b];//将向右移b位后得结果给elem ﻩreturn 0; } intmain()
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验 报告