您的位置:首页 > 理论基础 > 数据结构算法

C++数据结构之单链表

2012-12-31 15:36 162 查看
以前在学数据结构的时候,单链表是用C语言实现的,所以最近我用C++重新写了一个单链表,复习以前学过的知识。

下面是相关的代码,主要实现的单链表的插入、删除、查找(返回索引)、显示、反转和返回其长度。

template<class T>
class Node
{
private:
template <typename T>
friend class LinkedList;
Node(T d);
T data;
Node<T> *next;

};
template<class T>
class LinkedList
{
public:
LinkedList();
void insert(T d);
void remove(T d);
int search(T d);
void showAll();
void reverse();
int length();
private:
int len;
Node<T> *head;
};

template<class T>
Node<T>::Node(T d)
{
data = d;
}

template<class T>
LinkedList<T>::LinkedList()
{
head = new Node<T>(0);
head->next = NULL;
len = 0;
}

template<class T>
void LinkedList<T>::insert(T d)
{
Node<T> *p,*q;
p = head;
while(p->next!=NULL)
p = p->next;
q = new Node<T>(d);
p->next = q;
q->next = NULL;
len++;
}

template<class T>
void LinkedList<T>::remove(T d)
{
Node<T> *p = head;
int i=0;
int index = search(d);
if(index>=0)
{
for(;i<index;i++)
p = p->next;
p->next = p->next->next;
len--;
}
else
std::cout<<d<<"不存在"<<std::endl;

}

template<class T>
int LinkedList<T>::search(T d)
{
Node<T> *p = head->next;
int index = 0;
while(p)
{
if(p->data == d)
return index;
else
p = p->next;
}
return -1;
}

template<class T>
void LinkedList<T>::showAll()
{
Node<T> *p = head->next;
while(p)
{
std::cout<<p->data<<"\t";
p=p->next;
}
}

template<class T>
int LinkedList<T>::length()
{
return len;
}

template<class T>
void LinkedList<T>::reverse()
{
Node<T> *p = head->next;
Node<T> *q = head->next;
head->next = NULL;
while(p)
{
q = p->next;
p->next = head->next;
head->next = p;
p=q;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: