資料結構,資料結構與演算法

來源:互聯網
上載者:User

資料結構,資料結構與演算法
迴圈鏈表

    迴圈鏈表(Circular Linked List):是一種頭尾相接的鏈表。其特點是最後一個結點的指標域指向鏈表的頭結點,整個鏈表的指標域連結成一個環。    從迴圈鏈表的任意一個結點出發都可以找到鏈表中的其它結點,使得表處理更加方便靈活。

迴圈鏈表的操作
對於單迴圈鏈表,除鏈表的合并外,其它的操作和單線性鏈表基本上一致,僅僅需要在單線性鏈表操作演算法基礎上作以下簡單修改:
⑴ 判斷是否是空鏈表:head->next==head ;
⑵ 判斷是否是表尾結點:p->next==head ;

雙向鏈表
   雙向鏈表(Double Linked List) :指的是構成鏈表的每個結點中設立兩個指標域:

一個指向其直接前趨的指標域prior,
一個指向其直接後繼的指標域next。
這樣形成的鏈表中有兩個方向不同的鏈,故稱為雙向鏈表。
和單鏈表類似,雙向鏈表一般增加頭指標也能使雙鏈表上的某些運算變得方便。
將頭結點和尾結點連結起來也能構成迴圈鏈表,並稱之為雙向迴圈鏈表。
雙向鏈表是為了克服單鏈表的單向性的缺陷而引入的
雙向鏈表結構具有對稱性,設p指向雙向鏈表中的某一結點,則其對稱性可用下式描述:
(p->prior)->next = p = (p->next)->prior ;

    結點p的儲存位置存放在其直接前趨結點p->prior的直接後繼指標域中,同時也存放在其直接後繼結點p->next的直接前趨指標域中。
①  若插入時僅僅標記出直接前驅結點,鉤鏈時必須注意先後次序是: “先右後左” 。部分語句組如下:s =(DulNode *)malloc(sizeof(DulNode)); s ->data=e;s ->next=p->next;   p->next->prior=s;p->next= s; s ->prior=p;    /*  鉤鏈次序非常重要  */②   插入時同時指出直接前驅結點p和直接後繼結點q,鉤鏈時無須注意先後次序。部分語句組如下:s=(DulNode *)malloc(sizeof(DulNode));s ->data=e;p->next= s;           s ->next=q;s ->prior=p;         q->prior= s; 

雙向鏈表的結點刪除
設要刪除的結點為p ,刪除時可以不引入新的輔助指標變數,可以直接先斷鏈,再釋放結點。部分語句組如下:

p->prior->next=p->next;p->next->prior=p->prior;free(p);

注意:
與單鏈表的插入和刪除操作不同的是,在雙向鏈表中插入和刪除必須同時修改兩個方向上的指標域的指向

對兩個多項式鏈表進行相加,產生一個新的鏈表存放相加後的結果,原來兩個多項式鏈表依然存在,不發生任何改變,如果要再對原來兩個多項式進行其它操作也不影響。

演算法描述Ploy  *add_ploy(ploy  *La, ploy  *Lb)   /*  將以La ,Lb為頭指標表示的一元多項式相加,產生一個新的結果多項式  */{   ploy  *Lc , *pc , *pa , *pb , *p ;   float  x ;Lc=pc=(ploy *)malloc(sizeof(ploy)) ; pa=La->next ; pb=Lb->next ;while (pa!=NULL&&pb!=NULL){  if  (pa->expn<pb->expn)   {  p=(ploy *)malloc(sizeof(ploy)) ;       p->coef=pa->coef ; p->expn=pa->expn ;       p->next=NULL ; /*  產生一個新的結果結點並賦值  */       pc->next=p ; pc=p ; pa=pa->next ;    }       /*  產生的結點插入到結果鏈表的最後,pa指向下一個結點  */    if  (pa->expn>pb->expn)   {  p=(ploy *)malloc(sizeof(ploy)) ;       p->coef=pb->coef ; p->expn=pb->expn ;       p->next=NULL ;  /*  產生一個新的結果結點並賦值  */        pc->next=p ; pc=p ; pb=pb->next ;         }     /*  產生的結點插入到結果鏈表的最後,pb指向下一個結點  */if  (pa->expn==pb->expn)     {  x=pa->coef+pb->coef ;        if  (abs(x)<=1.0e-6)  /*  係數和為0*/            {  pa=pa->next ; pb=pb->next ;   } /*pa, pb分別直接後繼結點  */        else    /*  係數和不為0,產生的結點插入到結果鏈表的最後, pa, pb分別直接後繼結點  */             {  p=(ploy *)malloc(sizeof(ploy)) ;                 p->coef=x ; p->expn=pb->expn ;                 p->next=NULL ;  /*  產生一個新的結果結點並賦值  */                 pc->next=p ; pc=p ;                  pa=pa->next ; pb=pb->next ;                }     }   }     /* end of while */ 
if  (pb!=NULL)  while(pb!=NULL){   p=(ploy *)malloc(sizeof(ploy)) ;     p->coef=pb->coef ; p->expn=pb->expn ;     p->next=NULL ;       /*  產生一個新的結果結點並賦值  */        pc->next=p ; pc=p ; pb=pb->next ;} if  (pa!=NULL)  while(pa!=NULL){   p=(ploy *)malloc(sizeof(ploy)) ;     p->coef=pb->coef ; p->expn=pa->expn ;     p->next=NULL ;      /*  產生一個新的結果結點並賦值  */        pc->next=p ; pc=p ; pa=pa->next ;} return (Lc) ;  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.