日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

无空头链表详解(增删改查)

發(fā)布時(shí)間:2025/3/12 编程问答 71 豆豆
生活随笔 收集整理的這篇文章主要介紹了 无空头链表详解(增删改查) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
#include <stdio.h> #include <stdlib.h>//節(jié)點(diǎn)結(jié)構(gòu)體 struct Node {int a;struct Node *pNext; } ;//鏈表的頭尾指針 struct Node *g_pHead=NULL; struct Node *g_pEnd=NULL; //鏈表清空 需要遍歷 void qingkong() ; //創(chuàng)建鏈表,在鏈表中增加一個(gè)數(shù)據(jù)(頭添加) void Add(int a); //遍歷鏈表,查,查指定的 void chakan() ; //查詢指定節(jié)點(diǎn) struct Node *SelectNode(int a); //指定位置插入節(jié)點(diǎn) void charu(int index,int a);//頭添加+頭刪除=棧//頭添加+ 尾刪除 或者:尾添加+頭刪除 =隊(duì)列//頭刪除 void shanchutou(); //尾刪除 void shanchuwei(); //刪除指定節(jié)點(diǎn) void ShanChuZhiding(int a);int main() {int a[]={1,2,3};//數(shù)組傳進(jìn)鏈表 int i=0;for(i=0;i<3;i++){Add(a[i]);}chakan() ;//遍歷 charu(1,5);//在1的后面添加5 //查找指定的struct Node *pFind=SelectNode(3) ;if(pFind!=NULL) //找到了{(lán)printf("%d\n",pFind->a );} elseprintf("沒有查找到相應(yīng)數(shù)據(jù)");printf("\n"); chakan() ;//遍歷 printf("\n"); shanchutou();//刪除頭 chakan() ;//遍歷 printf("\n"); shanchuwei();chakan() ;//遍歷 printf("\n"); ShanChuZhiding(2);//刪除2 chakan() ;//遍歷 qingkong(); system("pause");return 0; }//鏈表清空 需要遍歷 void qingkong() {struct Node *pTemp=g_pHead;//定義一個(gè) pTemp指針指向開頭 while(pTemp!=NULL){struct Node *pt=pTemp;//不可以free(pTemp) pTemp=pTemp->pNext;free(pt); //先定義一個(gè)指針去記錄 pTemp再釋放 g_pHead=NULL;g_pEnd=NULL;//頭尾清空 } }//創(chuàng)建鏈表,在鏈表中增加一個(gè)數(shù)據(jù)(頭添加) void Add(int a) {struct Node *pTemp=(struct Node *)malloc(sizeof(struct Node));pTemp->a=a;pTemp->pNext=NULL;//必須 if(g_pHead==NULL){g_pHead=pTemp;g_pEnd=pTemp;}else{pTemp->pNext=g_pHead;g_pHead=pTemp;} }//遍歷鏈表,查,查指定的 void chakan() {struct Node *pTemp=g_pHead;//定義一個(gè) pTemp指針指向開頭 while(pTemp!=NULL){printf("%d\n",pTemp->a ); pTemp=pTemp->pNext;} }//查詢指定節(jié)點(diǎn) struct Node *SelectNode(int a) {struct Node *pTemp=g_pHead;//定義一個(gè) pTemp指針指向開頭 while(pTemp!=NULL){if(pTemp->a==a){return pTemp;}pTemp=pTemp->pNext;}return NULL; //沒找到 }//指定位置插入節(jié)點(diǎn) void charu(int index,int a) {if(NULL==g_pHead){printf("鏈表沒有節(jié)點(diǎn)"); return ; }//找位置struct Node *pt= SelectNode(index);if(pt==NULL){printf("沒有指定節(jié)點(diǎn)/n");}//有節(jié)點(diǎn),給a創(chuàng)建節(jié)點(diǎn) struct Node *pTemp=(struct Node *)malloc(sizeof(struct Node));pTemp->a=a;pTemp->pNext=NULL; //連接鏈表if(pt==g_pEnd){g_pEnd->pNext=pTemp;//尾巴最后一個(gè)指向新節(jié)點(diǎn) g_pEnd=pTemp;//新節(jié)點(diǎn)最后一個(gè)變成尾巴 } else{pTemp->pNext=pt->pNext;//先連pt->pNext=pTemp;} }//頭刪除 void shanchutou() {if(NULL==g_pHead){printf("鏈表為空\n");}struct Node *pTemp=g_pHead;//記錄舊的頭g_pHead=g_pHead->pNext;//頭的下一個(gè)變成新的頭 free(pTemp); }//尾刪除 void shanchuwei() {if(NULL==g_pHead){printf("鏈表為空\n");}//鏈表不為空//鏈表有1個(gè)節(jié)點(diǎn) if(g_pHead==g_pEnd){free(g_pHead);g_pHead=NULL;g_pEnd=NULL;} else //多個(gè)節(jié)點(diǎn) {//找到尾巴前一個(gè)節(jié)點(diǎn) struct Node *pTemp=g_pHead;while(pTemp->pNext!=g_pEnd) {pTemp=pTemp->pNext;}//找到了后:1:釋放 free(g_pEnd);g_pEnd=pTemp; //2尾巴下移g_pEnd->pNext=NULL; //3尾巴的下一條指針賦值為空 } }//刪除指定節(jié)點(diǎn) void ShanChuZhiding(int a) {//鏈表判斷if(NULL==g_pHead){printf("鏈表為空\n");return ;}//鏈表有東西 找節(jié)點(diǎn)struct Node *pTemp=SelectNode(a); if(NULL==pTemp){printf("沒有節(jié)點(diǎn)\n");return ;}//找到了//只有一個(gè)節(jié)點(diǎn)if(g_pHead==g_pEnd){shanchutou();}//兩個(gè)節(jié)點(diǎn)else if(g_pHead->pNext==g_pEnd){if(g_pHead==pTemp){shanchutou();}else{shanchuwei();}}//多個(gè)節(jié)點(diǎn) else{if(g_pHead==pTemp){shanchutou();}else if(g_pEnd==pTemp){shanchuwei();}else{//找到刪除節(jié)點(diǎn)的前一個(gè)節(jié)點(diǎn)struct Node *pT=g_pHead;while(pT->pNext!=pTemp){pT=pT->pNext;}//找到了//連接pT->pNext=pTemp->pNext;free(pTemp);//釋放 }}}

運(yùn)行結(jié)果:

總結(jié)

以上是生活随笔為你收集整理的无空头链表详解(增删改查)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。