类模板 实现链表
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
相关文章推荐
- 数据结构C++模板实现之----------------单向链表
- 模板实现顺序表和链表
- 网络流模板——链表实现
- 【C++】模板实现双链表和队列
- C++模板实现的简单单链表
- 模板容器类及迭代器的实现二(基于链表)
- c++模板链表实现
- c++ 模板 链表实现
- 数据结构(3)单循环链表 c++ 模板实现
- 数据结构学习系列三-单向循环链表(c++实现且应用模板)
- C++类模板 实现双向循环链表的基本算法 《数据结构》(C++版 北京科海)中摘抄
- C++模板实现链表
- C++模板实现的单向链表
- C++用模板实现双链表和队列
- 【代码】模板实现双向链表的去重、拼接、合并、排序
- C++模板实现链表
- 模板实现单链表
- 用模板实现单链表
- 模板实现双向链表
- C++用模板实现单链表