数据结构实验报告实验一.docx

上传人:b****8 文档编号:9549231 上传时间:2023-02-05 格式:DOCX 页数:27 大小:53.87KB
下载 相关 举报
数据结构实验报告实验一.docx_第1页
第1页 / 共27页
数据结构实验报告实验一.docx_第2页
第2页 / 共27页
数据结构实验报告实验一.docx_第3页
第3页 / 共27页
数据结构实验报告实验一.docx_第4页
第4页 / 共27页
数据结构实验报告实验一.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

数据结构实验报告实验一.docx

《数据结构实验报告实验一.docx》由会员分享,可在线阅读,更多相关《数据结构实验报告实验一.docx(27页珍藏版)》请在冰豆网上搜索。

数据结构实验报告实验一.docx

数据结构实验报告实验一

深 圳大学 实验报告

   课程名称:

 数据结构实验与课程设计 

   实验项目名称:

 实验一:

顺序表得应用      

学院:

    计算机与软件学院   

  专业:

               

  指导教师:

    蔡平   

   报告人:

  文成 学号:

 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

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

样例输入

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()

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 思想汇报心得体会

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1