您的位置:首页 > 其它

类模板 实现链表

2013-06-11 19:28 274 查看
模板类的声明和实现要放在同一个文件夹下才行,不然会提示找不到函数

#ifndef LinkList_HH
#define LinkList_HH
#include<stdlib.h>
#include <stdio.h>
template <typename type>

struct Node
{
type value;
Node *next;
};

template <typename type>
class LinkList
{
private:
int Length;
Node<type> *head;
public:
LinkList();
bool add(type);//添加节点
bool remove(int);//删除节点
type getValue(int);//获得某节点的值
int getIndex(type);//获取某节点的索引
int getLength();//获取链表的长度
Node<type>* getHead();//获取链表的头指针
bool addnode(int ,type);//增加节点信息 插入到第int个之后
~LinkList();//释放链表
};

template <typename type>
LinkList<type>::LinkList()
{
head = (new Node<type>());
Length = -1;
head->next = NULL;
}

template <typename type>
bool LinkList<type>::add(type value)
{
try{
if(Length == -1)
{
head->value = value;
head->next = NULL;
Length = 0;
return true;
}

Node<type> *temp = head;
while(temp->next != NULL)
{
temp = temp->next;
}
Node<type> *node = new Node<type>();
node->value = value;
node->next = NULL;
temp->next = node;
++Length;
return true;
}catch(...){}
return false;
}
template <typename type>
bool LinkList<type>::remove(int index)
{
if(index > Length || index < 0)
{
return false;
}

Node<type> *aTemp = head;
Node<type> *pTemp = NULL;
int count = 0;
while(count <= Length)
{
if(count == index && index == 0)
{
head =aTemp->next;
free(aTemp);
aTemp = NULL;
Length--;
break;
}
if(count == index)
{
pTemp->next = aTemp->next;
free(aTemp);
Length--;
aTemp = NULL;
break;
}
pTemp = aTemp;
aTemp = aTemp->next;
count++;
}
return true;
}
template <typename type>

bool LinkList<type>::addnode(int index, type value)
{
try{
if(index ==Length)
{
add(value);
return true;
}
else if(index<0||index>Length)
{
printf("不可预料的站点位置\n");
return false;
}
int count =0;
Node<type> *temp = head;
while(count<index)
{
temp = temp->next;
count++;
}
Node<type> *node = new Node<type>();
node->value = value;
node->next = temp->next;
temp->next = node;
++Length;
return true;
}catch(...){}
return false;
}
template <typename type>
int LinkList<type>::getLength()
{
return Length+1;
}
template <typename type>

Node<type>* LinkList<type>::getHead()
{
return head;
}
template <typename type>
type LinkList<type>::getValue(int index)
{
if(index < 0 || index > Length)
{
return NULL;
}
Node<type> * temp = head;
int count = 0;
while(count <= Length)
{
if(count == index)
{
return temp->value;
}
temp = temp->next;
count++;
}
return NULL;
}
template <typename type>
int LinkList<type>::getIndex(type value)
{
if(Length == -1)
{
return -1;
}
Node<type> *temp = head;
int count = 0;
while(count <= Length)
{
type v = temp->value;
if(v == value)
{
return count;
}
temp = temp->next;
count++;
}
return -1;
}
template <typename type>
LinkList<type>::~LinkList()
{
Node<type> *temp = head;
Node<type> *temp1 = NULL;
int count = 0;
while(count <= Length)
{
temp1 = temp;
if(temp1 != NULL)
{
temp = temp->next;
free(temp1);
temp1 = NULL;
}
count++;
}
}
#endif
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: