#包含?& ltstdio.h & gt
#包含?& ltstdlib.h & gt
/*
1.創造結構——具體事物的抽象
2.創建壹個鏈接列表
3.創建壹個節點
4.插入操作
4.1?標題插入
4.2?頁腳插入
4.3?在指定位置插入(在指定位置之前)
5.刪除操作
5.1?標題刪除
5.2?頁腳刪除
5.3?指定位置刪除
6.判斷是否為空。
7.打印鏈接列表
*/
//單鏈表的結構
typedef?struct?單壹列表
{
//數據字段
int?數據;?//以這個數據為例
//struct?MMmyMM
//指針字段
struct?單身名單?*下壹個;
}LIST,* LPLIST
/*
別名:習慣大寫
別名-昵稱
//優點:字數少,好看(意思更簡潔)
struct?SingleList是另壹個名字:LIST
strcut?單身名單?*換個說法吧:?LPLIST
*/
//-& gt;2.創建壹個鏈表——任何結構都需要用壹個東西來表示。
LPLIST?創建列表()
{
//創建過程就是初始化過程——初始化基礎數據成員的過程。
//需要內存空間
LPLIST?列表?=?(LP LIST)malloc(sizeof(LIST));
如果?(列表?==?nullptr)
{
Printf("失敗\ n ");
系統(“暫停”);
退出(0);
}
//用表頭初始化基礎數據成員鏈表。
列表-& gt;下壹個?=?nullptr
回歸?列表;
}
//-& gt;3.創建壹個節點
LPLIST?CreateNode(int?數據)
{
//1.需要內存
LPLIST?節點?=?(LP LIST)malloc(sizeof(LIST));
//2.初始化基本數據成員
節點->;數據?=?數據;//並創建壹個有更多數據字段的鏈表。
節點->;下壹個?=?nullptr
回歸?節點;
}
//-& gt;4.1?頭部插入法
//函數編寫:形參可以指示操作什麽。
//插入的鏈表是(List),插入了多少數據(data)
作廢?insertlisheadnode(LP list?List,int?數據)
{
//Insert:創建插入的節點。
LPLIST?newNode?=?CreateNode(數據);//創建壹個節點
//插入操作
新節點-& gt;下壹個?=?列表-& gt;接下來;
/*
c=1
b=2
a = c;
c = b;
*/
列表-& gt;下壹個?=?newNode
}
//-& gt;4.2?尾部插入法
作廢?insertlistailnode(LP list?列表,?int?數據)
{
//查找頁腳->定義移動指針。
LPLIST?tailNode?=?列表;
什麽時候?(tail node->;下壹個?!=?nullptr)
{
tailNode?=?tail node-& gt;接下來;
}
//創建插入的節點
LPLIST?newNode?=?CreateNode(數據);
tail node-& gt;下壹個?=?newNode
}
//-& gt;4.3?指定地點
作廢?InsertListAppoinNode(LPLIST?列表,?int?數據,?int?PosData)
{
//創建兩個移動指針:找到指定位置和指定位置的前面。
LPLIST?frontNode?=?列表;
//front node-& gt;Next==taiNode:判斷鄰接
LPLIST?tailNode?=?列表-& gt;接下來;
//判斷是否為空。
什麽時候?(tail node->;數據?!=?PosData)
{
/*
front node = front node-& gt;接下來;
tail node = tail node-& gt;接下來;
*/
frontNode?=?tailNode
tailNode?=?front node-& gt;接下來;
如果?(tailNode?==?nullptr)
{
Printf("找不到指定的位置\ n ");
系統(“暫停”);
退出(0);
}
}
//tail node-& gt;數據=數據;
//找到插入的節點後創建它。
LPLIST?newNode?=?CreateNode(數據);
front node-& gt;下壹個?=?newNode
新節點-& gt;下壹個?=?tailNode
}
//-& gt;5.判斷是否為空。
//與創建時相比
intIsEmptyList(LPLIST?列表)
{
如果?(列表-& gt;下壹個?==?nullptr)
回歸?1;//返回1,表示為空。
回歸?0;?//表示它不為空。
}
/////-& gt;打印數據
作廢?PrintList(LPLIST?列表)
{
如果?(IsEmptyList(List))
{
Printf("鏈表為空,無法打印");
系統(“暫停”);
退出(0);
}
LPLIST?pNext?=?列表-& gt;接下來;
什麽時候?(pNext?!=?nullptr)
{
printf("%d\t ",p next-& gt;數據);
pNext?=?p next-& gt;接下來;
}
printf(" \ n ");
}
//-& gt;7.刪除
//標頭刪除
作廢?DeleteListHeadNode(LPLIST?列表)
{
如果?(IsEmptyList(List))
{
Printf("鏈表為空,不能刪除\ n ");
系統(“暫停”);
退出(0);?
}
LPLIST?DNode?=?列表-& gt;接下來;
列表-& gt;下壹個?=?DNode-& gt;接下來;
免費(DNode);
DNode?=?nullptr
}
//-& gt;8.刪除末尾
作廢?DeleteListTailNode(LPLIST?列表)
{
如果?(IsEmptyList(List))
{
Printf("鏈表為空,不能刪除\ n ");
系統(“暫停”);
退出(0);
}
//查找頁腳->定義移動指針。
LPLIST?tailNode?=?列表-& gt;接下來;
LPLIST?車尾?=?列表;
什麽時候?(tail node->;下壹個?!=?nullptr)
{
車尾?=?tailNode
tailNode?=?tail front->;接下來;
}
tail front->;下壹個?=?nullptr
free(tail node);
}
//-& gt;9.在指定位置刪除
作廢?deletelisappoinnode(LP list?列表,?int?PosData)
{
//創建兩個移動指針:找到指定位置和指定位置的前面。
LPLIST?frontNode?=?列表;
//front node-& gt;Next==taiNode:判斷鄰接
LPLIST?tailNode?=?列表-& gt;接下來;
//判斷是否為空。
什麽時候?(tail node->;數據?!=?PosData)
{
/*
front node = front node-& gt;接下來;
tail node = tail node-& gt;接下來;
*/
frontNode?=?tailNode
tailNode?=?front node-& gt;接下來;
如果?(tailNode?==?nullptr)
{
Printf("找不到指定的位置\ n ");
系統(“暫停”);
退出(0);
}
}
front node-& gt;下壹個?=?tail node-& gt;接下來;
free(tail node);
}
int?主()
{
LPLIST?列表?=?create list();//列表創建成功。
printf(" insert:\ n ");
InsertListHeadNode(列表,1);
InsertListHeadNode(列表,2);
InsertListHeadNode(列表,3);
InsertListTailNode(列表,0);
PrintList(列表);
printf(" Delete:\ n ");
DeleteListHeadNode(列表);
PrintList(列表);
DeleteListTailNode(列表);
PrintList(列表);
Printf("指定位置:\ n ");
//不懂可以問群主。
InsertListAppoinNode(列表,4,?2);
InsertListAppoinNode(列表,3,?2);
//C/C++?第八組
PrintList(列表);
//?491994603
DeleteListAppoinNode(列表,2);
PrintList(列表);
系統(“暫停”);
回歸?0;
}要在壹個空的順序線性表中存儲壹系列數據元素,我用過多種插入方法,但對於妳來說,妳只需要其中壹種,循環插入即可。