鍊錶是一種常見的資料結構,它是動態地進行儲存分配的一種結構。每乙個儲存單元稱為乙個節點,都由兩部分組成,乙個是儲存資料的資料域,另乙個是儲存下乙個節點位址的指標域。
鍊錶分為單向鍊錶、雙向鍊錶,迴圈鍊錶等;單鏈表還可以分為帶頭節點的和不帶頭節點的。一般的鍊錶都是不帶頭節點的實現。下面是用c語言對單鏈表的簡單介面實現:包括鍊錶節點的建立、頭插尾插、頭刪尾刪、查詢指定元素、刪除指定元素等幾個函式。首先宣告,為了使程式更通用,我們將型別int重新命名為datatype,以後更換資料型別修改程式時,將更為方便。
鍊錶的結構:
typedef int datatype;
typedef struct node
node, *pnode, *plist;
函式的宣告:
void initlinklist(plist* pplist);//初始化
pnode buynode(datatype d);//建立節點
void pushfront(plist* pplist, datatype d);//頭插節點
void popfront(plist* pplist);//頭刪節點
void pushback(plist *pplist, datatype d);//尾插節點
void popback(plist *pplist);//尾刪節點
void display(plist plist);//列印鍊錶
void destroylist(plist* pplist);//銷毀鍊錶
pnode find(plist plist, datatype d);//查詢指定元素
void insert(plist *pplist, pnode pos, datatype d);//指定位置後插入元素
void remove(plist *pplist, datatype d);//刪除指定元素
void removeall(plist *pplist, datatype d);//刪除指定的所有元素
以下是具體的實現**:
void initlinklist(plist* pplist)//初始化鍊錶
pnode buynode(datatype d)//建立節點
tmp->data = d;
tmp->next = null;
return tmp;
}void pushfront(plist* pplist, datatype d)//頭插
else }
void popfront(plist* pplist)//頭刪
}void pushback(plist *pplist, datatype d)//尾插
else
cur->next = tmp; }}
void popback(plist *pplist)//尾刪
while (cur->next)//cur為要刪除的節點,tmp為要刪除的節點的前乙個
tmp->next = null;
free(cur);
cur = null;
}void display(plist plist)//列印鍊錶
printf("over\n");
}void destroylist(plist* pplist)//銷毀鍊錶
*pplist = null;
}pnode find(plist plist, datatype d)//查詢某個指定元素
return null;//如果沒找到返回null
}void insert(plist *pplist, pnode pos, datatype d)//在指定位置後插入元素
tmp->next = pos->next;
pos->next = tmp;
}void remove(plist *pplist, datatype d)
//要刪除指定元素,我們可以先用前面已經實現的find函式,找到指定元素的位置,然後再刪除
pnode pos = find(*pplist, d);
if (pos != null)
else//非尾
}}void remove_2(plist *pplist, datatype d)
//除過上面的方法,我們還可以遍歷鍊錶一遍,找到指定元素,進行刪除
while (cur)
pnode del = cur->next;刪除的節點非尾
cur->data = del->data;
cur->next = del->next;
free(del);
del = null;
} cur = cur->next; }}
void removeall(plist *pplist, datatype d)//刪除指定的所有元素
remove(pplist, d);//非尾
} if (cur->data != d)//等於d則刪除,不等於d則繼續遍歷鍊錶}}
C語言單鏈表
include include include define error 0 typedef struct lnode lnode,linklist linklist initlist linklist l node next null l node return l int listlength ...
c語言 單鏈表
單鏈表,顧名思義是一種鏈式訪問的資料結構,用一組位址任意的儲存單元存放線性表中的資料元素。鍊錶中的資料是以結點來表示的,每個結點的構成 元素 資料元素的映象 指標 指示後繼元素儲存位置 元素就是儲存資料的儲存單元,指標就是連線每個結點的位址資料。我們在這裡使用c語言實現 h 檔案 pragma on...
C語言單鏈表
學過線性表中的順序表的都知道,順序表裡的資料在物理記憶體上是相鄰的,所以當我們在順序表中想要訪問下乙個元素時可以直接去訪問,就像陣列一樣。但是單鏈表卻不同,單鏈表的資料儲存的位置是動態分配的,也就是說單鏈表的儲存在物理記憶體上不是相鄰的,所以我們就只能通過指標這種方式來把單鏈表串起來,通過指標來訪問...