1、單鏈表
單鏈表是一種鏈?zhǔn)酱嫒〉臄?shù)據(jù)結(jié)構(gòu),用一組地址任意的儲存單元存放線性表中的數(shù)據(jù)元素。鏈表中的數(shù)據(jù)是以結(jié)點(diǎn)來表示的,每個節(jié)點(diǎn)的構(gòu)成:元素(數(shù)據(jù)元素的映像)+指針(指示后繼元素存儲位置),元素就是存儲數(shù)據(jù)的數(shù)據(jù)單元,指針就是連接每個結(jié)點(diǎn)的地址數(shù)據(jù)。
2、單鏈表的數(shù)據(jù)結(jié)構(gòu)

head為頭結(jié)點(diǎn),不存放任何數(shù)據(jù),它的作用是充當(dāng)一個指向鏈表中真正存放數(shù)據(jù)的第一個節(jié)點(diǎn)
其中DATA為數(shù)據(jù)域,該內(nèi)存存放的是數(shù)據(jù);NEXT是地址域,數(shù)據(jù)類型為指針,該內(nèi)存存放的是下一段內(nèi)存的內(nèi)存地址。

3、有頭鏈表
有頭鏈表指的是鏈表初始化時就有一個頭結(jié)點(diǎn),并且頭指針始終指向該頭結(jié)點(diǎn),該頭結(jié)點(diǎn)的數(shù)據(jù)域不存在數(shù)據(jù)。如圖所示

4、循環(huán)鏈表
循環(huán)鏈表指的是鏈表的尾節(jié)點(diǎn)指針指向頭節(jié)點(diǎn)地址,從而形成環(huán)狀如圖:

源碼如下:
#include <stdio.h>
struct link //結(jié)構(gòu)體
{
int data; //數(shù)據(jù)域
struct link *next; //指針域
};
int main()
{
struct link n0, n1, n2;
n0.data = 10;
n1.data = 20;
n2.data = 30;
n0.next = &n1;
n1.next = &n2;
n2.next = NULL;
printf("%d\n", n0.data);
printf("%d\n", n0.p->data);
printf("%d\n", n1.p->data);
return 0;
}
5、*“.”和“->”的區(qū)別
C語言中“.”的意思是給的是立即數(shù)地址,“->”的意思是給的是指針。"."的左操作數(shù)為值,"->"的左操作數(shù)為指針。"."和"->"實際是可以合并為一個操作符的,在很多新語言中對值和指針取成員已經(jīng)統(tǒng)一為"."了,C中保留只是一種傳統(tǒng)的延續(xù)。
6、*結(jié)構(gòu)體
結(jié)構(gòu)體在C語言中屬于自定義數(shù)據(jù)類型,我們知道數(shù)組是同一數(shù)據(jù)類型的集合,那結(jié)構(gòu)體可以看成不同數(shù)據(jù)類型的集合,比如我們要存儲一個游戲角色的名字、等級、血量值、防御值、職業(yè)、技能等級信息時,我們就會發(fā)現(xiàn)這些屬性對應(yīng)的是不同的數(shù)據(jù)類型,這種情況下,為了更好的對應(yīng)角色,我們可以將它們的相關(guān)信息全部封裝到一個類型中,此時我們就會用到結(jié)構(gòu)體來進(jìn)行同意封裝,所以結(jié)構(gòu)體也是C語言編程中非常常見的一個數(shù)據(jù)類型
遍歷、頭插、尾插鏈表
#include <stdio.h>
#include <stdlib.h>
struct links
{
int data;
struct links *next;
};
void showList(struct links *p)//鏈表遍歷
{
while(p)
{
printf("%d\n", p->data);
p = p->next;
}
}
void installTail(struct links **h, struct links *n)//尾插法
{
n->next = *h;
*h = n;
}
struct links *headInsert(struct links *h, struct links *n)//頭插法
{
n->next = h;
return n;
}
int main()
{
struct links *head = NULL;
struct links *h1 = NULL;
int i = 0;
int data[10] = {1,2,3,4,5,6,7,8,9,10};
while (i < (sizeof(data) / sizeof(int)))
{
h1 = malloc(sizeof(struct links));
h1->data = data[i];
h1->next = NULL;
installTail(&head,h1);
//head = headInsert(head,h1);
i++;
}
showList(head);
return 0;
}
*malloc是動態(tài)內(nèi)存分配,用于申請一塊連續(xù)的指定大小的內(nèi)存塊區(qū)域以void*類型返回分配的內(nèi)存區(qū)域地址,當(dāng)無法知道內(nèi)存具體位置的時候,想要綁定真正的內(nèi)存空間,就需要用到動態(tài)的分配內(nèi)存,且分配的大小就是程序要求的大小。
最后附上一首秋瑾先生的詞供大家賞析
滿江紅·小住京華
小住京華,早又是中秋佳節(jié)。為籬下黃花開遍,秋容如拭。
四面歌殘終破楚,八年風(fēng)味徒思浙。
苦將儂強(qiáng)派作蛾眉,殊未屑!
身不得,男兒列。心卻比,男兒烈!
算平生肝膽,因人常熱。俗子胸襟誰識我?英雄末路當(dāng)磨折。
莽紅塵何處覓知音?青衫濕!
文章來源:學(xué)到牛牛 www.xuedaon.comyuyu
舉報/反饋以上就是【第6個不是真的吧?新鮮出爐(單鏈表逆置)逆轉(zhuǎn)單鏈表-單向鏈表_學(xué)到牛牛】的全部內(nèi)容。


評論