簡體   English   中英

通報鏈表

[英]Circular LinkedList

我對循環鏈表沒有什么問題:我想在最后插入一個元素(整數)。 我的函數在最后添加了元素,但是我的鏈表並不是真正的循環(我有這種印象)。 這是.h,我使用的結構是:

struct liste_circulaire {
  int val;
  struct liste_circulaire *suivant; /* suivant = next element */
};

typedef struct liste_circulaire liste;

    int main(void) {
  liste *l, *deb;
  deb = (liste *)malloc(sizeof(liste));
  l = deb;
  l -> suivant = deb;  /* suivant = next element */
  ajouter_element(l,0);
  ajouter_element(l,1);
  ajouter_element(l,2);
  ajouter_element(l,3);
  affiche(l,l->suivant);
  printf("%d\n",l->suivant->suivant->suivant->suivant->suivant->val);
  return 0;
}
void ajouter_element(liste *l,int x) {  
  liste *deb = l;  /* with this line, I have a pointeur on the first element of my list */
    while(l->suivant != deb) {    
      l = l -> suivant;
    }
  l -> suivant = (liste *)malloc(sizeof(liste));
  l = l -> suivant;
  l -> val = x;  
  l -> suivant = deb;
}

void affiche(liste *l,liste *deb) {
  if(l == deb) {
    printf(" Fin\n");
    return;
  }
  printf(" %d -->",deb->val);
  affiche(l,deb->suivant);
}

在我的主體中,當我要求打印列表的第一個元素時,我有一個隨機數,但在我的示例中,列表的第一個值是0。所以,如果有人可以幫助我(我希望我很清楚,法國學生)謝謝!

由於以下原因,您的程序正在打印一個隨機數:

liste *l, *deb;
deb = (liste *)malloc(sizeof(liste));
l = deb;
l -> suivant = deb; 

列表中的第一個元素是您已正確分配但未提供任何數字的節點。 您應該嘗試添加:

l -> val = 0; 

並擺脫:

ajouter_element(l,0);

這應該可以解決您的問題。

您可以將預定義的頭文件list.h用於循環鏈表:

以下鏈接包含有關操作方法的示例

list.h包含與管理循環鏈表有關的所有功能,例如定義,在頭部添加,在尾部添加,刪除,foreach功能瀏覽循環鏈表...

請注意,您永遠不會設置第一個元素的值。 (河南只是在這里打敗我...)

當您調用ajouter_element()時,它不僅將新元素添加到列表的末尾,還將列表的開頭設置為新元素:

l = l -> suivant;

affiche()打印第二個元素,最后打印第一個元素。 第一個要打印的是deb->val ,而它主要是l->suivant->val


如果要讓affiche()打印第一項,請打印! :]

void affiche(liste *l,liste *deb) {
  if (deb == 0)
  {
    deb = l;
  }

  printf(" %d -->",l->val);

  if(l->suivant == deb) {
    printf(" Fin\n");
    return;
  }

  affiche(l->suivant,deb);
}

通過以下方式調用:

affiche(l,0);

要么

affiche(l,l);

他們都會做同樣的事情。 您也可以重載它以僅使用單個值。

我沒有運行過(甚至編譯過),但希望它已經相當接近了。

暫無
暫無

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

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