//*************************** //节点类的创建 //*************************** #ifndef NODE_H_ #define NODE_H_ #include <iostream> #include <cstdlib> template<typename T> class LinkList; template<typename T> class Node { public: friend class LinkList<T>; public: T value; Node<T>* next; public: //Node(NULL):next(NULL){NULL;}; Node(){next=NULL;} Node(const T& T1){value=T1,next=NULL;}; T& GetValue(void){return value;} Node<T>* GetNext(){return next;} }; #endif //************************ //链表类的创建 //*********************** #include <iostream> #include "Node.h" using namespace std; template <typename T> class LinkList { private: Node<T>* p_Head; public: LinkList(void); ~LinkList(void); void clear(void); T& visit(size_t pos); void Insert(const size_t pos,const T& value); void add(const T& value); size_t getLengh(void) const; void remove(const size_t pos); size_t search(const T& value0) const; }; // // 构造函数--新建一个节点 // template <typename T> LinkList<T>::LinkList(void) { p_Head=new Node<T>(); } // // 析构函数 // template <typename T> LinkList<T>::~LinkList(void) { clear(); delete p_Head; } // // 链表清零 // template <typename T> void LinkList<T>::clear() { Node<T>* saveNode=NULL; while(NULL!=p_Head->next) { saveNode=p_Head; //cout<<saveNode->value<<endl; p_Head=p_Head->next; delete[] saveNode; } } // // 访问某一节点的值 // template <typename T> T& LinkList<T>::visit(size_t pos) { Node<T>* prev=p_Head; for(int i=0;i<pos+1&&prev!=NULL;i++) { prev=prev->next; } return prev->value; } // // 在指定位置插入节点 // template <typename T> void LinkList<T>::Insert(const size_t pos, const T &value) { Node<T>* prev=p_Head; Node<T>* newlist=new Node<T>(value); cout<<newlist->value<<endl; for(int j=0;j<pos&&prev->next!=NULL;j++) { prev=prev->next; } newlist->next=prev->next; prev->next=newlist; } // // 在链表头结点后插入值 // template <typename T> void LinkList<T>::add(const T &value) { Node<T>* prev=p_Head; while(prev->next!=NULL) //依次插入数据 { prev=prev->next; } Node<T>* newlist=new Node<T>(value); newlist->next=prev->next; prev->next=newlist; } // // 获得链表长度 // template <typename T> size_t LinkList<T>::getLengh() const { int i=0; Node<T>* prev=p_Head; while(prev->next!=NULL) { prev=prev->next; i++; } return i; } // // 删除某节点 // template <typename T> void LinkList<T>::remove(const size_t pos) { Node<T>* prev=p_Head; for(int i=0;i<pos&&NULL!=prev->next;i++) { prev=prev->next; } Node<T>* savelist=prev->next; cout<<"nihao"; prev->next=savelist->next; delete savelist; } // // 删除某节点 // template <typename T> size_t LinkList<T>::search(const T &value0) const { Node<T>* prev=p_Head; int i=0; while(prev->value!=value0) { prev=prev->next; i++; } return i; } //************************ //测试函数 //************************ #include "LinkList.h" #include <iostream> using namespace std; void main() { //cout<<"nihao"<<endl; int num=10; LinkList<int> link; link.add(1); link.add(2); link.add(3); link.add(5); link.add(100); //for(int i=1;i<num;i++) //{ // link.Insert(i,i+100); //} link.remove(2); cout<<link.getLengh()<<endl; cout<<link.visit(1)<<endl; cout<<link.search(100)<<endl; link.clear(); cout<<link.getLengh()<<endl; }
数据结构之单项链表
最新推荐文章于 2024-06-11 10:00:00 发布