數(shù)據(jù)結(jié)構(gòu)之鏈表

//Linklist.h
  typedef struct Node{
      int data;    //數(shù)據(jù)域
      struct Node * next;  //指針域
  }ListNode , * Linklist;   //ListNode 結(jié)點(diǎn)類型,Linklist 指向結(jié)點(diǎn)的指針類型

/*Linklist h; 定義頭指針*/ /*ListNode *p; 定義指向某結(jié)點(diǎn)的指針,兩者類型相同*/


單鏈表
  • 1.初始化空表纯丸,建立頭結(jié)點(diǎn)
    Linklist initll(){
    Linklist h;
    h = (Linklist)malloc(sizeof(ListNode));
    if(h!=NULL)
    h->next = NULL;
    else
    printf("分配空間失斪蠖!\n");
    return h;
    }

  • 2.建立單鏈表
    int Inpll(Linklist h,int n){ //形參:頭指針遵馆,結(jié)點(diǎn)個(gè)數(shù)

          ListNode *p,*tail;
          int i;
    
          tail = h;
    
          for(i=0;i<n;i++)
          {
            p=(ListNode * )malloc(sizeof(ListNode));
            scanf("%d",&(p->data));   
            p->next = NULL;
    
            tail -> next = p;
            tail = p;    //tail 永遠(yuǎn)抓住最后一個(gè)結(jié)點(diǎn)
          }
    
          return 1;
      }
    
  • 3.往非遞減有序的單鏈表中插入一個(gè)結(jié)點(diǎn)后,鏈表仍有序
    void Insll(Linklist h,int x){
    ListNode p,q,*temp;

          q =(Linklist)malloc(sizeof(ListNode));  
          q->data=x;
      
          if(h->next==NULL)  //原鏈表為空
          {
              h->next=q;
              q->next=NULL;
              return;
          }
    
          for(p=h->next,temp=h;p!=NULL;temp=p,p=p->next)
          {   
              if(p->data>=x){         
                  q->next = p;  //q的指針域指向當(dāng)前結(jié)點(diǎn)
                  temp->next = q;  //前一個(gè)結(jié)點(diǎn)的指針域指向q
                  break;
              }
              else if(p->next==NULL)  //x比原鏈表中所有結(jié)點(diǎn)的值都大,需把q放在最后
              {  
              p->next=q;
                q->next=NULL;
                break;
              }
          }
          
      }
    
  • 4.遍歷單鏈表
    int trall(Linklist h){
    ListNode * p;

            if(h->next==NULL)  //空表不遍歷
              return 0;
    
            for(p=h->next;p!=NULL;p=p->next){
                printf("%d\t",p->data);
            }
            printf("\n");
            return 1;
      }
    

單循環(huán)鏈表
  ***  特點(diǎn):最后一個(gè)結(jié)點(diǎn)的指針域永遠(yuǎn)指向頭結(jié)點(diǎn) ***
  • 1.建立帶頭結(jié)點(diǎn)的單循環(huán)鏈表

      int ReInpll(Linklist h,int n){  
           ListNode *p,*tail;
           int i;
    
           /*h->next=NULL;       //不帶頭結(jié)點(diǎn)創(chuàng)建單循環(huán)鏈表
           scanf("%d",&(h->data));*/
          
           tail = h;   
           for(i=0;i<n;i++)
          {
            p=(ListNode * )malloc(sizeof(ListNode));
            scanf("%d",&(p->data));   
            p->next = NULL;
            tail -> next = p;
            tail = p;  //tail 永遠(yuǎn)抓住最后一個(gè)結(jié)點(diǎn)
          }
          p->next=h;  //最后一個(gè)結(jié)點(diǎn)的指針域指向頭指針
          return 1;
      }
    
  • 2.刪除單循環(huán)鏈表中所有值為x的元素
    void DelX_LL( Linklist h, int x){
    ListNode p,q;
    q=h;

          for(p=q->next;p!=h;p=q->next){  
              if(p->data==x){
              q->next=p->next;
              free(p);        //回收被刪除的結(jié)點(diǎn)      
              continue;  //不再執(zhí)行下面的語(yǔ)句
               }
              q=q->next;
          }       
      }
    
  • 3.遍歷單循環(huán)鏈表
    int traRell(Linklist h){

        ListNode * p;
    
        if(h->next == h)  //空表不遍歷
            return 0;
    
        for(p=h->next;p!=h;p=p->next){
            printf("%d\t",p->data);
        }
        printf("\n");
        return 1;
      }
    

