数据结构之单链表(SglLinkedList)源码

本文详细介绍了单链表数据结构SglLinkedList的实现,包括头文件SglLinkedList.h的定义以及在main.cpp测试文件中的应用,通过实例展示了如何操作和使用该链表。测试结果显示代码运行正确,能够完成预期功能。
摘要由CSDN通过智能技术生成

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;
}

//初
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值