資料結構 單鏈表(C 實現)

2021-09-12 17:44:52 字數 1777 閱讀 3887

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

//單鏈表基本操縱的實現(包含頭結點)

#include#define ok 1

#define error 0

using namespace std;

typedef int elemtype;

typedef int status;//status為函式型別,其值是函式結果狀態**,如ok等(狀態**:return ok插入成功,提高**的可讀性,我這裡偷懶未使用)

//單鏈表的儲存結構

typedef struct lnode

lnode,*linklist; //lnode為單鏈表的結點,linklist為指向結點lnode的指標(lnode*與linklist等價,這樣使用是為了更好地區分鍊錶與結點)

/*作者理解(有誤請大佬指出):

這是定義乙個結構體,這個結構體有兩個屬性,

乙個是elemtype型別的data;

另乙個是這個結構體型別的指標next;

給這個結構定義了乙個別名:lnode,乙個指標的別名:linklist;

lnode a; 等價於 struct node a;

都是宣告乙個struct node結構體型別的結構體變數 a;

linklist b; 等價於 struct lnode *b;等價於 lnode *b;

但是為了提高**的可讀性,我們用linklist宣告鍊錶eg:linklist l

宣告乙個struct lnode結構體型別的指標變數 b(這個指標變數指向結點lnode);

重要:lnode* p=l->next;//這是新建乙個指標名叫p,它指向的是首元結點。

*///單鏈表的初始化,這裡的l為指向頭結點的頭指標

void initlist(linklist &l)

//前插法建立單鏈表

void createlist_h(linklist &l,int n)

}//後插法建立單鏈表

void createlist_r(linklist &l,int n)

}//單鏈表的取值

elemtype getelem(linklist l,int i)

//單鏈表的按值查詢,返回值為找到的元素結點的指標

lnode* locateelem(linklist l,elemtype e)

return p;

}//單鏈表的插入

void linkinsert(linklist &l,int i,elemtype e)

//查詢到第i-1個結點,並使p指向該結點

if(!p||j>i-1)

//查詢表的第i-1個結點,p指向該結點

if(!(p->next)||(j>i-1))

//列印單鏈表

void printlist(linklist l)

}//整表刪除

status clearlist(linklist l)

if (!p)

return error;

l->next = null;

return ok;

}//獲得單鏈表的長度

status getlen(linklist l)

return len;

}int main()

資料結構 單鏈表C實現

什麼叫結構體?就是能夠將不同資料型別集合在一起構造乙個新的資料型別的東西,它有乙個注意點就是不能引用自身作為結構體成員,為什麼呢?因為在建立這種型別的結構體變數時計算機無法得知給結構體變數分配多大的記憶體導致編譯器報錯,提示非法操作。那麼為什麼計算機無法給結構體變數分配某個固定記憶體呢?是這樣的,如...

C 實現資料結構 單鏈表

2020年8月7日 周五 天氣晴 不悲嘆過去,不荒廢現在,不懼怕未來 用c 實現了簡單的單鏈錶類,功能包括插入 刪除 查詢相關元素,分離鍊錶等操作。是用vs2019實現的,每個函式的功能都新增了一定注釋,完整工程放在了我的github上,有需要的也可以自取。license gnu general p...

資料結構 單鏈表實現

線性表的鏈式儲存結構的特點是用一組任意的儲存單元儲存線性表的資料元素 這組儲存單元可以是連續的,也可以是不連續的 因此,為了表示每個資料元素與其直接後繼資料元素之間的邏輯關係,對資料元素來說,除了儲存其本身的資訊之外,還需儲存乙個指示其直接後繼的資訊 即直接後繼的儲存位置 這兩部分資訊組成資料元素的...