單鏈表相關操作和相關知識點

2021-09-25 11:59:23 字數 3627 閱讀 3840

熟悉什麼是鍊錶,鍊錶的分類?

熟悉鍊錶帶頭結點和不帶頭結點的區別? (後面解釋)

完成單鏈表的以下基本操作:

typedef int sdatatype;

// 鍊錶的節點

typedef struct slistnode

node, *pnode;

// 鍊錶的結構,給乙個頭指標儲存鍊錶第乙個節點的位址

typedef struct slist

slist, *pslist;

// 鍊錶的初始化

void slistinit(slist* s);

// 在鍊錶s最後乙個節點後插入值為data的節點

void slistpushback(slist* s, sdatatype data);

// 刪除鍊錶s最後乙個節點

void slistpopback(slist* s);

// 在鍊錶s第乙個節點前插入值為data的節點

void slistpushfront(slist* s, sdatatype data);

// 刪除鍊錶s的第乙個節點

void slistpopfront(slist* s);

// 在鍊錶的pos位置後插入值為data的節點

void slistinsert(pnode pos, sdatatype data);

// 刪除鍊錶s中pos位置的節點

void slisterase(slist* s, pnode pos);

// 在鍊錶中查詢值為data的節點,找到返回該節點的位址,否則返回null

pnode slistfind(slist* s, sdatatype data);

// 獲取鍊錶中有效節點的個數

size_t slistsize(slist* s);

// 檢測鍊錶是否為空

int slistempty(slist* s);

// 將鍊錶中有效節點清空

void slistclear(slist* s);

// 銷毀鍊錶

void slistdestroy(slist* s);

一,鍊錶是一種資料結構,是一種物理儲存結構上不連續,非順序的儲存結構,資料元素的邏輯是通過指標鏈結依次實現的。

二.無頭非迴圈單鏈表,結構簡單但是一般不用來儲存資料,不便於頭刪,有頭的煉表頭插和頭刪更加方便。

三:list.h

#pragma once

#include

#include

#include

#include

typedef int sdatatype;

// 鍊錶的節點

typedef struct slistnode

node, *pnode;

// 鍊錶的結構,給乙個頭指標儲存鍊錶第乙個節點的位址

typedef struct slist

slist, *pslist;

// 鍊錶的初始化

void slistinit(slist* s);

// 在鍊錶s最後乙個節點後插入值為data的節點

void slistpushback(slist* s, sdatatype data);

// 刪除鍊錶s最後乙個節點

void slistpopback(slist* s);

// 在鍊錶s第乙個節點前插入值為data的節點

void slistpushfront(slist* s, sdatatype data);

// 刪除鍊錶s的第乙個節點

void slistpopfront(slist* s);

// 在鍊錶的pos位置後插入值為data的節點

void slistinsert(pnode pos, sdatatype data);

// 刪除鍊錶s中pos位置的節點

void slisterase(slist* s, pnode pos);

// 在鍊錶中查詢值為data的節點,找到返回該節點的位址,否則返回null

pnode slistfind(slist* s, sdatatype data);

// 獲取鍊錶中有效節點的個數

size_t slistsize(slist* s);

// 檢測鍊錶是否為空

int slistempty(slist* s);

// 將鍊錶中有效節點清空

void slistclear(slist* s);

// 銷毀鍊錶

void slistdestroy(slist* s);

list.c

#include

#include

#include

#include

#include 「list.h」

void slistinit(slist* s)

pnode buyslistnode(sdatatype data)

pnewnode->data = data;

pnewnode->_pnext = null;

return pnewnode;

}void slistpushback(slist* s, sdatatype data)

else

void slistpopback(slist* s)

else

free(pcur);

ppre->_pnext = null;

}

}

void printslist(slist* s)

printf(「null」);

}void slistpushfront(slist* s, sdatatype data)

void slistpopfront(slist* s)

pdelnode = s->_phead;

s->_phead = pdelnode->_pnext;

free(pdelnode);

}void slistinstert(pnode pos, sdatatype data)

pnewnode = buyslistnode(data);

pnewnode->_pnext = pos->_pnext;

pos->_pnext = pnewnode;

}void slisterase(slist* s, pnode pos)

if (pos == s->_phead)

else

}free(pos);

}pnode slistfind(slist* s, sdatatype data)

return null;

}int slistsize(slist*s)

return count;}

int slistempty(slist* s)

void slistremove(slist* s, sdatatype data)

else

free(pcur);

return;

}else }}

void testslist1()

pcur->_pnext = pnewnode;

}void testslist3()

void testslist()

單鏈表相關操作

這是自己寫的最長的一次 了 在機房敲了一天。以前一直用list來水鍊錶的題 這次終於體會到痛苦了 include include include include include include using namespace std typedef struct node 單鏈表 s,list vo...

單鏈表相關操作

typedef int sltdatatype typedef struct slistnode slistnode typedef struct slist slist 通過畫圖來理解無頭單向非迴圈鍊錶的相關操作 其中操作在圖中用簡易偽 描述 先將要插入的結點指向第乙個結點,然後頭指標指向插入的結...

單鏈表 雙鏈表和環形鍊錶 相關知識點)

資料結構中有一種叫鍊錶的,它不像陣列有空間限制,可以無限 記憶體範圍內 新增元素 1.單鏈表 單鏈表的儲存如下 1 鍊錶是以結點來乙個個儲存的鏈式儲存 2 他有兩個域乙個資料域用來儲存資料,還有乙個指標域用來儲存下乙個結點的儲存的位置 3 鍊錶有帶有頭節點的鍊錶,也有不帶頭結點的鍊錶 帶頭節點的單鏈...