做一个链表

来源:百度知道 编辑:UC知道 时间:2024/05/17 16:03:29
第二次补充作业
1.用C++编程实现一个模板链表类,并且简单测试其各种服务。
要求: a.链表节点是一个类(或者结构)
b.实现服务包括如下:
链表是否位空;
链表长度;
寻找链表中的第k个元素,并返回其值;
寻找元素x,如果发现x,则返回x的地址(在链表中的位置);
从链表中删除第k个元素,并且返回其值;
在第k个元素之后插入元素x;
将链表所有元素送至输出流的服务;
重载输出流操作符< <;
在链表尾部添加一个元素;
删除链表中的所有节点;
实现中必须考虑对一些异常的处理,同时我们必须保证在无法实现服务操作时程序仍然可以正确运行。

2.用c++编程测试多态性:
包括下面的情况:
a.从一个拥有虚函数的基类开始,其子类将继承其多态性(即在子类中不用申明,该函数也是虚函数,
也可以重复申明)。
b.虚函数可以从任意一个中间基类声明(即父类可以不必是虚函数,而其子类却可以)。此时对于父类指针,
没有多态性.多态性只从申明该虚函数的中间基类开始,延续给其子类。
c.抽象类的纯虚函数具有多态性。
我们要求测试编程尽量简单。测试要全面,比如对a.继承性问题,我们要求既要测试基类的虚函数多态性问题,也
要测试基类的非虚函数的多态性问题。

3.用c++编程测试下面的情况:
公有派生和私有派生的比较:(注意,可以只实现对数据的访问测试,
对函数的访问与对数据的访问规则完全相同)
a.在公有派生类和私有派生类内部对基类的访问规则是一样的,即只能访问基类的非私有数据和函数。
b.在公有派生类对象和私有派生类对象对基类的访问规则有异同:
(1)公有派生类对象只可以访问基类的公有数据和函数
(2)私有派生类对象不可以访问任何基类的数据和函数。
c.基类经过私有派生后,私有派生类的子类再不可以访问任何基类的数据和函数。
测试要简单全面,既要测试可以访问的数据函数,也要测试不可以访问的数

#include<iostream.h>
#define Max 50;
class node
{
public:
int info;
node * next;
public:
node(int i, node * h= 0)
{
info=i;
next=h;
}
};
class link
{
private:
node * head ;
node * tail;
public:
link()
{
head=tail=0;
}
void addhead(int m)
{
head=new node(m, head);
if (tail==0)
tail=head;
}
void addtail(int m)
{
if(tail==0)
head=tail=new node(m);
else
{
tail->next=new node(m);
tail=tail->next;
}
}
int clearhead()
{
int i;
if (head==0)
return Max;
i=head->info;
node * p =head;
if(head==tail)
head=tail=0;
else
head=head->next;
delete p;
return i;

}
int cleartail()
{
int i;
if(head==0)
return M