簡體   English   中英

排序名稱的鏈接列表C ++

[英]Linked List of sorted names C++

我必須創建一個鏈接列表時遇到問題。 該程序應接受用戶輸入的名稱,然后將其放入鏈接列表中。 該列表應按字母順序排序,因此,當添加新節點時,其位置應正確。

我的代碼現在看起來像這樣:

struct node
{
  string info;
  node *next;
};

class Passenger
{
 private:
  node* pname;
 public:
  void insert(string);
  Passenger();
};//closes Passenger class 

Passenger::Passenger()
{
  pname = new node;
  pname -> info = "ABC";
  pname -> next = NULL;
}

void Passenger::insert(string name)
{
  node *temp, *p, *s;
  p = pname;
  s = pname;
  temp = new node;
  temp->info = name;
  if(p-> info == "ABC")  //new pname linked list, put temp at the front                                                                         
    {
      p->info = name;
      p->next = NULL;
    }

  //if there is already one in the list                                                                                                         
  while(s != NULL)
    {
      cout<<"inside while loop"<<endl;

      //if new node goes to left                                                                                                                
      if(temp->info < s->info)
        {
          temp->next = p;
          pname = temp;
        }//closes if              
      if(temp->info > s->info)
        {
          if(p->next != NULL)
            {
              s = s->next;
              if(s->next == NULL)
                s->next = temp;
            }//closes if                                                                                                                        
        }//closes if                                                                                                                            
      p = p->next;
      s = s->next;
    }//closes while     

我真的不知道如何更改它的工作原理。 當列表中有一個節點時,我就完成了,然后添加了第二個。 但是如果已經有2個節點,我不知道如何在其中排序第三個或第四個節點。

戴夫

用包含“ ABC”的標記節點表示一個空列表的BTW是荒謬的。 如果有人要存儲以該名稱開頭的列表怎么辦? 使用NULL指針表示空列表是一種幾乎通用的約定。

同樣,節點不必是其他類型。 列表類本身可以是一個節點。 因此,該類的實例只是第一個節點的實例,帶有指向列表其余部分的指針。 或者,為了更好地處理空列表,您可以有一個容器類,該類保留指向頭的指針(並可以選擇指向尾的指針,以便快速插入尾部)。 如果需要,實現幫助器函數可以是節點的成員函數,而不是容器類,因此可以在任何子列表中調用它們。


當我學習鏈接列表時,我經常發現它有助於在紙上繪制節點的圓圈和指針的箭頭,就像在數據結構教科書中一樣。 這樣一來,您在思考整個過程和任何特殊情況(列表的開頭或結尾)時就不必花太多時間在腦海中。


您可以將問題分為兩部分:搜索和插入。

您的搜索功能應返回一個指向插入位置之前的節點的指針。 也就是說,最后一個節點的字符串比您要插入的字符串少。 你在功能回路則需要要么展望下一個元素,或保持prev指針。 無論哪種方式,您都需要返回到停止循環的節點之前的節點。

在節點之后插入非常容易。 在特殊情況下,您需要插入列表的新標題,因為沒有節點可以修改以指向新的當前列表。 但是,您不必擔心要插入的節點是否在列表的末尾。

您可以通過使用指向實際第一個元素的“虛擬”節點來減少特殊情況的數量。 與InsertNth相比,此技巧可能不適用於基於比較的插入。 對這個問題的回答將事情分解為查找和插入操作,並且即使它是Java代碼審查問題,也以類似C的風格編寫。 請參見InsertAfterInsertBefore方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM