数据结构相关笔记整理(一)
这里主要是整理自己在学习数据结构的时候的笔记,这篇博客主要整理单链表的模板类附带几个内置函数的测试,新手上路,多多包涵,发现错误及时交流.....
第一部分是主类代码:(直接贴了哈~~)
#include <iostream>
#include <iomanip>
#include "linearList.h"
using namespace std;
#include <iomanip>
#include "linearList.h"
using namespace std;
//定义单链表的模板类
template<class T>
struct LinkNode{
T data; //数据域
struct LinkNode<T> *link; //指针域
LinkNode(struct LinkNode<T> *ptr = NULL){ link = ptr; } //只初始化指针成员的构造函数
LinkNode(const T &item, struct LinkNode<T> *ptr = NULL) //数据和地址都初始化的构造函数
{
data = item;
link = ptr;
}
};
//单链表类定义
template<class T>
class List {
public:
List() { first = new LinkNode<T>; } //构造函数
List(const T &x) {first = new LinkNode<T>(x)} //构造函数
List(List<T> &L); //复制构造函数
~List(){ makeEmpty(); } //析构函数
void makeEmpty(); //将链表置空
int Length() const; //计算链表的长度
LinkNode<T> * getHead() const{ return first; }
LinkNode<T> * Search(T x); //搜素数据为x的节点
LinkNode<T> * Locate(int i)const; //搜索第i个元素的地址
bool getData(int i, T &x) const; //取出第i个节点的数据
void setData(int i, T &x); //用x修改第i个元素的值
bool Insert(int i, T &x); //在第i个节点后插入新节点
bool Remove(int i, T &x); //删除第i个节点数据返回到x中
bool IsEmpty() const //判断表是否为NULL
{
return first->link == NULL ? true : false;
}
bool IsFull() const { return false; } //判断表满
void Sort(); //排序
void InputFront(T endFlag); //倒序创建单链表
void InputRear(T endFlag); //正序创建单链表
void Output(); //输出
List<T>& operator=(List<T> & L); //重载赋值运算符
protected:
struct LinkNode<T> *first;
};
//class的函数定义
template<class T>
List<T>::List(List<T> & L) {
//复制构造函数
T value;
LinkNode<T> *srcptr = L.getHead();
LinkNode<T> *destptr = first = new L
template<class T>
struct LinkNode{
T data; //数据域
struct LinkNode<T> *link; //指针域
LinkNode(struct LinkNode<T> *ptr = NULL){ link = ptr; } //只初始化指针成员的构造函数
LinkNode(const T &item, struct LinkNode<T> *ptr = NULL) //数据和地址都初始化的构造函数
{
data = item;
link = ptr;
}
};
//单链表类定义
template<class T>
class List {
public:
List() { first = new LinkNode<T>; } //构造函数
List(const T &x) {first = new LinkNode<T>(x)} //构造函数
List(List<T> &L); //复制构造函数
~List(){ makeEmpty(); } //析构函数
void makeEmpty(); //将链表置空
int Length() const; //计算链表的长度
LinkNode<T> * getHead() const{ return first; }
LinkNode<T> * Search(T x); //搜素数据为x的节点
LinkNode<T> * Locate(int i)const; //搜索第i个元素的地址
bool getData(int i, T &x) const; //取出第i个节点的数据
void setData(int i, T &x); //用x修改第i个元素的值
bool Insert(int i, T &x); //在第i个节点后插入新节点
bool Remove(int i, T &x); //删除第i个节点数据返回到x中
bool IsEmpty() const //判断表是否为NULL
{
return first->link == NULL ? true : false;
}
bool IsFull() const { return false; } //判断表满
void Sort(); //排序
void InputFront(T endFlag); //倒序创建单链表
void InputRear(T endFlag); //正序创建单链表
void Output(); //输出
List<T>& operator=(List<T> & L); //重载赋值运算符
protected:
struct LinkNode<T> *first;
};
//class的函数定义
template<class T>
List<T>::List(List<T> & L) {
//复制构造函数
T value;
LinkNode<T> *srcptr = L.getHead();
LinkNode<T> *destptr = first = new L