單鏈表是一種鏈式訪問的資料結構,用一組位址任意的儲存單元存放線性表中的資料元素。鍊錶中的資料是以結點來表示的,每個結點的構成:元素(資料元素的映象) + 指標(指示後繼元素儲存位置),元素就是儲存資料的儲存單元,指標就是連線每個結點的位址資料。今天我來跟大家分享一下不帶頭的乙個鍊錶的實現。
定義鍊錶結構體
定義乙個結構體,裡面包含了乙個指向鍊錶的乙個結構體指標變數typedef
int sltdatatype;
typedef
struct slistnode
slistnode;
要實現的埠typedef
struct slist
slist;
**總覽void
slistinit
(slist* plist)
;void
slistdestory
(slist* plist)
;slistnode*
buyslistnode
(sltdatatype x)
;void
slistpushfront
(slist* plist, sltdatatype x)
;void
slistpopfront
(slist* plist)
;void
slistpushback
(slist* plist, sltdatatype x)
;void
slistpopback
(slist* plist)
;slistnode*
slistfind
(slist* plist, sltdatatype x)
;// 在pos的後面進行插入
void
slistinsertafter
(slistnode* pos, sltdatatype x)
;//刪除pos位置的結點
void
slisteraseafter
(slistnode* pos)
;void
slistremove
(slist* plist, sltdatatype x)
;void
slistprint
(slist* plist)
;void
testslist()
;
slist.h
slist.c#define _crt_secure_no_warnings 1
#pragma once
#include
#include
#include
#include
//單向 不帶頭 不迴圈
typedef
int sltdatatype;
typedef
struct slistnode
slistnode;
typedef
struct slist
slist;
void
slistinit
(slist* plist)
;void
slistdestory
(slist* plist)
;slistnode*
buyslistnode
(sltdatatype x)
;void
slistpushfront
(slist* plist, sltdatatype x)
;void
slistpopfront
(slist* plist)
;void
slistpushback
(slist* plist, sltdatatype x)
;void
slistpopback
(slist* plist)
;slistnode*
slistfind
(slist* plist, sltdatatype x)
;// 在pos的後面進行插入
void
slistinsertafter
(slistnode* pos, sltdatatype x)
;//刪除pos位置的結點
void
slisteraseafter
(slistnode* pos)
;void
slistremove
(slist* plist, sltdatatype x)
;void
slistprint
(slist* plist)
;void
testslist()
;
#include
"slist.h"
void
slistinit
(slist* plist)
//構造結點
slistnode*
buyslistnode
(sltdatatype x)
pnewnode->_data = x;
pnewnode->_next =
null
;return pnewnode;
}//頭插
void
slistpushfront
(slist* plist, sltdatatype x)
//頭刪
void
slistpopfront
(slist* plist)
slistnode* phead = plist->_head->_next;
free
(plist->_head)
; plist->_head =
null
; plist->_head = phead;
}//尾插
void
slistpushback
(slist* plist, sltdatatype x)
else
head->_next = cur;}}
//尾刪
void
slistpopback
(slist* plist)
slistnode* cur = plist->_head;
slistnode* prev = plist->_head->_next;
while
(prev->_next)
free
(prev)
; prev =
null
; cur->_next =
null;}
//查詢
slistnode*
slistfind
(slist* plist, sltdatatype x)
cur = cur->_next;
}return cur;
}// 在pos的後面進行插入
void
slistinsertafter
(slistnode* pos, sltdatatype x)
// 刪除pos位置的結點
void
slisteraseafter
(slistnode* pos)
//移除
程式設計師成長之旅 順序表
執行效果 靜態順序表是只適用於我們已經了解到需要存多少資料,而一般我們都是用動態順序表,下面我給大家展示一下我所實現的動態順序表的 seqlist.h define crt secure no warnings 1 pragma once include include include includ...
程式設計師成長之旅 設計迴圈佇列
設計你的迴圈佇列實現。迴圈佇列是一種線性資料結構,其操作表現基於 fifo 先進先出 原則並且隊尾被連線在隊首之後以形成乙個迴圈。它也被稱為 環形緩衝器 迴圈佇列的乙個好處是我們可以利用這個佇列之前用過的空間。在乙個普通佇列裡,一旦乙個佇列滿了,我們就不能插入下乙個元素,即使在佇列前面仍有空間。但是...
程式設計師成長之旅 二分查詢
最終 溢位問題在迴圈體中,一般計算中間值middle時所用的是 middle left right 2 但是這種情況容易溢位,因為一旦left right超過所在型別的範圍的話,就會出現錯誤,為了不出現這種問題,我們引入了 middle left right left 2 邊界問題 迴圈體外的初始化...