国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C語言單向鏈表的增刪操作

這篇具有很好參考價值的文章主要介紹了C語言單向鏈表的增刪操作。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

// 指的是單向鏈表中的結(jié)點有效數(shù)據(jù)類型,用戶可以根據(jù)需要進(jìn)行修改
typedef int DataType_t;

// 構(gòu)造鏈表的結(jié)點,鏈表中所有結(jié)點的數(shù)據(jù)類型應(yīng)該是相同的
typedef struct LinkedList
{
? ? DataType_t data; ? ? ? ? // 結(jié)點的數(shù)據(jù)域
? ? struct LinkedList *next; // 結(jié)點的指針域

} LList_t;

// 創(chuàng)建一個空鏈表,空鏈表應(yīng)該有一個頭結(jié)點,對鏈表進(jìn)行初始化
LList_t *LList_Create(void)
{
? ? // 1.創(chuàng)建一個頭結(jié)點并對頭結(jié)點申請內(nèi)存
? ? LList_t *Head = (LList_t *)calloc(1, sizeof(LList_t));
? ? if (NULL == Head)
? ? {
? ? ? ? perror("Calloc memory for Head is Failed");
? ? ? ? exit(-1);
? ? }

? ? // 2.對頭結(jié)點進(jìn)行初始化,頭結(jié)點是不存儲有效內(nèi)容的?。?!
? ? Head->next = NULL;

? ? // 3.把頭結(jié)點的地址返回即可
? ? return Head;
}

// 創(chuàng)建新的結(jié)點,并對新結(jié)點進(jìn)行初始化(數(shù)據(jù)域 + 指針域)
LList_t *LList_NewNode(DataType_t data)
{
? ? // 1.創(chuàng)建一個新結(jié)點并對新結(jié)點申請內(nèi)存
? ? LList_t *New = (LList_t *)calloc(1, sizeof(LList_t));
? ? if (NULL == New)
? ? {
? ? ? ? perror("Calloc memory for NewNode is Failed");
? ? ? ? return NULL;
? ? }

? ? // 2.對新結(jié)點的數(shù)據(jù)域和指針域進(jìn)行初始化
? ? New->data = data;
? ? New->next = NULL;

? ? return New;
}

// 頭插
bool LList_HeadInsert(LList_t *Head, DataType_t data)
{
? ? // 1.創(chuàng)建新的結(jié)點,并對新結(jié)點進(jìn)行初始化
? ? LList_t *New = LList_NewNode(data);
? ? if (NULL == New)
? ? {
? ? ? ? printf("can not insert new node\n");
? ? ? ? return false;
? ? }

? ? // 2.判斷鏈表是否為空,如果為空,則直接插入即可
? ? if (NULL == Head->next)
? ? {
? ? ? ? Head->next = New;
? ? ? ? return true;
? ? }

? ? // 3.如果鏈表為非空,則把新結(jié)點插入到鏈表的頭部
? ? New->next = Head->next;
? ? Head->next = New;

? ? return true;
}

// 尾插
bool LList_TailInsert(LList_t *Head, DataType_t data)
{

? ? // 1.創(chuàng)建新的結(jié)點,并對新結(jié)點進(jìn)行初始化
? ? LList_t *New = LList_NewNode(data);
? ? if (NULL == New)
? ? {
? ? ? ? printf("can not insert new node\n");
? ? ? ? return false;
? ? }

? ? // 2.判斷鏈表是否為空,如果為空,則直接插入即可
? ? if (NULL == Head->next)
? ? {
? ? ? ? Head->next = New;
? ? ? ? return true;
? ? }

? ? // 3.如果鏈表為非空,則把新結(jié)點插入到鏈表的尾部
? ? LList_t *Last = Head;
? ? while (Last->next != NULL)
? ? {
? ? ? ? Last = Last->next;
? ? }
? ? New->next = NULL;
? ? Last->next = New;

? ? return true;
}

// 指定插
bool LList_DestInsert(LList_t *Head, DataType_t dest, DataType_t data)
{
? ? // 1.創(chuàng)建新的結(jié)點,并對新結(jié)點進(jìn)行初始化
? ? LList_t *New = LList_NewNode(data);
? ? if (NULL == New)
? ? {
? ? ? ? printf("can not insert new node\n");
? ? ? ? return false;
? ? }

? ? // 2.判斷鏈表是否為空,如果為空,則直接插入即可
? ? if (NULL == Head->next)
? ? {
? ? ? ? Head->next = New;
? ? ? ? return true;
? ? }

? ? // 3.如果鏈表為非空,則把新結(jié)點插入到鏈表的指定位置
? ? LList_t *Dest = Head;
? ? while (Dest->data != dest)
? ? {
? ? ? ? Dest = Dest->next;
? ? }
? ? New->next = Dest->next;
? ? Dest->next = New;

? ? return true;
}

// 頭刪
bool LList_HeadDel(LList_t *Head, DataType_t data)
{
? ? LList_t *Temp = Head->next;
? ? Head->next = Temp->next;
? ? free(Temp);

? ? return true;
}

// 尾刪
bool LList_TailDel(LList_t *Head, DataType_t data)
{
? ? LList_t *SecondLast = Head;
? ? while (SecondLast->next->next != NULL)
? ? {
? ? ? ? SecondLast = SecondLast->next;
? ? }
? ? free(SecondLast->next);
? ? SecondLast->next = NULL;

? ? return true;
}

// 指定刪
bool LList_DestDel(LList_t *Head, DataType_t dest, DataType_t data)
{
? ? LList_t *LDest = Head;
? ? while ((LDest->next)->data != dest)
? ? {
? ? ? ? LDest = LDest->next;
? ? }
? ? LDest->next = LDest->next->next;
? ? free(LDest->next);
? ? return true;
}

// 設(shè)計一個算法刪除單鏈表L(有頭結(jié)點)中的一個最小值結(jié)點
bool LList_MinDel(LList_t *Head, DataType_t data)
{
? ? LList_t *LDest = Head;
? ? LList_t *LMin = LDest;
? ? while (LDest->next != NULL)
? ? {
? ? ? ? if ((LDest->next)->data < (LMin->next)->data)
? ? ? ? {
? ? ? ? ? ? LMin->next = LDest->next;
? ? ? ? ? ? LMin = LDest;
? ? ? ? }
? ? ? ? LDest = LDest->next;
? ? ? ? LDest->next = LDest->next->next;
? ? }
? ? LMin->next = LMin->next->next;
? ? free(LMin->next);
? ? return true;
}

// 遍歷
void LList_Print(LList_t *Head)
{
? ? // 對鏈表的頭文件的地址進(jìn)行備份
? ? LList_t *Phead = Head;

? ? // 首結(jié)點
? ? while (Phead->next)
? ? {
? ? ? ? // 把頭的直接后繼作為新的頭結(jié)點
? ? ? ? Phead = Phead->next;

? ? ? ? // 輸出頭結(jié)點的直接后繼的數(shù)據(jù)域
? ? ? ? printf("data = %d\n", Phead->data);
? ? }
}

int main(int argc, char const *argv[])
{
? ? return 0;
}

文章來源地址http://www.zghlxwxcb.cn/news/detail-856295.html

到了這里,關(guān)于C語言單向鏈表的增刪操作的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包