1、所謂建立動態鏈表是指在程序執行過程中從無到有的建立起一個鏈表,即一個一個的開辟節點和輸入各節點的數據,並建立起前后相連的關系。
例:寫一個程序建立一個含有學生(學號、成績)數據的單向動態鏈表。
約定:學號不會為0,若輸入學號為0,則表示建立鏈表的過程完成,該節點不應連接到鏈表中。
提示:若輸入的p1->num不等於0,則輸入的是第一個節點數據(n=1),令head=p1,,也就是使head指向新開辟的節點,p1所指向的節點就成為鏈表中的第一個節點。再開辟另一個節點並使p1指向它,接着輸入該節點的數據。若輸入的p1->num!=0,則應煉乳第二個節點(n=2),將新結點的地址賦給第一個節點的next成員。接着使p2=p1,也就是使p2指向剛建立的節點。
2、實現鏈表輸出
首先要知道鏈表第一個結點的地址,也就是要知道head的值。然后設一個指針變量p,先指向第一個節點,輸出p所指的節點,然后使p后移一個節點再輸出,直到鏈表的尾節點。
3、對鏈表的刪除操作
並非是真正的刪除,而是斷掉原來的鏈接關系即可。
為了刪除單向鏈表中的某個節點,首先要找到待刪節點的前趨節點,然后將此前趨節點的指針域去指向待刪節點的后續節點(q->next=p->next),最后釋放被刪節點所占存儲空間(free(p))即可。
4、對鏈表的插入操作
對鏈表的插入是指將一個節點插入到已有鏈表中。
我們可以用指針變量p0指向待插入的節點,p1指向第一個節點。將p0->num與p1->num相比較,若p0->num>p1->num,此時將p1后移,並使p1指向p1所指向的節點。
例:
#include "StdAfx.h" #include<stdio.h> #include<stdlib.h> insert_snode(SLIST (*head),int x,int y) { SLIST *s,*p,*q; s=(SLIST *)malloc(sizeof(SLIST)); s->data=y; q=head;p=head->next; while((p!='\0')&&(p->data!=x)) { q=p; p=p->next; } s->next=p; q->next=s; }
