c++类和对象实验报告Word格式文档下载.docx
- 文档编号:20941185
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:32
- 大小:136.93KB
c++类和对象实验报告Word格式文档下载.docx
《c++类和对象实验报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《c++类和对象实验报告Word格式文档下载.docx(32页珍藏版)》请在冰豆网上搜索。
~SeqList(){}//析构函数为空
intLength(){returnlength;
}//求线性表的长度
TGet(inti);
//按位查找,取线性表的第i个元素
intLocate(Tx);
//按值查找,求线性表中值为x的元素序号
voidInsert(inti,Tx);
//在线性表中第i个位置插入值为x的元素
TDelete(inti);
//删除线性表的第i个元素
voidPrintList();
//遍历线性表,按序号依次输出各元素
private:
Tdata[MaxSize];
//存放数据元素的数组
intlength;
//线性表的长度
};
SeqList<
T>
:
SeqList(Ta[],intn)
inti;
if(n>
MaxSize)throw"
参数非法"
;
for(i=0;
i<
n;
i++)
data[i]=a[i];
length=n;
}
TSeqList<
Get(inti)
if(i<
1&
&
i>
length)throw"
查找位置非法"
elsereturndata[i-1];
intSeqList<
Locate(Tx)
length;
i++)
if(data[i]==x)returni+1;
//下标为i的元素等于x,返回其序号i+1
return0;
//退出循环,说明查找失败
voidSeqList<
Insert(inti,Tx)
intj;
if(length>
=MaxSize)throw"
上溢"
1||i>
length+1)throw"
位置"
for(j=length;
j>
=i;
j--)
data[j]=data[j-1];
//注意第j个元素存在数组下标为j-1处
data[i-1]=x;
length++;
Delete(inti)
Tx;
if(length==0)throw"
下溢"
x=data[i-1];
for(j=i;
j<
j++)
data[j-1]=data[j];
//注意此处j已经是元素所在的数组下标
length--;
returnx;
template<
PrintList()
for(i=0;
i<
i++)
cout<
<
data[i]<
'
'
cout<
endl;
intmain()
{
intm,n,t;
inta[10]={0,1,2,3,4,5,6,7,8,9};
SeqList<
int>
seq(a,10);
*p;
p=&
seq;
"
线性表的长度为:
p->
Length()<
p->
PrintList();
请输入要查找元素的位置:
cin>
>
您所要找的元素为:
Get(n)<
请输入要查找的元素值:
该值所在的位置为:
Locate(n)<
请分别输入插入位置与要插入的元素"
n>
t;
Insert(n,t);
请输入要删除的元素所在的位置:
Delete(n);
运行结果:
2.设计一个带头结点的单链表类,要求:
(1)生成一个整数线性表,实现将其分解成两个链表,其中一个全部为奇数,另一个全部为偶数(尽量利用已知的存储空间)。
(2)设计一个测试主函数,实际运行验证所设计单链表类的正确性。
structNode
Tdata;
Node<
*next;
//此处<
也可以省略
classLinkList
LinkList(){first=newNode<
first->
next=NULL;
}//建立只有头结点的空链表
LinkList(Ta[],intn);
//建立有n个元素的单链表
~LinkList();
//析构函数
intLength();
//求单链表的长度
TGet(inti);
//取单链表中第i个结点的元素值
intLocate(Tx);
//求单链表中值为x的元素序号
voidInsert(inti,Tx);
//在单链表中第i个位置插入元素值为x的结点
TDelete(inti);
//在单链表中删除第i个结点
voidPrintList();
//遍历单链表,按序号依次输出各元素
Node<
*first;
//单链表的头指针
LinkList<
LinkList(Ta[],intn)//头查法建立单链表
*s;
first=newNode<
//初始化一个空链表
for(i=n-1;
=0;
i--)
{
s=newNode<
s->
data=a[i];
//为每个数组元素建立一个结点
next=first->
next;
//插入到头结点之后
next=s;
}
~LinkList()//析构函数
*p,*q;
p=first;
while(p)
{
q=p;
p=p->
deleteq;
intLinkList<
Length()//求链表的长度
inti=0;
i++;
returni-1;
TLinkList<
Get(inti)//求单链表中第i个元素的值
intn=0;
while(p&
i>
n)
n++;
returnp->
data;
Locate(Tx)//求单链表中值为x的元素序号
p;
if(p->
data==x)
returni;
voidLinkList<
PrintList()//输出函数
p=first->
data<
Insert(inti,Tx)//在第i个位置插入元素x
n<
i-1)
++n;
q=newNode<
q->
data=x;
next=p->
next=q;
Delete(inti)//删除第i个结点
while(p->
next&
q=p->
next=q->
returnq->
deleteq;
*p,*q,*r;
LinkList<
L1(a,10),L2,L3;
//定义三个链表
L1.Length()<
p=L1.first->
next,q=L2.first,r=L3.first;
L2.first=newNode<
L2.first->
L3.first=newNode<
L3.first->
while(p)//当链表L1中有元素时进行循环
data%2==0)//当L1中的元素为偶数时插入L2
{
q->
data=p->
next=L2.first->
}
else
r=newNode<
r->
r->
next=L3.first->
next=r;
L1.PrintList();
L2.PrintList();
L3.PrintList();
链表的长度为:
L1.Length()<
链表的第四个元素为:
L1.Get(4)<
链表中元素5为第"
L1.Locate(5)<
个元素"
L1.Insert(4,17);
插入元素后链表为:
L1.Delete(8);
删除第8个元素后链表变为:
实验结果:
3.设计一个不带头结点的单链表类,要求:
(1)不带头结点单链表类的成员函数包括取数据元素个数、插入元素、删除所有值为k的元素、取数据元素。
(提示:
要考虑在第一个数据元素结点前插入和删除第一个数据元素结点时与在其他位置插入和删除其他位置结点时的不同情况。
)
(2)设计一个测试主函数,实际运行验证所设计循环单链表类的正确性。
public:
LinkList(){first=newNode<
LinkList(Ta[],intn);
~LinkList();
intLength();
TGet(inti);
voidInsert(inti,Tx);
private:
LinkList(Ta[],intn)
inti=1;
data=a[0];
for(i=1;
q=newNode<
q->
p->
p=q;
~LinkList()
deletefirst;
first=p;
Length()
returni;
intj=1;
j<
i)
j++;
L(a,10);
链表长为:
L.Length()<
链表的第6个元素为:
L.Get(6)<
L.Insert(5,17);
在链表第5个位置插入元素17后链表变为:
L.PrintList();
L.Delete(8);
实验结果为:
4.设计一个带头结点的循环单链表类,实现约瑟夫环问题;
问题描述:
设编号为1,2,…,n(n>
0)个人按顺时针方向围坐-圈,每人持有一个正整数密码。
开始时任意给出一个报数上限值m从第一个人开始顺时针方向自1起顺序报数。
报到m时停止报数,报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人起重新自1起顺序报数.如此下去,直到所有人全部出列为止。
要求设计一个程序模拟此过程,并给出出列人的编号序列。
测试数据:
n=7,7个人的密码依次为3,1,7,2,4,8,4
初始报数上限值m=20
structNode//定义一个接点包含编号,密码,指针变量
intnum;
intcode;
intdata;
//标志位,当该人没有被踢出时为1
Node*next;
classCirList
voidDone();
//踢人,实现约瑟夫环的功能
CirList();
//构造函数,建立一个带头结点的循环链表
voidinputcode();
//输入密码
Node*first;
intperson;
//定义游戏人数
CirList:
CirList()
Node*p;
first=newNode;
请输入游戏人数:
person;
for(i=person;
0;
i--)
p=newNode;
num=i;
data=1;
first->
next=p;
next)
next=first;
voidCirList:
inputcode()
请输入每个人的密码:
cin>
code;
Done()
intm=20,n,i=1;
p=p->
for(n=person;
n--)
while(i!
=m)
p=p->
if(p->
data==1)
{
i++;
}
num<
m=p->
data=0;
i=0;
CirListlist;
list.inputcode();
list.Done();
*5.设计一个带头结点的循环双向链表类,要求:
(1)带头结点循环双向链表类的成员函数包括:
取数据元素个数、插入、删除、取数据元素。
(2)设计一个测试主函数,实际运行验证所设计循环双向链表类的正确性
*next,*front;
first->
front=NULL;
//建立有n个元素的双向链表
//求双向链表的长度
//取双向链表中第i个结点的元素值
//求双向链表中值为x的元素序号
//在双向链表中第i个位置插入元素值为x的结点
//在双向链表中删除第i个结点
//双向链表的头指针
LinkList(Ta[],
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c+ 对象 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)