数据结构c++实现代码-链表
/*节点Node的相关声明与定义*/ //Node.h #include<iostream> using namespace std; template<typename T> class Node { public: Node(); Node(T data); ~Node(); void setData(T data); T getData(); void setNext(Node<T>*next); Node* getNext(); void printData(); private: T *m_tpData; Node<T> *m_tpNext; }; template<typename T> Node<T>::Node() { m_tpData = new T; m_tpNext = NULL; } template<typename T> Node<T>::~Node() { delete m_tpData; m_tpNext = NULL; } template<typename T> void Node<T>::setData(T data) { *m_tpData = data; } template<typename T> T Node<T>::getData() { return *m_tpData; } template<typename T> void Node<T>::setNext(Node<T> *next) { m_tpNext = next; } template<typename T> Node<T>*Node<T>::getNext() { return m_tpNext; } template<typename T> void Node<T>::printData() { cout << *m_tpData << endl; }
/*链表中相关功能的函数的定义与实现*/ //LinkList.h #include<iostream> #include "Node.h" using namespace std; template<typename T> class LinkList { public: LinkList(); ~LinkList(); bool isListEmpty(); bool clearList(); int getListLength(); int getElemIndex(T &elem); bool getListElem(int index, T* elem); bool ListInsert(int index, T &elem); bool ListDelete(int index, T *elem); void ListPrint(void); private: Node<T> *m_pList; int m_iLength; }; template<typename T> LinkList<T>::LinkList() { m_pList = new Node<T>; m_pList->setData(NULL); m_pList->setNext(NULL); m_iLength = 0; } template<typename T> LinkList<T>::~LinkList() { Node<T>*nextNode = m_pList; while (nextNode->getNext() != NULL) { nextNode = m_pList->getNext(); delete m_pList; m_pList = nextNode; } delete m_pList;//delete last Node m_pList = NULL; } template<typename T> bool LinkList<T>::isListEmpty() { if (m_iLength == 0) { return true; } return false; } template<typename T> bool LinkList<T>::clearList() { if (isListEmpty()) { cout << "List empty clear fail" << endl; return false; } Node<T>*nowNode = m_pList->getNext(); Node<T>*nextNode = m_pList->getNext(); while (nextNode->getNext() != NULL) { nextNode = nowNode->getNext(); delete nowNode; nowNode = nextNode; } delete nowNode; m_iLength = 0; m_pList->setNext(NULL); return true; } template <typename T> int LinkList<T>::getListLength() { return m_iLength; } template <typename T> int LinkList<T>::getElemIndex(T &elem) { Node<T> *tempNode = m_pList; for (int i = 0; i < m_iLength; i++) { tempNode = tempNode->getNext(); if (elem == tempNode->getData()) { return i; } } return -1; } template<typename T> bool LinkList<T>::getListElem(int index, T *elem) { if (index < 0 || index >= m_iLength) { return false; } Node<T>*tempNode = m_pList; for (int i = 0; i <= index; i++) { tempNode = tempNode->getNext(); } *elem = tempNode->getData(); return true; } template<typename T> bool LinkList<T>::ListInsert(int index, T &elem) { if (index<0 || index>m_iLength) { return false; } Node<T>*tempPreNode = m_pList; for (int i = 0; i < index; i++) { tempPreNode = tempPreNode->getNext(); } Node<T>*newnode = new Node<T>; if (newnode == NULL) { cout << "new node create fail" << endl; return false; } Node<T>*tempNode = tempPreNode->getNext(); tempPreNode->setNext(newnode); newnode->setNext(tempNode); newnode->setData(elem); m_iLength++; return true; } template<typename T> bool LinkList<T>::ListDelete(int index, T *elem) { if (index < 0 || index >= m_iLength) { return false; } Node<T>* tempPreNode = m_pList; for (int i = 0; i < index; i++) { tempPreNode = tempPreNode->getNext(); } Node<T>*tempNode = tempPreNode->getNext(); tempPreNode->setNext(tempNode->getNext()); *elem = tempNode->getData(); delete tempNode; m_iLength--; return true; } template<typename T> void LinkList<T>::ListPrint(void) { if (isListEmpty()) { cout << "List empty" << endl; return; } Node<T>*tempNode = m_pList->getNext(); while (tempNode->getNext() != NULL) { tempNode->printData(); tempNode = tempNode->getNext(); } tempNode->printData(); cout << "end" << endl; }
//主程序main.cpp// #include<iostream> #include<string> #include"LinkList.h" using namespace std; int main(void) { /*insert data check */ int data[10] = { 0,1,2,3,4,5,6,7,8,9 }; LinkList<int>*linklist = new LinkList<int>; for (int i = 0; i < 5; i++) { linklist->ListInsert(i, data[i]); } linklist->ListPrint(); /*getElemIndex check*/ cout << "getElemIndex:" << linklist->getElemIndex(data[4]) << endl; /*getListElem check*/ int getdata; linklist->getListElem(2, &getdata); cout << "getListElem:" << getdata << endl; /*delete data check*/ int deletedata; linklist->ListDelete(0, &deletedata); cout << "delete data:" << deletedata << endl; linklist->ListPrint(); /*clearList check*/ linklist->clearList(); linklist->ListPrint(); delete linklist; linklist = NULL; system("pause"); return 0; }
结果图:
参考:https://www.cnblogs.com/HongYi-Liang/p/7172345.html?utm_source=itdadao&utm_medium=referral
2018-04-2215:46:49