上一篇隨筆談了談單鏈表是什麼東西,然後進行了初始化,這篇隨筆就開始對其進行操作了,首先是增,刪,改,查的增。 增,顧名思義就是要增加新的元素,單鏈表是鏈式的,那就要考慮怎麼去加新元素,有三種,從頭部添加,從尾部添加,從中間添加。先說說從尾部添加,這個比較好理解,直接在尾部放一個結點然後連起來就好了。 ...
上一篇隨筆談了談單鏈表是什麼東西,然後進行了初始化,這篇隨筆就開始對其進行操作了,首先是增,刪,改,查的增。
增,顧名思義就是要增加新的元素,單鏈表是鏈式的,那就要考慮怎麼去加新元素,有三種,從頭部添加,從尾部添加,從中間添加。先說說從尾部添加,這個比較好理解,直接在尾部放一個結點然後連起來就好了。
1、尾插法,從尾部添加節點。
步驟順其自然就來了:
①要想添加節點就先新建一個節點,即將成為鏈表的尾結點。
②找到尾部,也就是當前鏈表最後一個結點,最後一個節點與別的節點的區別就是它的next是NULL。
③把新建的結點加入到最後一個節點當中,具體操作就是把當前最後一個結點的next指向新建的結點就OK了。=^•ω•^=
void AddLetter_Tail(LinkList header, char letter_) { LinkList p,q = NULL; // Creaat New node q = (LinkList)malloc(sizeof(LNode)); q->letter = letter_; q->next = NULL; //Search tail p = header; while(p->next != NULL) { p = p->next; } // add node p->next = q; }
2、頭插法,在頭結點後面插入新元素,我們不能把頭結點抹去,也不能在頭結點前面插入,因為我們鏈表的第一個節點是頭結點。
步驟又自然而然的出來了:
①老規矩,先新建結點。
②找到頭部,也就是上一篇隨筆里第一次新建的結點,名字叫head。
③改變指針指向,新建結點的next指向首元結點(由原鏈表head的next得到),然後頭結點(也就是head)的next指向新建的結點。
註:第③步順序可以改變,可以頭結點先指向新建結點,新建結點next再指向首元結點,只不過程式上略有不同,需要保存好首元結點的地址也就是原鏈表head的next,要不然新建結點就找不到指向首元結點的入口了。
void AddLetter_Head(LinkList header,char letter_) { LinkList q,p = NULL; // Creaat New node q = (LinkList)malloc(sizeof(LNode)); q->letter = letter_; q->next = NULL; //add node p = header; q->next = p->next; p->next = q; }
這樣就算把頭插法和尾插法弄明白了,當添加完元素之後可以先遍歷鏈表看看。
void PrintList(LinkList header) { LinkList p = header->next; while(p != NULL) { printf("%c ",p->letter); p = p->next; } printf("\n"); }
Main函數代碼如下:
int main() { printf("This is Struct_Data:\n\n"); LinkList head = Init_linklist(); AddLetter_Tail(head,'H'); AddLetter_Tail(head,'i'); AddLetter_Tail(head,','); AddLetter_Tail(head,'L'); AddLetter_Tail(head,'i'); AddLetter_Tail(head,'n'); AddLetter_Tail(head,'u'); AddLetter_Tail(head,'x'); AddLetter_Tail(head,'.'); PrintList(head); AddLetter_Head(head,'/'); AddLetter_Head(head,'U'); AddLetter_Head(head,'b'); AddLetter_Head(head,'u'); AddLetter_Head(head,'n'); AddLetter_Head(head,'t'); AddLetter_Head(head,'u'); AddLetter_Head(head,'.'); PrintList(head); return 0; }
效果如圖:
下一篇將談一談中間插入元素,和刪除操作。
總結: ①在學習新東西的時候一定要想清楚自己在乾什麼,要有主見的去學習新事物。
②可以畫圖,寫寫字兒,理清自己的思路。
③程式不是只能這麼寫,只要符合邏輯怎麼寫都行,當時就是太死板,總想著去記住程式。