C++實現連結串列中可被給定數字k整除的最大和最小元素


連結串列是一種線性資料結構,其中元素透過指標連結。連結串列的每個元素或節點都包含資料部分和連結,或者可以說指向序列中下一個元素的指標。這些元素可以在記憶體中佔據非連續的位置。

我們得到一個單鏈表,其中包含資料部分和指向下一個元素的連結。另一個輸入是一個數字K。任務是找到連結串列中可被數字K整除的最大和最小元素。單鏈表只能單向遍歷。在每個節點處,我們將檢查其資料部分是否能被K整除。如果該數字是迄今為止找到的最大值或最小值,我們將更新MaxD和MinD的值。

輸入

SList : 5-->2-->10-->12-->3-->20-->7, K=5

輸出

Maximum element which is divisible by K : 20
Maximum element which is divisible by K : 5

說明 − 從頭節點開始遍歷,不斷地將資料部分除以K,並檢查它是否完全可整除,即餘數為0。

在5, 10和20中,只有5, 10和20能被5整除,其中5最小,20最大。

輸入

SList : 12-->2-->5-->18-->3-->144-->7, K=4

輸出

Maximum element which is divisible by K : 144
Maximum element which is divisible by K : 12

說明 − 從頭節點開始遍歷,不斷地將資料部分除以K,並檢查它是否完全可整除,即餘數為0。

在12和144中,只有12和144能被4整除,其中12最小,144最大。

下面程式中使用的步驟如下

  • 建立一個連結串列節點。這裡我們建立了一個名為SLLnode的類,它具有資訊部分和下一個指標。

  • 建立一個連結串列。這裡我們建立了一個名為SLList的類,其成員是SLLnode物件。因此,SLList由SLLnode組成。

  • 函式addtohead(int)將節點新增到此列表。

  • 為了向SLList新增元素,我們使用名為LIST的SLList物件呼叫addtohead(int)。

  • 建立SLList後,我們呼叫函式Divisible(SLLnode,int),它接受列表的頭和整數K作為兩個輸入引數。

  • 現在在Divisible函式內部,我們使用兩個變數maxD和minD來儲存連結串列中可被給定數字K整除的最大和最小元素。

  • maxD初始化為-1,minD初始化為9999。這被認為是輸入所在的範圍。

  • 在for迴圈內,我們從頭開始遍歷連結串列。為此,變數start指向頭。

  • 將每個節點的資訊部分與maxD和minD以及它與K的可整除性進行比較。如果當前節點的資訊可整除且小於minD,則用當前資訊部分更新minD。

  • 如果當前節點的資訊可被K整除且大於maxD,則用當前資訊部分更新maxD。

  • 列印minD和maxD中獲得的結果。

示例

#include<iostream.h>
#include<process.h>
#include<conio.h>
class SLLnode{
   public:
   int info;
   SLLnode *next;
   SLLnode(int e1,SLLnode *ptr=0){
      info=e1;
      next=ptr;
   }
};
class SLList{
   public:
   SLLnode *head;
   SLList()
   { head=0; }
   void addtohead(int); };
   void SLList::addtohead(int el)
   { head=new SLLnode(el,head); }
   void Divisible(SLLnode* head, int K){
      int minD=9999;
      int maxD=-1;
      SLLnode* start=head;
      for(start;start->next!=NULL;start=start->next){
         if ((start->info < minD) && (start->info % K == 0))
            minD = start->info;
         if ((start->info > maxD) && (start->info % K == 0))
            maxD = start->info;
      }
      cout << "Max Element divisible by K: " << maxD << endl;
      cout << "Min Element divisible by K: " << minD;
}
// Driver Code
int main(){
   clrscr();
   // Start with empty list
   SLList LIST;
   LIST.addtohead(50);
   LIST.addtohead(21);
   LIST.addtohead(32);
   LIST.addtohead(45);
   LIST.addtohead(11);
   LIST.addtohead(23);
   LIST.addtohead(90);
   LIST.addtohead(56);
   int K = 5;
   Divisible(LIST.head, K);
   getch();
   return 0;
}

輸出

如果我們執行上面的程式碼,它將生成以下輸出:

Max Element divisible by K: 90
Min Element divisible by K: 45

更新於:2020年8月14日

瀏覽量:136

開啟您的職業生涯

完成課程後獲得認證

開始學習
廣告
© . All rights reserved.