單向鍊錶小實驗

2021-09-03 03:11:00 字數 3050 閱讀 4067

我會把程式全部貼上,直接gcc就能通過,方便學習。整套的基礎是我以前學習的時候從其他部落格能**粘過來的。很久了,貌似也沒改變什麼。

這些介面就是為了了解什麼是鍊錶,鍊錶怎麼構建和使用。實際使用比這個要健壯很多,拋磚引玉。

鍊錶是什麼呢,其實很簡單,鍊錶就是儲存同一類資料的乙個鏈,像珍珠項鍊一樣,乙個疙瘩乙個疙瘩的,不過這個項鍊沒有連線成乙個圈。每個疙瘩習慣上叫做節點。節點的內容實際就是指標,乙個指向你想儲存的資料型別的乙個指標。找到這個指標,就找到了它鎖連線這的那段記憶體空間。操作節點,只需知道頭就ok了,鍊錶的結尾乙個節點指向的下乙個節點一般為null。

鍊錶就是上一段總結的這麼個東西。每個節點指向的記憶體空間除了想要儲存的資料外,這個空間裡還有指標,還是指向這種記憶體段空間的指標。單向鍊錶呢就有乙個指標,指向下乙個節點,雙向鍊錶呢有兩個指標,乙個指向前乙個節點,乙個指向後乙個節點。哈哈,就說道這裡,精髓自己體會~~~

下面是**,編譯的是這串指令:gcc -o node1 node1.c,我儲存在node1.c檔案中了。

#include

#include

struct grade

;typedef struct grade node;//sizeof(node)=16

node *create();

void insert(node *head, node *pnew, int i);

void delete(node *head, int i);

void display(node *head);

void destroy(node *head);

int main(void)

display(head);

return 0;

//插入的新資料。值和位置。

pnew = (node *)malloc(sizeof(node));//pnew->score=0,malloc也會清0

if(null == pnew)

pnew->score = 444;

insert(head, pnew, 3);

//顯示插入後的鍊錶。

printf("cha ru hou de lian biao:\n");

display(head);

//顯示刪除後的鍊錶。

delete(head, 2);

printf("shan chu hou de lian biao:\n");

display(head);

//銷毀鍊錶。

destroy(head);

return 0;

}node *create()

head->score = 88888888;

head->next = null;

tail = head;//tail必不可少,讓head和建立的節點相關聯,就這個作用。

printf("***************************\n"

"*head = %p                 \n"

"*head->score = %d          \n"

"*head->next = %p           \n",

head, head->score, head->next);

printf("***************************\n"

"*the score < 0 means stop.*\n"

"*     put in scores:      *\n"

"***************************\n");

while(1)

pnew = (node *)malloc(sizeof(node));

if(null == pnew)

pnew->score = score;

pnew->next = null;//保證鍊錶中最後乙個節點的指標域為空。

tail->next = pnew;//tail是活動的,總是指向表中最後乙個節點。開始時指向head,之後指向pnew。tail此時指向pnew之前開的那個pnew,這一步讓之前的那個pnew的指標域指向新的pnew。

tail = pnew;//tail向後移動,指向新的pnew。

printf("***************************\n"

"new node = %p next = %p score = %d\n"

"***************************\n",

pnew, pnew->next, pnew->score);

}printf("***********create end**********\n");

return head;

}void insert(node *head, node *pnew, int i)//插入到i的後面,從1開始數。

if(null == p)

pnew->next = p->next;

p->next = pnew;

printf("**********insert end***********\n");

}void delete(node *head, int i)

p = head;

for(j = 1; j < i && p->next != null; j++)//j=1,刪除第n個,j=0,刪除第n+1個

if(null == p->next)

q = p->next;

p->next = q->next;

free(q);

printf("************delete end**************\n");

}void display(node *head)

printf("************display end**************\n");

}void destroy(node *head)

free(p);//釋放head

printf("************destroy end**************\n");

}這個**直接貼出去就能編譯通過,對於理解鍊錶很不錯。就到這裡了。部落格會堅持下去的

實驗1 單向鍊錶就地轉置

老師說隨便語言,所以用的是c和c 混用方便一些。1 新建單鏈表 2.依次輸出單鏈表的值 3.就地反轉 4.輸出反轉的鍊錶的值 5.摧毀單鏈表 include include include using std cin using std cout using std endl struct link...

鍊錶 反轉單向鍊錶

思路 從第二個元素開始。1 刪除當前元素。2 把當前元素放到頭結點位置。其中需要宣告3個變數 headnode 頭結點 prenode 前乙個結點 currentnode 當前結點 具體步驟如圖所示 實現 反轉單鏈表方法實現類 created by liujinjin on 17 1 19.publ...

鍊錶1 單向鍊錶

鍊錶中最簡單的一種是單向鍊錶,它包含兩個域,乙個資料域和乙個指標域,指標域指向鍊錶中的下乙個節點,最後乙個節點的指標域指向乙個空值 鍊錶最基本的結構是在每個節點儲存資料和到下乙個節點的位址,在最後乙個節點儲存乙個特殊的結束標記,另外在乙個固定的位置儲存指向第乙個節點的指標,有的時候也會同時儲存指向最...