单向链表
一、定义:
单向链表(单链表)时链表的一种,它由节点组成,每个节点都包含下一个节点的指针。
1、定义节点类
//定义节点类
struct Node
{
Node(const Type x);
Type data;
Node *next;
};
2、定义单链表类
class SList
{
public:
SList();//构造函数
SList(const SList&s);//拷贝构造函数
SList &operator=(SList &s);//赋值运算符重载
~SList();//析构函数
public:
//单链表的具体操作
bool isEmpty();
int length();
void reverseList();//逆置
void printList();//打印链表
void Clear();
//void sortList();//排序
void pushBack(const Type &data);//在尾部插入一个节点
void popBack();//删除尾节点
void pushFront(Type data);//头插
void popFront();//删除头节点\
private:
Node *head;
int len;//链表长度
};
单链表的特点是:节点的链接方向是单向的;相对于数组来说,单链表的的随机访问速度较慢,但是单链表删除/添加数据的效率很高。
二、实现:
单链表的实现方式有很多种,常见的有
(1)带头结点的单链表
(2)不带头结点的单链表
(3)带头节点和尾节点的单链表
(1)和(2)的主要区别是:
(1)的头节点是个空节点,其主要作用是指向链表的第一个节点,
(2)的头结点不是空节点,是整个链表的第一个节点。
(3)是一个循环链表,即链表的尾节点指向头结点;下面会对各种实现方式进行具体的介绍。
下面给出单链表几种实现方式的完整示例代码,所有的示例代码工程都是由codeblocks创建和编译的。
带头结点的单链表的C++实现
不带头结点的单链表的C++实现
带头结点和尾节点的单链表的C++实现