SglLinkedList.h文件
#pragma once
/*
*Copyright© 中国地质大学(武汉) 信息工程学院
*All right reserved.
*
*文件名称:SysLog.h
*摘 要:实现系统登陆功能
*
*当前版本:1.0
*作 者:邵玉胜
*完成日期:2018-03-09
*/
#include<iostream>
using namespace std;
//结点模板类定义
template<class T>
struct LinkedNode
{
T _data; //存放数据域
LinkedNode* _next; //存放指针域,指向下一结点
LinkedNode(LinkedNode<T>* ptr = nullptr) { //仅初始化指针成员的构造函数
_next = ptr;
}
//初始化指针域与数据域的构造函数
LinkedNode(const T& data, LinkedNode<T>* ptr = nullptr) {
_data = data;
_next = ptr;
}
};
//单链表模板类定义
template<class T>
class SglLinkedList
{
private:
LinkedNode<T>* _pFirst; //指向头结点的指针
int _iCurrent; //保存结点数
LinkedNode<T>* _pRear; //指向尾结点的指针
public:
SglLinkedList(); //构造函数
void init(SglLinkedList<T>& listPar); //初始化函数
SglLinkedList(SglLinkedList<T>& listPar); //复制构造函数
//赋值运算符重载
SglLinkedList<T>& operator = (SglLinkedList<T> listPar);
~SglLinkedList(); //析构函数
//输入输出函数
void input(T endTag); //输入函数
void output(); //输出函数
//追加与插入函数
void append(const T data); //追加函数
bool insert(int pos, const T data); //插入函数,pos从1开始
//删除与置空函数
bool remove(int pos, T& data); //删除第pos个位置的数据并用data保存起来
void makeEmpty(); //将整个链表置空
//判断链表是否为空的函数
bool isEmpty()const { return (_iCurrent == 0) ? true:false; } //判断链表空否
取特定位置数据的函数
bool getItem(const int pos, T& data)const; //取出pos个位置的数据并用data保存起来
//取头结点
LinkedNode<T>* getHead(); //获取头结点地址
LinkedNode<T>* getRear(); //获取尾结点地址
LinkedNode<T>* search(const T data)const; //搜索含数据x的元素
LinkedNode<T>* locate(const int pos)const; //取出第pos个元素的位置,pos从1开始
void sort(bool asc = true); //排序函数
int getLengh()const { return _iCurrent; }; //获取表的长度
};
template < class T >
SglLinkedList<T>::SglLinkedList()
{
_pRear = _pFirst = new LinkedNode<T>(); //创建头结点
if (_pFirst == nullptr) { //如果内存分配失败
cerr << "初始化时内存分配错误!" << endl;
exit(-1);
}
_iCurrent = 0; //还未包含结点
}
//获取头指针的函数
template<class T>
LinkedNode<T>* SglLinkedList<T>::getHead() {
return _pFirst;
}
//获取尾结点的地址
template<class T>
LinkedNode<T>* SglLinkedList<T>::getRear() {
return _pRear;
}
//初