实验一类和对象
实验课程名:面向对象程序设计(C++)
专业班级:学号::
实验时间:实验地点:指导教师:
2.设计一个带头结点的单链表类,要求:
(1)生成一个整数线性表,实现将其分解成两个链表,
其中一个全部为奇数,另一个全部为偶数(尽量利
用已知的存储空间)。
(2)设计一个测试主函数,实际运行验证所设计单链表类的正确性。
实验代码:#include<iostream>
using namespace std;
template <class T>
struct Node
{
T data;
Node<T> *next; //此处<T>也可以省略
};
template <class T>
"<<endl;
L1.Insert(4, 17);
cout<<"插入元素后链表为:";
L1.PrintList( );
L1.Delete(8);
cout<<"删除第8个元素后链表变为:";
L1.PrintList( );
return 0;
}
实验结果:
3.设计一个不带头结点的单链表类,要求:
(1)不带头结点单链表类的成员函数包括取数据元素个
数、插入元素、删除所有值为k的元素、取数据元素。
(提示:要考虑在第一个数据元素结点前插入和删除第
一个数据元素结点时与在其他位置插入和删除其他
位置结点时的不同情况。
)
(2)设计一个测试主函数,实际运行验证所设计循环单链表类的正确性。
实验代码:
#include<iostream>
using namespace std;
cout<<"在链表第5个位置插入元素17后链表变为:";
L.PrintList();
L.Delete(8);
cout<<"删除第8个元素后链表变为:";
L.PrintList();
return 0;
}
实验结果为:
4.设计一个带头结点的循环单链表类,实现约瑟夫环问题;
问题描述:设编号为1,2,…,n(n>0)个人按顺时针方向围坐-圈,每人持有一个正整数密码。
开始时任意给出一个报数上限值m从第一个人开始顺时针方向自1起顺序报数。
报到m时停止报数,报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人起重新自1起顺序报数.如此下去,直到所有人全部出列为止。
要求设计一个程序模拟此过程,并给出出列人的编号序列。
测试数据:
n=7,7个人的密码依次为3,1,7,2,4,8,4
初始报数上限值m=20
实验代码:
#include<iostream>
using namespace std;
struct Node//定义一个接点包含编号,密码,指针变量{
int num;
int code;
p->data=0;
i=0;
}
cout<<endl;
}
int main()
{
CirList list;
list.inputcode();
list.Done();
return 0;
}
实验结果:
*5.设计一个带头结点的循环双向链表类,要求:
(1)带头结点循环双向链表类的成员函数包括:取数据
元素个数、插入、删除、取数据元素。
(2)设计一个测试主函数,实际运行验证所设计循环双向链表类的正确性
实验代码:
实验结果:
*6.设计一个单链表实现一元多项式求和问题。
要求:(1)设计存储结构表示一元多项式;
(2)设计算法实现一元多项式相加。
实验代码:#include <iostream>
using namespace std;
struct Node
{
int e;
int x;
Node *next;
};
class LinkList
{
public:
LinkList(){first=new Node;first->next=NULL;}
LinkList(int a[],int b[],int n); //建立有n个元素的单链表
void PrintList(LinkList &L); //遍历单链表,按序号依次输出各元素
friend void function (LinkList &La,LinkList &Lb,LinkList &Lc);//友元函数,多项式的加减
private:
Node *first; //单链表的头指针
};
LinkList ::LinkList(int a[],int b[],int n)//生成多项式
{
first=new Node; //生成头结点
k->x=q->x;
o->next=k;
o=k;
p=q;
q=q->next;
}
}
if(q)o->next=q;
if(s)o->next=s;
}
实验结果:
三、结论
1)在类中有私有成员与共有成员,一般将类函数作为共有成员而把数据作为私有成员。
2)类中的私有成员只能被类函数引用,但友元函数可以引用类的私有成员,友元函数定义为:friend 函数类型函数名,一般在类中定义。
3)类模板用于类的定义相同只有类的成员类型不同,定义形式为:Template<class T> 类名{};在类外定义函数时:template<class T>
函数类型类名<T>::函数名(){}。