伊莉討論區

標題: (已解決)c++ 作業想不懂... [打印本頁]

作者: peterma    時間: 2018-6-23 02:50 AM     標題: (已解決)c++ 作業想不懂...

本帖最後由 peterma 於 2018-6-23 09:58 PM 編輯

#include <iostream>

using namespace std;


class Node

{public:

        intdata;

            Node*nextNode, *preNode;

        };


class Dlist

{   

public:

        Node *head,*tail, *now;

        Dlist(){head = tail = NULL;}

        voidinsert(int x);

        voidshow();

        voidremove(int y);

        voidreverseShow();

};


void Dlist::insert(int x)

{

   Node *newnode = newNode;

   newnode->data = x;

   newnode->nextNode =newnode->preNode=NULL;

   if (head ==NULL)

   {

       head = tail = newnode;

   }

   else

   {

          tail->nextNode = newnode ;

          newnode->preNode =tail;

          tail = newnode;

   }

}


//從頭印到尾

void Dlist::show()

{

}


//移除含y值節`點,若Y值不存在,則印出不存在

void Dlist::remove(int y)

{

};


//將串列之值,由最後元素倒著印回來

void Dlist::reverseShow()

{


};


void main()

{

    Dlist aa;

        aa.insert(10);

        aa.insert(11);

        aa.insert(12);

        aa.insert(13);

        aa.show();//應印出10, 11, 12, 13, 跳行

       aa.remove(10);

        aa.reverseShow();//應印出13, 12, 11跳行

        aa.remove(13);

        aa.show();//應印出11, 12, 跳行

        aa.insert(15);

        aa.reverseShow();//應印出15, 12, 11 跳行

        system("pause");

--------------------------------------------------------------------------------

newnode->nextNode =newnode->preNode=NULL;

   if (head ==NULL)

   {

       head = tail = newnode;

   }

   else

   {

          tail->nextNode = newnode ;

          newnode->preNode =tail;

          tail = newnode;

   }


這一段我看不懂....有大大能說明一下嗎?



作者: sggleeee    時間: 2018-6-23 08:57 PM

幫大大將詢問的那一段加上註解說明,供您參考....
希望有幫到您.....
  1. #include <iostream>
  2. #include <iomanip>

  3. using namespace std;

  4. class Node
  5. {
  6. public:
  7.         int data;
  8.         Node *nextNode, *preNode;
  9. };

  10. class List
  11. {
  12. public:
  13.         Node *head,*tail, *now;
  14.         List(){head = tail = NULL;}
  15.         void insert(int data);
  16.         void show();
  17.         void remove(int data);
  18.         void reverseShow();
  19. };

  20. void List::insert(int data)
  21. {
  22.    Node *newnode = new Node;  //建立 newnode

  23.    newnode->data = data;  //指定data 給newnode->data
  24.    newnode->nextNode = newnode->preNode = NULL;  //將newnode的nextNode與preNode指向NULL

  25.    //如果head為NULL,表示當前這個 newnode 將成為為List中第一個Node, 所以當前這個 newnode 既是頭也是尾
  26.    if (head ==NULL)  
  27.        head = tail = newnode;  //將head與tail指向這個newnode

  28.    //如果head不是NULL, 表示List中已有Node, 將List中最後一個node的nextNode指向 newnode,
  29.    //將 newnode 的preNode指向List中原本最後一個Node
  30.    else  
  31.    {
  32.       tail->nextNode = newnode;
  33.       newnode->preNode =tail;
  34.       tail = newnode; //因為newnode加入後成為最後一個node, 所以將tail指向newnode
  35.    }
  36. }

  37. void List::show()
  38. {
  39.         Node *n;
  40.        
  41.         for(n = head; n!=NULL; n=n->nextNode)
  42.         {
  43.            cout<<n->data<<setw(4);               
  44.         }
  45.         cout<<"\n";       
  46. }



  47. void List::reverseShow()
  48. {
  49.         Node *n;
  50.        
  51.         for(n=tail; n!=NULL; n=n->preNode)
  52.         {
  53.            cout<<n->data<<setw(4);               
  54.         }
  55.         cout<<"\n";       
  56. }

  57. void List::remove(int data)
  58. {
  59.         Node *n;

  60.         if (head==NULL)
  61.         {
  62.             cout<<"Can not remove data because the list is already empty !"<<endl;
  63.         }
  64.         else if(head==tail&&head->data==data)       
  65.         {
  66.                 n=head;
  67.                 head=tail=NULL;
  68.                 delete n;
  69.         }
  70.         else
  71.         {
  72.                 for(n = head; n!=NULL; n=n->nextNode)
  73.                 {   
  74.                         if(n->data==data)
  75.                         {          
  76.                                 if (n==head)
  77.                                 {
  78.                                         head=n->nextNode;
  79.                                         head->preNode=NULL;
  80.                                 }else if (n==tail)
  81.                                 {
  82.                                         tail=n->preNode;
  83.                                         tail->nextNode=NULL;
  84.                                 }else
  85.                                 {
  86.                                         n->preNode->nextNode = n->nextNode;
  87.                                         n->nextNode->preNode=n->preNode;
  88.                                 }
  89.                                 delete n;
  90.                                 break;
  91.                         }
  92.                 }       
  93.         }       
  94. }


  95. void main()
  96. {
  97.         List aa;

  98.         aa.insert(10);
  99.         aa.insert(11);
  100.         aa.insert(12);
  101.         aa.insert(13);
  102.         aa.show();
  103.         aa.remove(10);
  104.         aa.reverseShow();
  105.         aa.remove(13);
  106.         aa.show();
  107.         aa.insert(15);
  108.         aa.reverseShow();

  109.         system("Pause");
  110. }
複製代碼

作者: peterma    時間: 2018-6-23 09:57 PM

sggleeee 發表於 2018-6-23 08:57 PM
幫大大將詢問的那一段加上註解說明,供您參考....
希望有幫到您.....

原來是這樣!感謝您費工夫幫我註解!太感激了><
作者: jackyo04    時間: 2018-6-28 02:27 PM

其實你可以到MSDN找..
https://msdn.microsoft.com/zh-tw/
看英文的比較容易懂,中文的我是看不太懂就是了,很多東西很難用中文解釋..




歡迎光臨 伊莉討論區 (http://blog.eyny.com/) Powered by Discuz!