標頭檔案: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...