單鏈表c語言實現

2021-08-20 12:17:22 字數 3784 閱讀 9231

標頭檔案:slist.h

#pragma once

#include

#define n 100

// 值型別

typedef int datatype;

typedef struct slistnode slistnode;

//slistnode *head;

// 初始化

void slistinit(slistnode **ppfirst);

//size

int size(slistnode **ppfirst);

// 尾部插入

void slistpushback(slistnode** ppfirst, datatype data);

// 頭部插入

void slistpushfront(slistnode **ppfirst, datatype data);

// 尾部刪除

void slistpopback(slistnode **ppfirst);

// 頭部刪除

void slistpopfront(slistnode **ppfirst);

// 給定結點插入,插入到結點前

void slistinsert1(slistnode **ppfirst, slistnode *ppos, datatype data);

void slistinsert2(slistnode **ppfirst, slistnode *ppos, datatype data);

// 給定結點刪除

void slisterase(slistnode **ppfirst, slistnode *ppos);

// 按值刪除,只刪遇到的第乙個

void slistremove(slistnode **ppfirst, datatype data);

// 按值刪除,刪除所有的

void slistremoveall(slistnode **ppfirst, datatype data);

// 銷毀

void slistdestroy(slistnode **ppfirst);

// 按值查詢,返回第乙個找到的結點指標,如果沒找到,返回 null

slistnode* slistfind(slistnode *pfirst, datatype data);

//type

void print(slistnode *phead);

功能函式:slist.c:

#include

"slist.h"

#include

#include

// 初始化

void slistinit(slistnode **ppfirst)

//建立新節點

static slistnode *buynewnode(datatype data)

//erase

void erase(slistnode **ppfirst, slistnode *ppos)

slistnode* pnode;

for (pnode =

*ppfirst; pnode->pnext != ppos; pnode = pnode->pnext){}

pnode->pnext = ppos->pnext;

free(ppos);

}//size

int size(slistnode **ppfirst)

return size;

}// 尾部插入

void slistpushback(slistnode** ppfirst, datatype data)

slistnode *pnode =

*ppfirst;

while (pnode->pnext !=

null)

pnewnode->pnext = pnode->pnext;

pnode->pnext = pnewnode;

}// 頭部插入

void slistpushfront(slistnode **ppfirst, datatype data)

// 尾部刪除

void slistpopback(slistnode **ppfirst)

if ((*ppfirst)->pnext ==

null)

slistnode *pnode, *pnext;

pnode =

*ppfirst;

while (pnode->pnext->pnext !=

null)

pnext = pnode->pnext;

pnode->pnext = pnext->pnext;

//pnode->pnext = null;

free(pnext);

}// 頭部刪除

void slistpopfront(slistnode **ppfirst)

else

}// 給定結點插入,插入到結點前

void slistinsert1(slistnode **ppfirst, slistnode *ppos, datatype data)

slistnode *pnode;

for (pnode =

*ppfirst; pnode->pnext != ppos; pnode = pnode->pnext)

slistnode *pnewnode = buynewnode(data);

pnewnode->pnext = ppos;

pnode->pnext = pnewnode;

}void slistinsert2(slistnode **ppfirst, slistnode *ppos, datatype data)

// 給定結點刪除

void slisterase(slistnode **ppfirst, slistnode *ppos)

slistnode *pnode;

for (pnode =

*ppfirst; pnode->pnext != ppos; pnode = pnode->pnext){}

pnode->pnext = ppos->pnext;

free(ppos);

}// 按值刪除,只刪遇到的第乙個

void slistremove(slistnode **ppfirst, datatype data)

}// 按值刪除,刪除所有的

void slistremoveall(slistnode **ppfirst, datatype data)

else

}if ((*ppfirst)->

data

==data)

}// 銷毀

void slistdestroy(slistnode **ppfirst)

*ppfirst =

null;

}// 按值查詢,返回第乙個找到的結點指標,如果沒找到,返回 null

slistnode* slistfind(slistnode *pfirst, datatype data)

}return

null;

}//type

void print(slistnode *ppfirst)

}

測試用例:main.c

#include"slist.h"

#include

int main()

c語言實現單鏈表

一 使用簡介 使用c語言實現了單鏈表的基本操作,共有四個檔案,兩個標頭檔案是常用的,後兩個分別是主函式,和對鍊錶的基本操作函式,倒入時候,須將四個檔案放在同乙個目錄下。二 心得 在書寫過程中,主要錯誤集中在指標的使用上,通過此次程式設計,對於指標的認識更加深刻,頭結點的存在,更大意義上是為了簡化指標...

C語言實現單鏈表

單鏈表可以說是基礎,有利於對指標的使用 結點 typedef int datatype typedef struct slistnode slistnode 實現的函式的宣告如下 slistnode buynode datatype x void printslist slistnode phead...

C語言實現單鏈表

dev c 編譯執行通過,實現了單鏈表的構建,清空,插入,刪除和查詢。include include include include include define ok 1 define error 0 typedef int elemtype typedef struct node node ty...