C語言雙鏈表框架搭建練習(一)

2021-07-31 18:16:33 字數 1856 閱讀 3451

在資料結構中,鍊錶是不可或缺的存在,其在功能特點上與陣列的對立也是它具有在增刪上的獨特優勢;而c語言雖然在煉表處理上的方便程度不如c++,但是更基層代表著更靈活。將二者結合,我們就可以根據需求做出不同的鍊錶結構,在完成基礎的搭建之後,看上去**量很大的c語言也可以很方便的操作,而且在執行速度和靈活性上完勝c++。

下面將搭建鍊錶的結構框架:

首先是鍊錶結構體定義

struct linklist

;typedef

struct linklist node;

為鍊錶新增資料

node* adddata(node* phead, datatype data)

else

p->pnext = pnew;

}return phead;

}

建立鍊錶

node*

link

=null;

//init(link, 0); 頭節點不分配記憶體

link

= adddata(link, 20);

link

= adddata(link, 0);

link

= adddata(link, 21);

link

= adddata(link, 3);

link

= adddata(link, 56);

link

= adddata(link, 7);

link

= adddata(link, 1);

link

= adddata(link, 32);

link

= adddata(link, 5);

link

= adddata(link, 6);

獲取鍊錶節點個數

int getnum(node *phead)

return num;

}

元素交換

void swap(node*p1, node*p2)

鍊錶顯示

void showdata(node* phead)

printf("\n");

}

遞迴排序

void sortdata(node* phead, node* pback)   //用到phead的有:指標遍歷的初始化;遍歷的判斷標準;遍歷完成之後的位置交換

node *p1 = phead, *p2 = phead->pnext;

// p1->data p2->data

while (p2 != pback) //這裡的變數最後元素在變化,無論是陣列還是鍊錶,都要加入結尾變數作為迴圈結束條件

p2 = p2->pnext;

}swap(phead, p1);

sortdata(phead, p1);

sortdata(p1->pnext, pback);

}

鍊錶反轉

node* rev(node*phead)

node *p1 = phead, *p2 = phead->pnext, *p3 =

null; //進行差別有三個位置的拷貝,就要創立三個指標,進行輪替

while (p2 !=

null)

phead->pnext =

null;

return p1;

}

下一部分我們會介紹雙鏈表以及後面的環狀鍊錶。

C語言雙鏈表框架搭建練習(二)

雙鏈表在功能上能夠彌補單鏈表上的不可逆,查詢上具有優勢,我們下面將介紹雙鏈表的搭建。雙鏈表結構體定義 typedef struct doublelinklist dblink,pdblink 因為雙鏈表是結構體中的指標連線起來的,所以建立鍊錶的時候自然不能少了尾部新增節點的函式 pdblink ad...

C語言雙鏈表框架搭建練習(三)

我們繼續實現雙鏈表插入排序,即將雙鏈表建立時進行排序操作,核心函式如下 node addsortdata node phead,datatype data else newp pnext p pnext p pnext newp if p phead p data newp data 因為要改變投節...

C語言 雙鏈表

還是 程式設計師面試寶典 上的 include include typedef struct student dnode 建立雙鏈表 dnode create else cycle 0 p next null p head head head next head pre null free p 釋放...