鍊錶和陣列兩者的區別: 陣列是一塊連續的儲存空間,長度固定。鍊錶的儲存空間是可以不連續的,並且其長度不固定(動態),每個結點需保留鄰結點指標;資料查詢方面,陣列只需根據其序號就能直接找到,而鍊錶需要順序檢索查詢,效率是較低的;對於資料插入或刪除問題,鍊錶是更方便的,而陣列則需要進行較大的資料移動操作。
鍊錶擁有基本的就是結點,現定義如下結點結構:
typedef struct node
node,*pnode;
結點中包含結點資料和指向下一結點的指標。
(1)建立乙個單鏈表並輸出
這裡面涉及較多的就是malloc函式,為結點申請記憶體。注意和c++中的new()進行區別。
//建立乙個單鏈表
pnode createlist(type *val,int n)
head->data=-1;
head->next=null;
pnode p=head;
for(i=0;idata=val[i];
newnode->next=null;
p->next=newnode;
p=newnode;
}return head;
}//列印單鏈表
void printlist(pnode head)
temp=head->next;
while(temp!=null)
printf("\n");
}
例子:建立 type a[6]=; 則結果為
在列印函式中,寫成如下形式if(null==head),是為了防止出錯。如果寫為(head=null),編譯器編譯時將不會報錯,執行會出錯;反過來寫為(null=head),會報錯。
(2)逆轉
//反轉鍊錶
pnode reverse(pnode head)
head->next=pre;
return head;
}
執行結果:
(3)查詢鍊錶中間結點
思想是應用快慢指標的思想,都從頭結點出發,快指標一次移動2步,慢指標一次移動一步,當快指標移動至鍊錶尾部時,慢指標剛好到達鍊錶中間。
//尋找單鏈表中間借點 快慢指標
pnode findmiddle(pnode head)
fast=slow=head;
while(null!=fast->next)
return slow;
}
結果: 逆轉單鏈表
逆轉單鏈表 struct node reverse llist node head 此時temp表示以前的尾結點,p表示temp結點的前一結點 head temp 逆轉尾結點為頭結點 head next p 頭結點指標域指向p return head 逆轉迴圈鍊錶 struct node rever...
單鏈表逆轉
單鏈表逆轉 單鏈表逆轉,將單鏈表中各結點的next域改為指向其前驅結點。原先第乙個結點的next域為空,head改為指向原先的最後乙個結點。逆轉剛才如下圖所示 鍊錶類singlylist public class singlylist 構造單鏈表,由values陣列提供元素 public singl...
單鏈表逆轉
資料結構與演算法題目集 中文 list reverse list l 其中list結構定義如下 typedef struct node ptrtonode struct node typedef ptrtonode list 定義單鏈表型別 l是給定單鏈表,函式reverse要返回被逆轉後的鍊錶。i...