一个很好地List实现源码

来源:互联网 发布:php redis 队列算法 编辑:程序博客网 时间:2024/05/16 03:03

一个很好地List实现源码:

#pragma once#include "list.h"#include <iostream>using namespace std;template <class Type> class List;template <class Type> class Node{Type contents;Node * next;friend List<Type>;};template <class Type> class List{public:List();~List();bool IsEmpty() const {return (pHead==NULL) ? true : false;}//判断链表是否为空int Length() const {return length;} //返回链表中的元素总数bool Find(int k, Type & intnum) const; //寻找链表中的第k个元素,并将其传送至intnumint Search(const Type & intnum) const; //寻找intnum,如果发现intnum,则返回intnum的位置,如果intnum不在链表中,则返回0void Delete(int k, Type & intnum); //把第k个元素取至intnum,然后从链表中删除第k个元素void Insert(int k, const Type &intnum); //在第k个元素之后插入intnumvoid Modify(int k,const Type &intum);//将第k个元素的值修改为intnumvoid ShowListNode(); //显示输出链表的所有数据private:Node<Type> *pHead;int length;};
#include "list.h"template <class Type> List<Type>::~List(){length = 0;delete pHead;pHead = NULL;}template <class Type> List<Type>::List(){length = 0;pHead = NULL;}template <class Type> void List<Type>::Insert(int k, const Type & intnum){if(k==0){if(length == 0){pHead = new Node<Type>;pHead->contents = intnum;length++;}else{Node<Type> *p= new Node<Type>;p->contents = intnum;p->next=pHead;pHead=p;length++;}}else if(k==length){Node<Type> *temp = pHead;for (int i=0;i<k-1;i++){temp = temp->next;}Node<Type> *newNode = new Node<Type>;newNode->contents = intnum;newNode->next = NULL;temp->next = newNode;length++;}else{Node<Type> *temp = pHead;for (int i=0;i<k-1;i++){temp = temp->next;}Node<Type> *newNode = new Node<Type>;newNode->contents = intnum;newNode->next = temp->next;temp->next = newNode;length++;}}template <class Type> void List<Type>::ShowListNode(){if(length == 0){cout<<"空表";}else{                                           Node<Type> *temp = pHead;for(int i=0;i<length;i++){cout<<"节点"<<i+1<<": "<<temp->contents<<endl;if(i!=length-1){temp = temp->next;}}}}template <class Type> void List<Type>::Delete(int k, Type & intnum){Node<Type> *temp = pHead;if(k==1 && k==length){delete pHead;pHead = NULL;}else if(k==1){pHead = pHead->next;delete temp;}else if(k==length){for(int i=0; i<length-2; i++){temp = temp->next;}delete temp->next;temp->next = NULL;}else{for (int i=0; i<k-1; i++){temp = temp->next;}intnum = temp->contents;for(int i=k; i<length;i++){temp->contents = temp->next->contents;if(i != length-1){temp = temp->next;}else{delete temp->next;temp->next = NULL;break;}}}length--;}template <class Type> bool List<Type>::Find(int k, Type & intnum) const{if(k > length)return false;else{Node<Type> *temp = pHead ;for (int i=0; i<k-1; i++){temp = temp->next;}intnum = temp->contents;return true;}}template <class Type> int List<Type>::Search(const Type & intnum) const{Node<Type> *temp = pHead;for (int i=0; i<length; i++){if(temp->contents == intnum){return i+1;}if(i != length-1)temp = temp->next;}return 0;}template <class Type> void List<Type>::Modify(int k,const Type &intnum){Node<Type> *temp = pHead ;for (int i=0; i<k-1; i++){temp = temp->next;}temp->contents = intnum;}



0 0
原创粉丝点击