数据结构实验报告实验一Word文档格式.docx
《数据结构实验报告实验一Word文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构实验报告实验一Word文档格式.docx(19页珍藏版)》请在冰豆网上搜索。
1.掌握线性表的基本原理
2.掌握线性表地基本结构
3•掌握线性表地创建、插入、删除、查找的实现方法
要求:
1.熟悉C++语言编程
2•熟练使用C++语言实现线性表地创建、插入、删除、查找的实现方法
二、实验内容:
ProblemA:
数据结构实验1顺序表例程
Description
实现顺序表的创建、插入、删除、查找
Input
第一行输入顺序表的实际长度n
第二行输入n个数据
第三行输入要插入的新数据和插入位置
第四行输入要删除的位置
第五行输入要查找的位置
Output
第一行输出创建后,顺序表内的所有数据,数据之间用空格隔开
第二行输出执行插入操作后,顺序表内的所有数据,数据之间用空格隔开第三行输出执行删除操作后,顺序表内的所有数据,数据之间用空格隔开第四行输出指定位置的数据
SampleInput
6
112233445566
8883
2
SampleOutput
112288833445566
1122888335566
22
HINT
第i个位置是指从首个元素开始数起的第i个位置,对应数组内下标为i-1的位置
ProblemB:
数据结构实验1顺序表的数据交换
Description实现顺序表内的元素交换操作
第一行输入n表示顺序表包含的•n个数据
第二行输入n个数据,数据是小于100的正整数
第三行输入两个参数,表示要交换的两个位置
第四行输入两个参数,表示要交换的两个位置
第二行输出执行第一次交换操作后,顺序表内的所有数据,数据之间用空格隔开
第三行输出执行第二次交换操作后,顺序表内的所有数据,数据之间用空格隔开
注意加入交换位置的合法性检查,如果发现位置不合法,输出error。
1122334455
24
01
1144332255
error
本题执行两次交换操作,注意写好输入接口。
ProblemC:
数据结构实验1顺序表的合并
假定两个顺序表的数据已经按照从小到大的顺序排列,实现两个顺序表的合并
第一行输入n表示顺序表A包含的•n个数据
第三行输入m表示顺序表B包含的•n个数据
第二行输入m个数据,数据是小于100的正整数
输出合并后的顺序表内的所有数据,数据之间用空格隔开
3
113355
4
22446688
11223344556688
问题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,与原数据对比
请编写程序实现顺序表的循环移位操作
输入
第三行输入移动方向和移动的位数,左移方向为0,右移方向为1
输出
第二行输出执行移位操作后,顺序表内的所有数据,数据之间用空格隔开第三行输出执行移位操作后,顺序表内的所有数据,数据之间用空格隔开如果发现输入的移动方向或位数不合法,不执行移位操作,输出error样例输入
02
I4
样例输出
II22334455
3344551122
4455112233
三、实验步骤与过程:
思路:
1.顺序表类定义
2•顺序表的创建、插入、删除、查找等功能的实现
3.顺序表的测试运行
源代码:
A:
#include<
iostream>
usingnamespacestd;
classList
{
private:
int*elem;
〃数组元素
intlistsize;
〃顺序表最大长度
intlength;
〃顺序表当前长度
public:
List(intsize);
//构造函数
~List();
〃析构函数
intListLength();
//获取顺序表的实际长度
intListInsert(inti,inte);
〃插入一个元素
intListDelete(inti);
〃删除一个元素,返回删除的元素
intGetElem(inti);
〃获取一个元素,返回元素值
};
List:
:
List(intsize)//构造函数
listsize=size;
length=0;
elem=newint[listsize];
}
~List()//析构函数
delete[]elem;
//回收空间
intList:
ListLength()//获取顺序表的实际长度
returnlength;
Listlnsert(inti,inte)〃插入一个元素
if(length==listsize)
return0;
//顺序表已满
if(i<
1||i>
length+1)
//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;
ListDelete(inti)〃删除一个元素,返回删除的元素
if(length==0)
length)
inttemp=elem[i-1];
for(intj=i-1;
j<
length;
j++)〃位置i后面的元素全部前移一位
elem[j]=elem[j+1];
length--;
returntemp;
GetElem(inti)〃获取一个元素,返回元素值
if(i<
returnelem[i-1];
intmain()
inti,len,temp;
ListmyList(20);
〃创建一个顺序表,最大长度为20
cin>
>
len;
for(i=1;
i<
len+1;
i++)
temp;
myList.ListInsert(i,temp);
myList丄istLength()+1;
i++)//打印顺序表
cout<
<
myList.GetElem(i)vv"
"
;
cout«
endl;
intelem,j;
elem>
>
j;
〃输入插入数以及插入的位置
myList.ListInsert(j,elem);
〃执行插入操作
i++)//打印插入后的结果
cin»
〃输入删除的位置
myList丄istDelete(j);
//执行删除操作
cin>
myList.GetElem(j)<
〃输出指定位置的数据
B:
{private:
〃顺序表最大长度intlength;
List(intsize);
//构造函数
intListDelete(inti);
intswap(inta,intb);
//交换二个元素
List(intsize)//构造函数
~List()〃析构函数
ListLength()〃获取顺序表的实际长度
ListInsert(inti,inte)〃插入一个元素
if(length==listsize)return0;
length+1)return0;
for(intj=length;
j--)//位置i后面的元素全部后移一位elem[j]=elem[j-1];
ListDelete(inti)//删除一个元素,返回删除的元素
length-