| struct node { int data; struct node *next; }; |
其中next是指向自身所在結(jié)構(gòu)類型的指針,這樣就可以把一個個結(jié)點相連,構(gòu)成鏈表。
鏈表結(jié)構(gòu)的一大優(yōu)勢就是動態(tài)分配存儲,不會像數(shù)組一樣必須在定義時確定大小,造成不必要的浪費。用malloc和free函數(shù)即可實現(xiàn)開辟和釋放存儲單元。其中,malloc的參數(shù)多用sizeof運算符計算得到。
鏈表的基本操作有:正、反向建立鏈表;輸出鏈表;刪除鏈表中結(jié)點;在鏈表中插入結(jié)點等等,都是要熟練掌握的,初學者通過畫圖的方式能比較形象地理解建立、插入等實現(xiàn)的過程。
| typedef struct node { char data; struct node *next; }NODE; /*結(jié)點*/ 正向建立鏈表: NODE *create() { char ch='a'; NODE *p,*h=NULL,*q=NULL; while(ch<'z') { p=(NODE *)malloc(sizeof(NODE)); /*強制類型轉(zhuǎn)換為指針*/ p->data=ch; if(h==NULL) h=p; else q->next=p; ch++; q=p; } q->next=NULL; /*鏈表結(jié)束*/ return h; } |
逆向建立:
| NODE *create() { char ch='a'; NODE *p,*h=NULL; while(ch<='z') { p=(NODE *)malloc(sizeof(NODE)); p->data=ch; p->next=h; /*不斷地把head往前挪*/ h=p; ch++; } return h; } |
用遞歸實現(xiàn)鏈表逆序輸出:
| void output(NODE *h) { if(h!=NULL) { output(h->next); printf("%c",h->data); } } |
插入結(jié)點(已有升序的鏈表):





