日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
C++數(shù)據(jù)結(jié)構(gòu)之單鏈表

  線性表包含 數(shù)據(jù)域和指針域 其中,data存儲數(shù)據(jù)本身的值,next存儲后繼元素的地址 下面的圖表示的是一個數(shù)據(jù)節(jié)點(diǎn)

10年的杭州網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。成都營銷網(wǎng)站建設(shè)的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整杭州建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)公司從事“杭州網(wǎng)站設(shè)計”,“杭州網(wǎng)站推廣”以來,每個客戶項目都認(rèn)真落實執(zhí)行。

單鏈表的結(jié)構(gòu)示意圖(包括空的單鏈表):

單鏈表的節(jié)點(diǎn)類:

 
 
 
 
  1.  template  
  2.   classNode  
  3.   {  
  4.   public:  
  5.   T data;//數(shù)據(jù)  
  6.   Node *next;//next指針  
  7.   Node()  
  8.   {  
  9.   this->next=NULL;//構(gòu)造空的節(jié)點(diǎn)  
  10.   }  
  11.   Node(T data,Node *next=NULL)//構(gòu)造一個節(jié)點(diǎn)  
  12.   {  
  13.   this->data=data;  
  14.   this->next=next;  
  15.   }  
  16.   }; 

  單鏈表類聲明如下:

 
 
 
 
  1.   #include  
  2.   #include "Node.h"http://單鏈表節(jié)點(diǎn)類  
  3.   template  
  4.   classSinglyLinkedList //單鏈表類  
  5.   {  
  6.   public:  
  7.   Node *head;//單鏈表的頭指針。  
  8.   SinglyLinkedList();//構(gòu)造空的單鏈表。  
  9.   SinglyLinkedList(T value[], intn);//構(gòu)造由指定的數(shù)組提供的單鏈表  
  10.   ~SinglyLinkedList();//析構(gòu)  
  11.   boolisEmpty();//判斷是否為空。  
  12.   intlength();//獲取長度  
  13.   Node* getNode(inti);//返回第i(i>=0)個節(jié)點(diǎn)指針  
  14.   T get(inti);//返回第i個元素  
  15.   boolset(inti,T x);//設(shè)置第i個元素為x  
  16.   template friend std::ostream& operator<<(std::ostream& out,SinglyLinkedList &list);  
  17.   Node* insert(inti,T x);//插入第I個節(jié)點(diǎn)并返回第i個節(jié)點(diǎn)的指針  
  18.   boolremove(inti,T& old);//刪除第i個元素,將刪除的元素存放到old  
  19.   voidclear();//清空單鏈表  
  20.   voidconcat(SinglyLinkedList &list);//將List鏈接在當(dāng)前單鏈表之后  
  21.   }; 

  單鏈表部分如構(gòu)造空的鏈表對象,析構(gòu),判斷為空的實現(xiàn),沒有要講的算法,實現(xiàn)如下:

 
 
 
 
  1.   template  
  2.   SinglyLinkedList::SinglyLinkedList()//構(gòu)造空的單鏈表  
  3.   {  
  4.   this->head=NULL;  
  5.  }  
  6.   template  
  7.   SinglyLinkedList::~SinglyLinkedList()//析構(gòu)  
  8.   {  
  9.   clear();  
  10.   }  
  11.   template  
  12.   boolSinglyLinkedList::isEmpty()//判斷鏈表是否為空  
  13.   {  
  14.   returnthis->head==NULL;  
  15.   } 

  單鏈表的遍歷操作,遍歷單鏈表是指從第一個節(jié)點(diǎn)開始訪問,沿著節(jié)點(diǎn)的Next可依次訪問單鏈表中的各個節(jié)點(diǎn),并且各個節(jié)點(diǎn)只被訪問一次。實現(xiàn)的單鏈表遍歷的基本算法如下:

 
 
 
 
  1.   intj=0;  
  2.   Node *p=head;  
  3.   while(p!=NULL&&j
  4.   {  
  5.   j++;  
  6.   p=p->next;  
  7.   } 

  單鏈表的length(),get(),set(),clear()和輸出等操作都基于以上算法。

 
 
 
 
  1.   template  
  2.   intSinglyLinkedList::length()  
  3.   {  
  4.  inti=0;  
  5.   Node *p=head;//創(chuàng)建一個用于遍的變量  
  6.   while(p!=NULL)  
  7.   {  
  8.   i++;  
  9.   std::cout<data;  
  10.   p=p->next;  
  11.   }  
  12.  returni;  
  13.   }  
  14.   template  
  15.   Node* SinglyLinkedList::getNode(inti)  
  16.   {  
  17.   if(i<0)  
  18.   returnNULL;  
  19.   intj=0;  
  20.   Node *p=head;  
  21.   while(p!=NULL&&j
  22.   {  
  23.   j++;  
  24.   p=p->next;  
  25.   }  
  26.   returnp;  
  27.   }  
  28.   template  
  29.   T SinglyLinkedList::get(inti)  
  30.   {  
  31.   Node *p=getNode(i);  
  32.   if(p!=NULL)  
  33.   returnp->data;  
  34.   T d;  
  35.   returnd;  
  36.   //throw "單鏈表為空或者參數(shù)指定的元素不存在";  
  37.   }  
  38.   template  
  39.   boolSinglyLinkedList::set(inti,T x)  
  40.   {  
  41.   Node *p=getNode(i);  
  42.   if(p!=NULL)  
  43.   {  
  44.   p->data=x;  
  45.   returntrue;  
  46.   }  
  47.   returnfalse;  
  48.   }  
  49.   template  
  50.   std::ostream& operator<<(std::ostream& out,SinglyLinkedList &list)  
  51.   {  
  52.   Node *p=list.head;  
  53.   out<<"(";  
  54.   while(p!=NULL)  
  55.   {  
  56.   out<data;  
  57.   p=p->next;  
  58.   if(p!=NULL)  
  59.   out<<",";  
  60.   }  
  61.   out<<") ";  
  62.   returnout;  
  63.   }  
  64.   template  
  65.   voidSinglyLinkedList::clear()  
  66.   {  
  67.   Node *p=head;  
  68.   while(p!=NULL)  
  69.   {  
  70.   Node *q=p;  
  71.   p=p->next;  
  72.   delete q;  
  73.   }  
  74.   head=NULL;  
  75.  } 

   單鏈表的插入操作,單鏈表不像順序表,對與表的插入和刪除很簡單:

  空表插入/頭插入

 
 
 
 
  1.   Node *q=NULL;  
  2.   if(head==NULL||i<0)//頭插入(單鏈表為空或者)  
  3.   {  
  4.   q=newNode(x,head);  
  5.   head=q;  
  6.   }  
  7.   中間插入/尾插入  
  8.   p->next=newNode(x,p->next);  
  9.   單鏈表insert()以及參數(shù)構(gòu)造函數(shù):  
  10.  template  
  11.   Node* SinglyLinkedList::insert(inti,T x)  
  12.   {  
  13.   Node *q=NULL;  
  14.   if(head==NULL||i<0)//頭插入(單鏈表為空或者)  
  15.   {  
  16.   q=newNode(x,head);  
  17.   head=q;  
  18.   }  
  19.   else 
  20.   {  
  21.   intj=0;  
  22.   Node *p=head;  
  23.   while(p->next!=NULL&&j
  24.   {  
  25.   j++;  
  26.   p=p->next;  
  27.   }  
  28.   q=newNode(x,p->next);  
  29.  p->next=q;  
  30.   }  
  31.   returnq;  
  32.   }  
  33.  template  
  34.   SinglyLinkedList::SinglyLinkedList(T table[],intn)  
  35.   {  
  36.   head=NULL;  
  37.   if(n>0)  
  38.   {  
  39.   head=newNode(table[0]);//創(chuàng)建節(jié)點(diǎn)  
  40.  Node *rear=head;//創(chuàng)建一個指向頭節(jié)點(diǎn)的指針  
  41.   inti=1;  
  42.  while(i
  43.   {  
  44.   rear->next=newNode(table[i++]);  
  45.   rear=rear->next;  
  46.   }  
  47.   }  
  48.   } 

  單鏈表的刪除操作也分兩類:

  頭刪除

 
 
 
 
  1.   Node *q=head;  
  2.   head=head->next;  
  3.   delete q; 

  中間/尾刪除

 
 
 
 
  1.   Node *q=p->next;  
  2.   if(q!=NULL)//判斷刪除節(jié)點(diǎn)  
  3.   {  
  4.   p->next=q->next;//讓刪除節(jié)點(diǎn)的前驅(qū)Next指針下一節(jié)點(diǎn)  
  5.   delete q;//刪除該節(jié)點(diǎn)  
  6.   } 

   單鏈表的刪除函數(shù)remove()實現(xiàn):

 
 
 
 
  1.   template  
  2.   boolSinglyLinkedList::remove(inti,T &old)  
  3.   {  
  4.   if(i<0||head==NULL)  
  5.   {  
  6.   Node *q=head;  
  7.   old=q->data;  
  8.   head=head->next;  
  9.   delete q;  
  10.  }  
  11.   else 
  12.   {  
  13.   Node *p=getNode(i-1);//獲取刪除節(jié)點(diǎn)的前驅(qū)  
  14.  if(p!=NULL&&p->next!=NULL)//判斷刪除節(jié)點(diǎn)和刪除節(jié)點(diǎn)是否為空  
  15.   {  
  16.   Node *q=p->next;//新建一個節(jié)點(diǎn)指針,將刪除接點(diǎn)復(fù)制過去  
  17.   old=q->data;  
  18.   p->next=q->next;//讓刪除節(jié)點(diǎn)的前驅(qū)Next指針下一節(jié)點(diǎn)  
  19.   delete q;//刪除該節(jié)點(diǎn)  
  20.  returntrue;  
  21.   }  
  22.  }  
  23.   returnfalse;  
  24.   }  
  25.   單鏈表的鏈接函數(shù):concat()  
  26.   template  
  27.   voidSinglyLinkedList::concat(SinglyLinkedList &list)  
  28.   {  
  29.   if(this->head==NULL)  
  30.   {  
  31.   this->head=list->head;  
  32.   }  
  33.   else 
  34.   {  
  35.   Node *p=head;  
  36.   while(p->next!=NULL)  
  37.   {  
  38.   p=p->next;  
  39.   }  
  40.   p=list->head;  
  41.   }  
  42.   list->head=NULL;//設(shè)置單鏈表為空,否則運(yùn)行出錯  
  43.   } 

   以上對C++單鏈表的分析 添加一個學(xué)生結(jié)構(gòu)和一個測試函數(shù):

 
 
 
 
  1.   Student.h  
  2.   structStudent  
  3.   {  
  4.   charnumber[10]; //學(xué)號  
  5.   charname[20]; //姓名  
  6.   doublescore; //得分  
  7.   friend std::ostream& operator<<(std::ostream& out,Student &stu)  
  8.   {  
  9.   out<<"學(xué)號:"<
  10.   returnout;  
  11.   }  
  12.   };  
  13.   主函數(shù):  
  14.   #include  
  15.   #include "SinglyLinkedList.h" 
  16.   #include "Student.h" 
  17.   void_TestToSinglyLinkedList()  
  18.   {  
  19.   Student data[]={{"090313018","Silvester",45.4},{"090313018","捐贈",45.4},{"090313018","版主",45.6}};  
  20.   SinglyLinkedList m(data,3);  
  21.   Student t;  
  22.   std::cout<<(m.isEmpty()?"不為空!":"該鏈表為空!")<
  23.   std::cout<<"長度:"<
  24.   std::cout<<"移除2個學(xué)生"<
  25.   std::cout<<"t:"<
  26.   std::cout<<"2個學(xué)生信息"<
  27.   Student s={"415646","fdsfs",453.1};  
  28.   std::cout<
  29.   }  
  30.   voidmain()  
  31.  {  
  32.   _TestToSinglyLinkedList();  
  33.   system("pause");  
  34.   } 

  提供源代碼下載地址:http://39327.42la.com.cn/DataFile/Code/C++/SinglyLinkedList.zip

原文地址:http://www.cnblogs.com/Arrays/archive/2012/02/01/2335164.html


網(wǎng)站標(biāo)題:C++數(shù)據(jù)結(jié)構(gòu)之單鏈表
當(dāng)前URL:http://www.5511xx.com/article/dhioooi.html