程式設計師成長之旅 單鏈表的基本操作

2021-09-25 12:28:42 字數 4259 閱讀 9155

單鏈表是一種鏈式訪問的資料結構,用一組位址任意的儲存單元存放線性表中的資料元素。鍊錶中的資料是以結點來表示的,每個結點的構成:元素(資料元素的映象) + 指標(指示後繼元素儲存位置),元素就是儲存資料的儲存單元,指標就是連線每個結點的位址資料。

今天我來跟大家分享一下不帶頭的乙個鍊錶的實現。

定義鍊錶結構體

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

#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()

;

slist.c

#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 邊界問題 迴圈體外的初始化...