單鏈表和單循環(huán)鏈表的區(qū)別

  • 1.** 尾結(jié)點(diǎn)的指針域 **
    單鏈表的尾結(jié)點(diǎn)的指針域指向NULL;
    單循環(huán)鏈表的尾結(jié)點(diǎn)的指針域指向頭結(jié)點(diǎn)古今。

  • 2.** 判斷鏈表為空的條件 **
    判斷單鏈表(帶頭結(jié)點(diǎn))是否為空,是判斷頭結(jié)點(diǎn)的指針域是否為空。

if(head->next==NULL)

 判斷單循環(huán)鏈表(帶頭結(jié)點(diǎn))是否為空,是判斷頭結(jié)點(diǎn)的指針域是否指向自身滔以。

if(h->next == head)

  • 3.** 循環(huán)的條件 **
    在算法中捉腥,
    單鏈表的循環(huán)條件是:

p != NULL; //p結(jié)點(diǎn)不為空

或者
> p->next != NULL; //p結(jié)點(diǎn)的指針域不為空

單循環(huán)鏈表的循環(huán)條件是:

p != head; //p結(jié)點(diǎn)不等于頭指針

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市你画,隨后出現(xiàn)的幾起案子抵碟,更是在濱河造成了極大的恐慌桃漾,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,718評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件立磁,死亡現(xiàn)場(chǎng)離奇詭異呈队,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)唱歧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門宪摧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人颅崩,你說(shuō)我怎么就攤上這事几于。” “怎么了沿后?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,207評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵沿彭,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我尖滚,道長(zhǎng)喉刘,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,755評(píng)論 1 284
  • 正文 為了忘掉前任漆弄,我火速辦了婚禮睦裳,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘撼唾。我一直安慰自己廉邑,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布倒谷。 她就那樣靜靜地躺著蛛蒙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪渤愁。 梳的紋絲不亂的頭發(fā)上牵祟,一...
    開(kāi)封第一講書(shū)人閱讀 50,050評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音抖格,去河邊找鬼诺苹。 笑死,一個(gè)胖子當(dāng)著我的面吹牛他挎,可吹牛的內(nèi)容都是我干的筝尾。 我是一名探鬼主播,決...
    沈念sama閱讀 39,136評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼办桨,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼筹淫!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,882評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤损姜,失蹤者是張志新(化名)和其女友劉穎饰剥,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體摧阅,經(jīng)...
    沈念sama閱讀 44,330評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡汰蓉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了棒卷。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片顾孽。...
    茶點(diǎn)故事閱讀 38,789評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖比规,靈堂內(nèi)的尸體忽然破棺而出若厚,到底是詐尸還是另有隱情,我是刑警寧澤蜒什,帶...
    沈念sama閱讀 34,477評(píng)論 4 333
  • 正文 年R本政府宣布测秸,位于F島的核電站,受9級(jí)特大地震影響灾常,放射性物質(zhì)發(fā)生泄漏霎冯。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評(píng)論 3 317
  • 文/蒙蒙 一钞瀑、第九天 我趴在偏房一處隱蔽的房頂上張望沈撞。 院中可真熱鬧,春花似錦仔戈、人聲如沸关串。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,864評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至吧碾,卻和暖如春凰盔,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背倦春。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,099評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工户敬, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人睁本。 一個(gè)月前我還...
    沈念sama閱讀 46,598評(píng)論 2 362
  • 正文 我出身青樓尿庐,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親呢堰。 傳聞我的和親對(duì)象是個(gè)殘疾皇子抄瑟,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容