C++利用靜態(tài)成員或類模板構(gòu)建鏈表的方法講解
更新時(shí)間:2016年04月09日 12:05:17 作者:hzy3774
這篇文章主要介紹了C++利用靜態(tài)成員或類模板構(gòu)建鏈表的方法講解,鏈表是基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu),而在C++中構(gòu)件單鏈表還是稍顯復(fù)雜,需要的朋友可以參考下
直接上代碼了,說明看注釋就可以:
利用靜態(tài)成員構(gòu)建鏈表
#include <IOSTREAM.H> class Node { public: Node(int val, Node* next):val(val),next(next){} //~Node(){cout<<"del "<<val<<endl;} static void showAll();//打印全部節(jié)點(diǎn)的值 static void insertHead(int);//頭插 static void insertTail(int);//尾插 static void delHead();//刪頭 static void delTail();//刪尾 static void clear();//清空 protected: int val; Node *next; static Node *head; private: }; Node* Node::head = 0; void Node::showAll(){//打印全部節(jié)點(diǎn)的值 Node *p = head; while (p) { cout<<p->val<<" "; p = p->next; } cout<<endl; } void Node::insertHead(int val){//頭插 Node *p = new Node(val, head); head = p; } void Node::insertTail(int val){//尾插 Node *p = new Node(val, 0); if (!head) { head = p; return; } Node *q = head; while (q->next) { q = q->next; } q->next = p; } void Node::delHead(){//刪頭 Node *p = head; if (head) { head = head->next; delete p; } } void Node::delTail(){//刪尾 if (!head) { return; } if (!(head->next)) { delete(head); head = NULL; return; } Node *p = head; while (p->next->next) { p = p->next; } delete(p->next); p->next = NULL; } void Node::clear(){//清空 Node *p = head; Node *q = 0; head = 0; while (p) { q = p; p = p->next; delete q; } } void main(){ Node::delHead(); Node::delTail(); Node::insertTail(2); Node::delTail(); for (int i = 0; i < 10; i++) { Node::insertTail(i + 1); } Node::delTail(); Node::showAll(); }
利用類模板構(gòu)建鏈表
這有點(diǎn)類似于list<>:
#include <iostream> #include <string> using namespace std; template<class T> class Node//創(chuàng)建一個(gè)類模板,一個(gè)可以放入任何類型節(jié)點(diǎn)的鏈表 { public: Node(T val, Node* next):val(val),next(next){} static void showAll();//打印全部節(jié)點(diǎn)的值 static void insertHead(T);//頭插 static void insertTail(T);//尾插 static void delHead();//刪頭 static void delTail();//刪尾 static void clear();//清空 protected: T val; Node *next; static Node *head; private: }; template<class T> Node<T>* Node<T>::head = 0; template<class T> void Node<T>::showAll(){//打印全部節(jié)點(diǎn)的值 Node *p = head; while (p) { cout<<p->val<<" "; p = p->next; } cout<<endl; } template<class T> void Node<T>::insertHead(T val){//頭插 Node *p = new Node(val, head); head = p; } template<class T> void Node<T>::insertTail(T val){//尾插 Node *p = new Node(val, 0); if (!head) { head = p; return; } Node *q = head; while (q->next) { q = q->next; } q->next = p; } template<class T> void Node<T>::delHead(){//刪頭 Node *p = head; if (head) { head = head->next; delete p; } } template<class T> void Node<T>::delTail(){//刪尾 if (!head) { return; } if (!(head->next)) { delete(head); head = NULL; return; } Node *p = head; while (p->next->next) { p = p->next; } delete(p->next); p->next = NULL; } template<class T> void Node<T>::clear(){//清空 Node *p = head; Node *q = 0; head = 0; while (p) { q = p; p = p->next; delete q; } } class Student//創(chuàng)建一個(gè)自定義的學(xué)生類 { public: Student(string name, int age,char sex):name(name), age(age), sex(sex){} void showInfo(){ cout<<"姓名:"<<name<<" 年齡:"<<age<<" 性別:"<<sex<<endl; } protected: string name; int age; char sex; private: }; void Node<Student>::showAll(){//學(xué)生類節(jié)點(diǎn)和其他基本數(shù)據(jù)類型不同,不能直接用<<輸出,所以重載showAll() Node *p = head; while (p) { p->val.showInfo(); p = p->next; } } void main(){ for (int i = 1; i < 10; i++) { Node<int>::insertTail(i);//這時(shí)Node<int>稱為一個(gè)用類模板生成的模板類 Node<float>::insertTail(i / 10.0f); Node<double>::insertTail(i / 10.00); Node<Student>::insertTail(Student("stu", i, 'F')); } Node<int>::showAll(); Node<float>::showAll(); Node<double>::showAll(); Node<Student>::showAll(); }
相關(guān)文章
如何實(shí)現(xiàn)socket網(wǎng)絡(luò)編程的多線程
首先,學(xué)好計(jì)算機(jī)網(wǎng)絡(luò)知識(shí)真的很重要。雖然,學(xué)不好不會(huì)影響理解下面這個(gè)關(guān)于宏觀講解,但是,學(xué)好了可以自己打漁吃,學(xué)不好就只能知道眼前有魚吃卻打不到漁。在Java中網(wǎng)絡(luò)程序有2種協(xié)議:TCP和UDP,下面可以和小編一起學(xué)習(xí)下2019-05-05詳解C++調(diào)用Python腳本中的函數(shù)的實(shí)例代碼
這篇文章主要介紹了C++調(diào)用Python腳本中的函數(shù) ,需要的朋友可以參考下2018-11-11C++中棧結(jié)構(gòu)建立與操作詳細(xì)解析
我們可以把棧理解成一個(gè)大倉(cāng)庫(kù),放在倉(cāng)庫(kù)門口(棧頂)的貨物會(huì)優(yōu)先被取出,然后再取出里面的貨物。而從數(shù)據(jù)的邏輯結(jié)構(gòu)來看,棧結(jié)構(gòu)起始就是一種線性結(jié)構(gòu)2013-10-10詳解C++編程中多級(jí)派生時(shí)的構(gòu)造函數(shù)和訪問屬性
這篇文章主要介紹了詳解C++編程中多級(jí)派生時(shí)的構(gòu)造函數(shù)和訪問屬性,是C++入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-09-09