您的位置:首页 > 编程语言 > C语言/C++

链表的C++实现

2016-04-10 11:23 441 查看

链表的C++实现

数组中插入一个元素或者删除一个元素时,必须移动数组中的元素,从而使动态列表的顺序存储低效。链表可以解决这一问题,它由数据和一个指向下一个节点的指针组成。基本的操作有构造、判空、插入、删除和遍历。

构造

令头结点head=null。

判空

判断 head==null?

插入

插入可以分别三种情况:1.列表为空;2.当前元素值比头结点的元素值小,该节点作为头结点;3.在链表中某一元素后面插入

删除

删除可以分为四种情况:1.链表为空;2.删除头结点;3.删除链表中一个不是头结点的元素;4.遍历到最后一个节点,还没找到,那么就是链表中没有要删除的节点。

遍历

遍历分两种情况:1.链表为空;2.向后遍历,知道当前节点不是NULL。

程序如下:

#include <iostream>
using namespace std;
template<typename DataType>
class List
{
public:
List();
bool empty() const;
void Insert(DataType & value);
void Delete(DataType & item);
void Display()const;
public:
class node
{
public:
node(){ next = NULL; }
public:
DataType data;
node* next;
};
private:
node* head;
};
template<typename DataType>
List<DataType>::List()
{
head = NULL;
}
template<typename DataType>
bool List<DataType>::empty()const
{
return (head == NULL);
}
template<typename DataType>
void List<DataType>::Insert(DataType & value)
{
node* n = new node;
n->data = value;
if (empty())
head = n;
else
{
node* p = head;
node* pre = NULL;
if (value<=p->data)
{
n->next = p;
head = n;
}
else
{
while (p != NULL&&value>p->data)
{
pre = p;
p = p->next;
}
n->next = p;
pre->next = n;
}
}
}
template<typename DataType>
void List<DataType>::Delete(DataType & item)
{
if (empty())
cout << "List is empty!" << endl;
else
{
if (item==head->data)
{
head = head->next;
delete head;
}
else
{
node* p = head;
node* pre = NULL;
while (p != NULL&&p->data != item)
{
pre = p;
p = p->next;
}
if (p != NULL)
{
pre->next = p->next;
delete p;
}
else
cout << "Item does not exist in the List!" << endl;
}
}
}
template<typename DataType>
void List<DataType>::Display()const
{
if (empty())
cout << "List is empty!" << endl;
else
{
node* p = head;
while (p!=NULL)
{
cout << p->data << " ";
p = p->next;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: