本篇介紹令人眼花撩亂的 Linked List 程式碼

上面是把完整程式碼分段解說

最下面才是完整程式碼

l1.PNG

【圖 1 】 需要的元素

結構如下 (用類別來寫,當然你也可以把它變成struct)

class listNode{

     
      public:
             int data;
             class listNode *nextPtr;
      
};

 

l2.PNG

【圖 2 】 一般運作情況

 

l3.PNG

【圖 3 】 一開始的情況

所以一開始宣告

   listNode *startPtr=NULL;

 

l4.PNG

【圖 4 】 要插入新Node的時候,要先創建一個 newPtr

對應程式碼:
    listNode *newPtr;
    newPtr= new listNode; //給予newPtr指標所指的地方一個記憶體位置
    (*newPtr).data=get_data;

 

l5.PNG

【圖 5 】 如何把資料插在第一個位置

    (*newPtr).nextPtr=*sPtr;   
    *sPtr=newPtr;

 

get.PNG

【圖 6 】 如何刪除第一筆資料

    delete *sPtr;
    *sPtr=(*sPtr)->nextPtr;

next.PNG

 【圖 7 】 如何顯示整個串列

    while(currentPtr!=NULL){
        std::cout<<
currentPtr->data <<" -> "; /*顯示目前所在Node*/
        currentPtr = currentPtr->nextPtr;  /*走到下一個Node*/
     }


【完整程式碼】

執行內容:

輸入任意數字,插入在最前面

輸入77,刪除最前面一個,並離開程式

#include<iostream>

class listNode{
      
      public:
             int data;
             class listNode *nextPtr;
      
};


void insert(listNode **sPtr,int get_data){
    
    listNode *newPtr;
    newPtr= new listNode; //給予newPtr指標所指的地方一個記憶體位置

    (*newPtr).data=get_data;
    (*newPtr).nextPtr=*sPtr;    
    
    *sPtr=newPtr;

}

void del(listNode **sPtr){

    delete *sPtr;
    *sPtr=(*sPtr)->nextPtr;

}


void display(listNode *currentPtr){
     

     while(currentPtr!=NULL){
        std::cout<< currentPtr->data <<" -> "; /*顯示目前所在Node*/
        currentPtr = currentPtr->nextPtr;   /*走到下一個Node*/

     }
     printf("NULL");
     
}


int main(){
    
    listNode *startPtr=NULL;
    
    int num;
    
  do{  
    display(startPtr);
    std::cout<<std::endl;
    std::cin>>num;
    insert(&startPtr,num);
  }while(num!=77);
   
   del(&startPtr);
   del(&startPtr);
   display(startPtr);
    
    system("pause");

    return EXIT_SUCCESS;
}


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 finalfrank 的頭像
    finalfrank

    Frank's 資訊科技潮流站

    finalfrank 發表在 痞客邦 留言(1) 人氣()