仿JavaAPI 链表适用各种数据类型
来源:互联网 发布:pvf物品导入数据库 编辑:程序博客网 时间:2024/05/22 12:20
#ifndef list_HH#define list_HH#include <iostream>#include<stdlib.h>#include<typeinfo> /*author 王金龙QQ: 1473371475*/using namespace std;template <typename type>struct Node{ type value; Node *next;};template <typename type>class List{private: int len; Node<type> *head;public: List(); ~List(); bool add(type); bool remove(int index); type getValue(int index); int getIndex(type value); int getLength(); void traverse();};template <typename type>List<type>::List(){ head = (new Node<type>()); len = -1; head->next = NULL;}template <typename type>bool List<type>::add(type value){ try{ if(len == -1) {if(head == NULL){head = (new Node<type>());len = -1;} head->value = value; head->next = NULL; len++; 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; ++len; return true; }catch(...){} return false;}template <typename type>bool List<type>::remove(int index){if(index > len || index < 0) { return false; } Node<type> *aTemp = head; Node<type> *pTemp = NULL; int count = 0; while(count <= len) { if(count == index && index == 0) { head =aTemp->next; free(aTemp); aTemp = NULL; len--; break; } if(count == index) { pTemp->next = aTemp->next; free(aTemp); len--; aTemp = NULL; break; } pTemp = aTemp; aTemp = aTemp->next; count++; } return true;}template <typename type>int List<type>::getLength(){ return len+1;}template <typename type>type List<type>::getValue(int index){ if(index < 0 || index > len) { return NULL; } Node<type> * temp = head; int count = 0; while(count <= len) { if(count == index) { return temp->value; } temp = temp->next; count++; } return NULL;}template <typename type>int List<type>::getIndex(type value){ if(len == -1) { return -1; } Node<type> *temp = head; int count = 0; while(count <= len) { type v = temp->value; if(v == value) { return count; } temp = temp->next; count++; } return -1;}template <typename type>void List<type>::traverse(){ if(len == -1) { return; } Node<type> *temp = head; int count = 0; while(count <= len) { cout << temp->value << ", "; temp = temp->next; ++count; } cout << endl;}template <typename type>List<type>::~List(){ Node<type> *temp = head; Node<type> *temp1 = NULL; int count = 0; while(count <= len) { temp1 = temp;temp = temp->next; if(temp1 != NULL) { delete temp1;temp1 = NULL;} count++; }}#endif