日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据结构与算法-链表

發布時間:2024/4/11 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构与算法-链表 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在講述鏈表之前讓我們對數據結構進行一個簡單的回顧:我們知道,數據結構指的是描述實際問題中各個數據項節點之間的前后邏輯結構關系,即要么是線性結構(即某一數據項的前繼節點和后繼節點有且只有一個)要么是非線性結構(即某一數據節點的前驅或者后繼節點不止一個)。在確定了實際數據項的數據結構之后,我們要采用某種存儲方式對其進行存儲,常見的數據結構的存儲方式有:順序存儲、鏈式存儲、散列存儲以及索引存儲。每一種存儲方式都有一個基礎數據結構與其對應,如數組是順序存儲的基礎數據結構,鏈表是鏈式存儲基礎數據結構等等。所以徹底理解了鏈表也即會非常容易的理解其他基于鏈式存儲的數據結構。

鏈表:根據指針域的不同,鏈表分為單向鏈表、雙向鏈表、循環鏈表等等。

單向鏈表是鏈表中最簡單的,每個元素包含一個指針域和一個數值域,我們稱這樣的元素為一個節點,每個節點用來存儲實際數據中的一個數據項,每個節點的指針域指向下一個節點,最后一個指向一個空值。即一個單項鏈表的一個節點分為兩個部分,第一部分保存或者顯示關于節點的信息,第二部分存儲下一個節點的地址,單鏈表只能向一個方向進行遍歷。下面我們來具體實現一個單鏈表:
首先我們要定義一個節點,用于保存數據項的各項信息:

typedef Node {int data;Node * pNextNode; }linkNode;

生成一個包含nCount個節點的鏈表:

linkNode* createLink(int nCount)//尾插法 {linkNode *pHeadNode = malloc(sizeof(linkNode));linkNode * p = null;for(int i = 0; i<nCount; i++){p = malloc(siezof(linkNode))p->data = i;pHeadNode->next = p;pHeadNode = p;}p->next = null;return pHeadNode }

刪除鏈表某一個節點:

linkNode * deleteNode(linkNode * pHeadNode, int theData) {while(pHeadNode->data==theData)//判斷鏈表頭結點是否是需要刪除的節點{pHeadNode= pHeadNode->next;if(pHeadNode== null) return null;}while(pHeadNode->next!=null){if(pHeadNode->next->data==theData)pHeadNode->next = pHeadNode->next->next;elsepHeadNode = pHeadNode->next; }return pHeadNode; }

查找鏈表中包含某一元素的節點

linkNode* searchNode(linkNode *pHeadNode, int theData) {while(pHeadNode->data==theData)return pHeadNode;while(pHeadNode->next!=null && pHeadNode->data!=theData)pHeadNdoe = pHeadNode->next;return pHeadNode; }

在鏈表中,在pos位置增加一個元素:

linkNode* addNode(linkNode* pHeadNode, int pos, int number) {for(int i = 0; i<pos; i++){pHeadNode = pHeadNode->next;}linkNode* theAddNode = malloc(sizeof(linkNode));theAddNode->data = numbertheAddNode->next = pHeadNode->next;pHeadNode->next = theAddNode; }

鏈表的遍歷

void printLink(linkNode* pHeadNode) {if(pHeadNode==null)return;while(pHeadNode->next!=nul)pHeadNode = pHeadNode->next; }

到此我們完成了單向鏈表的一部分功能,當然代碼不是特別完善,所以我會不定時更新完善這部分。當然還有雙向鏈表和循環鏈表等,但在此就不一一介紹了,后面有需要的會補上來的。

超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生

總結

以上是生活随笔為你收集整理的数据结构与算法-链表的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。