熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> 數據結構 >> 正文

線性表 - 鏈式存儲結構- 單鏈表的運算(二)

2022-06-13   來源: 數據結構 

  () 尾插法建表

  ① 算法思路

  從一個空表開始重復讀入數據生成新結點將讀入數據存放在新結點的數據域中然後將新結點插入到當前鏈表的表尾上直到讀入結束標志為止

  

  具體方法【 參見動畫演示 】

  注意

  ⒈采用尾插法建表生成的鏈表中結點的次序和輸入順序一致

  ⒉必須增加一個尾指針r使其始終指向當前鏈表的尾結點

  ② 具體算法實現

  LinkList CreatListR(void)

  {//返回單鏈表的頭指針

  char ch;

  LinkList head;//頭指針

  ListNode *s*r; //工作指針

  head=NULL; //鏈表開始為空

  r=NULL;//尾指針初值為空

  ch=getchar(); //讀入第個字符

  while(ch!=\n){

  s=(ListNode *)malloc(sizeof(ListNode));//生成新結點

  s>data=ch; //將讀入的數據放入新結點的數據域中

  if (head!=NULL)

  head=s;//新結點插入空表

  else

  r>next=s;//將新結點插到*r之後

  r=s;//尾指針指向新表尾

  ch=getchar(); //讀入下一字符

  }//endwhile

  if (r!=NULL)

  r>next=NULL;//對於非空表將尾結點指針域置空head=s;

  return head;

  }

  注意

  ⒈開始結點插入的特殊處理

  由於開始結點的位置是存放在頭指針(指針變量)中而其余結點的位置是在其前趨結點的指針域中插入開始結點時要將頭指針指向

  開始結點

  ⒉空表和非空表的不同處理

  若讀入的第一個字符就是結束標志符則鏈表head是空表尾指針r亦為空結點*r不存在;否則鏈表head非空最後一個尾結點*r是終端結點應將其指針域置空


From:http://tw.wingwit.com/Article/program/sjjg/201311/23310.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.