实验三 线性表操作
一、 要求完成时间
实验开始后的第四周之前完成
二、 实验目的
掌握线性表的基本操作:插入、删除、查找。
掌握链表遍历器的使用方法。
三、 实验内容
1、 输入n个不为零的整数作为节点元素值,遇到0代表输入结束(不创建元素值为0的节点),创建有序链表。输出整个链表。
2、 输入一个整数,将该数插入到有序表相应位置。输出整个链表。
3、 输入一个整数,在链表中进行搜索,输出其在链表中的位置。如果不存在输出0。
4、 再一次输入一个整数,在链表中进行搜索,输出其在链表中的位置。如果不存在输出0。
5、 再一次输入n个不为零的整数作为节点元素值,遇到0代表输入结束(不创建元素值为0的节点),创建有序链表。输出整个链表。
6、 使用链表遍历器实现上面两个有序链表的合并,输出合并后的链表。
7、 提示:注意单节点链表的测试。
8、输入输出请严格按下面要求的格式实现
代码:
#include <iostream>
using namespace std;
class OutOfBounds {
public:
OutOfBounds(){
cout<<"out of bounds"<<endl;
}
};
class Nomen{
public:
Nomen(){
cout<<"Nomen error"<<endl;
}
};
//使new引发NoMem异常而不是xalloc异常
//如果要恢复原始行为可以做以下调用
//_set_new_handler(Old_Handler);
int my_new_handler(size_t size){
throw Nomen();
}
template <class T>
class ChainNode {
public:
T data;
ChainNode<T> *link;
};
template <class T>
class Chain{
public:
Chain(){first =0;}//构造函数
~Chain();//析构函数,就是删掉链表中的每一个节点
bool IsEmpty()const {//判断链表是不是没有元素
return first==0;
}
int Length()const;//返回链表的长度
bool Find(int k,T& x)const;//寻找第k个元素并将其放到x中
void Erase();//删除链表中的所有节点
void Output(ostream& out) const;//输出链表
int Search(const T& x)const;//寻找是否存在x这个值
Chain<T>& Delete(int k,T& x);//删除节点
Chain<T>& Insert(int k,const T& x);//插入节点
Chain<T>& AutoInsert(const T& x);//自动寻找位置并插入节点
Chain<T>& Append(const T& x);//在链表的最后加上元素
Chain<T>& Reverse1();//反序1
Chain<T>& Reverse2(Chain<T>& A,Chain<T>& B);//反序2
Chain<T>& Merge(Chain<T>