最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

【C語言數(shù)據(jù)結(jié)構(gòu)】循環(huán)單鏈表

2021-08-20 11:15 作者:Vecloud_  | 我要投稿


CircleLinkList.h?
#ifndefCIRCLE_LINK_LIST#defineCIRCLE_LINK_LIST//鏈表節(jié)點typedefstruct_CircleLinkListNode{struct_CircleLinkListNode*next;}CircleLinkListNode;//循環(huán)單鏈表typedefvoidCircleLinkList;/**創(chuàng)建循環(huán)單鏈表*@return返回循環(huán)單鏈表的指針*/CircleLinkList*CircleLinkList_Create();/**銷毀循環(huán)單鏈表*@paramlist循環(huán)單鏈表的指針*/voidCircleLinkList_Destroy(CircleLinkList*list);/**清空循環(huán)單鏈表*@paramlist循環(huán)單鏈表的指針*/voidCircleLinkList_Clear(CircleLinkList*list);/**向循環(huán)單鏈表pos位置處插入元素*@paramlist循環(huán)單鏈表指針*@paramnode元素指針*@parampos插入的索引*/intCircleLinkList_Insert(CircleLinkList*list,CircleLinkListNode*node,intpos);/**獲取循環(huán)單鏈表中索引位置處的元素*@paramlist循環(huán)單鏈表指針*@parampos循環(huán)單鏈表索引值*@paramreturn元素指針*/CircleLinkListNode*CircleLinkList_Get(CircleLinkList*list,intpos);/**刪除循環(huán)單鏈表中索引位置處的值*@paramlist循環(huán)單鏈表的指針*@parampos循環(huán)單鏈表索引*@paramreturn非0表示刪除成功*/intCircleLinkList_Remove(CircleLinkList*list,intpos);/**獲取循環(huán)單鏈表當(dāng)前已存儲元素的個數(shù)*@paramlist循環(huán)單鏈表的指針*@return循環(huán)單鏈表中已存儲元素的個數(shù)*/intCircleLinkList_Length(CircleLinkList*list);/**刪除循環(huán)單鏈表中的特定元素*@paramlist循環(huán)單鏈表的指針*@parampos循環(huán)單鏈表元素指針*@paramreturn非0表示刪除成功*/intCircleLinkList_DeleteNode(CircleLinkList*list,CircleLinkListNode*node);/**重置循環(huán)單鏈表中的游標,指向表頭*@paramlist循環(huán)單鏈表的指針*@return返回游標指向的元素的指針*/CircleLinkListNode*CircleLinkList_Reset(CircleLinkList*list);/**獲取當(dāng)前游標指向的元素指針*@paramlist循環(huán)單鏈表的指針*@return返回當(dāng)前游標指向的元素指針*/CircleLinkListNode*CircleLinkList_Current(CircleLinkList*list);/**移動當(dāng)前游標到下一個元素*@paramlist循環(huán)單鏈表的指針*@return移動后的游標指向的元素的指針*/CircleLinkListNode*CircleLinkList_Next(CircleLinkList*list);#endif//CIRCLECircleLinkListCircleLinkList.c?
#include"Circlelinklist.h"#include<malloc.h>//循環(huán)單鏈表typedefstruct_CircleLinkList{CircleLinkListNodeheader;//鏈表頭節(jié)點CircleLinkListNode*cursor;//游標intlength;//鏈表長度}TCircleLinkList;/**創(chuàng)建循環(huán)單鏈表*@return返回循環(huán)單鏈表的指針*/CircleLinkList*CircleLinkList_Create(){TCircleLinkList*list=(TCircleLinkList*)malloc(sizeof(TCircleLinkList));if(list!=0){list->header.next=0;list->length=0;}returnlist;}/**銷毀循環(huán)單鏈表*@paramlist循環(huán)單鏈表的指針*/voidCircleLinkList_Destroy(CircleLinkList*list){free(list);}/**清空循環(huán)單鏈表*@paramlist循環(huán)單鏈表的指針*/voidCircleLinkList_Clear(CircleLinkList*list){if(list!=0){TCircleLinkList*c_list=(TCircleLinkList*)c_list;c_list->header.next=0;c_list->length=0;c_list->cursor=0;}}/**向循環(huán)單鏈表pos位置處插入元素*@paramlist循環(huán)單鏈表指針*@paramnode元素指針*@parampos插入的索引*/intCircleLinkList_Insert(CircleLinkList*list,CircleLinkListNode*node,intpos){//類型轉(zhuǎn)換TCircleLinkList*l_list=(TCircleLinkList*)list;//判斷鏈表指針和節(jié)點指針不能為空,當(dāng)前插入的位置是否合法intret=((list!=0)&&(node!=0)&&(pos>=0)&&(pos<=l_list->length));if(ret){CircleLinkListNode*current=(CircleLinkListNode*)l_list;inti;//移動到需要插入的位置的前驅(qū)for(i=0;i<pos;i++){current=current->next;}node->next=current->next;//被插入節(jié)點的后繼指針指向前驅(qū)節(jié)點的后繼指針current->next=node;//前驅(qū)節(jié)點的后繼指針指向被插入節(jié)點//如果插入的位置是0,則需要修改尾節(jié)點的后繼指針if(pos==0){current=l_list->header.next;for(i=0;i<l_list->length;i++){current=current->next;}current->next=node;//改變尾節(jié)點的指針//判斷插入是否是空表if(l_list->length==0){l_list->cursor=node;node->next=node;}}l_list->length++;}returnret;}/**獲取循環(huán)單鏈表中索引位置處的元素*@paramlist循環(huán)單鏈表指針*@parampos循環(huán)單鏈表索引值*@paramreturn元素指針*/CircleLinkListNode*CircleLinkList_Get(CircleLinkList*list,intpos){CircleLinkListNode*node=0;TCircleLinkList*l_list=(TCircleLinkList*)list;//判斷鏈表指針不為空,且獲取的索引合法if((l_list!=0)&&(pos>=0)){CircleLinkListNode*current=(CircleLinkListNode*)l_list;inti;for(i=0;i<pos;i++){current=current->next;}node=current->next;}returnnode;}/**刪除循環(huán)單鏈表中索引位置處的值*@paramlist循環(huán)單鏈表的指針*@parampos循環(huán)單鏈表索引*@paramreturn非0表示刪除成功*/intCircleLinkList_Remove(CircleLinkList*list,intpos){TCircleLinkList*l_list=(TCircleLinkList*)list;intret=((l_list!=0)&&(pos>=0)&&(pos<l_list->length));if(ret){CircleLinkListNode*current=(CircleLinkListNode*)list;CircleLinkListNode*first=l_list->header.next;CircleLinkListNode*last=(CircleLinkListNode*)CircleLinkList_Get(l_list,l_list->length-1);CircleLinkListNode*del;inti;for(i=0;i<pos;i++){current=current->next;}del=current->next;current->next=del->next;l_list->length--;if(first==del){l_list->header.next=del->next;last->next=del->next;}if(l_list->cursor==del){l_list->cursor=del->next;}if(l_list->length==0){l_list->header.next=0;l_list->cursor=0;}}returnret;}/**獲取循環(huán)單鏈表當(dāng)前已存儲元素的個數(shù)*@paramlist循環(huán)單鏈表的指針*@return循環(huán)單鏈表中已存儲元素的個數(shù)*/intCircleLinkList_Length(CircleLinkList*list){intret=-1;if(list!=0){TCircleLinkList*l_list=(TCircleLinkList*)list;ret=l_list->length;}returnret;}/**刪除循環(huán)單鏈表中的特定元素*@paramlist循環(huán)單鏈表的指針*@parampos循環(huán)單鏈表元素指針*@paramreturn被刪除元素的索引*/intCircleLinkList_DeleteNode(CircleLinkList*list,CircleLinkListNode*node){intret=-1;if((list!=0)&&(node!=0)){TCircleLinkList*l_list=(TCircleLinkList*)list;CircleLinkListNode*current=l_list->header.next;inti;for(i=0;i<l_list->length;i++){if(node==current){CircleLinkList_Remove(l_list,i);ret=i;break;}current=current->next;}}returnret;}/**重置循環(huán)單鏈表中的游標,指向表頭*@paramlist循環(huán)單鏈表的指針*@return返回游標指向的元素的指針*/CircleLinkListNode*CircleLinkList_Reset(CircleLinkList*list){CircleLinkListNode*node=0;if(list!=0){TCircleLinkList*l_list=(TCircleLinkList*)list;l_list->cursor=l_list->header.next;node=l_list->cursor;}returnnode;}/**獲取當(dāng)前游標指向的元素指針*@paramlist循環(huán)單鏈表的指針*@return返回當(dāng)前游標指向的元素指針*/CircleLinkListNode*CircleLinkList_Current(CircleLinkList*list){CircleLinkListNode*node=0;if(list!=0){TCircleLinkList*l_list=(TCircleLinkList*)list;node=l_list->cursor;}returnnode;}/**移動當(dāng)前游標到下一個元素*@paramlist循環(huán)單鏈表的指針*@return移動后的游標指向的元素的指針*/CircleLinkListNode*CircleLinkList_Next(CircleLinkList*list){CircleLinkListNode*node=0;if(list!=0){TCircleLinkList*l_list=(TCircleLinkList*)list;l_list->cursor=l_list->cursor->next;node=l_list->cursor;}returnnode;}測試代碼?
#include<stdio.h>#include"Circlelinklist.h"structValue{CircleLinkListNodenode;intval;};intmain(void){structValueval[5];inti;structValue*p;CircleLinkList*list=CircleLinkList_Create();for(i=0;i<5;i++){val[i].val=i;}for(i=0;i<5;i++){CircleLinkList_Insert(list,(CircleLinkListNode*)&(val[i]),0);}//CircleLinkList_DeleteNode(list,&(val[0]));for(i=0;i<6;i++){p=CircleLinkList_Get(list,i);printf("%d\n",p->val);CircleLinkList_Next(list);}CircleLinkList_Reset(list);p=CircleLinkList_Get(list,0);printf("%d\n",p->val);return0;}?

CircleLinkList.h?
#ifndefCIRCLE_LINK_LIST#defineCIRCLE_LINK_LIST//鏈表節(jié)點typedefstruct_CircleLinkListNode{struct_CircleLinkListNode*next;}CircleLinkListNode;//循環(huán)單鏈表typedefvoidCircleLinkList;/**創(chuàng)建循環(huán)單鏈表*@return返回循環(huán)單鏈表的指針*/CircleLinkList*CircleLinkList_Create();/**銷毀循環(huán)單鏈表*@paramlist循環(huán)單鏈表的指針*/voidCircleLinkList_Destroy(CircleLinkList*list);/**清空循環(huán)單鏈表*@paramlist循環(huán)單鏈表的指針*/voidCircleLinkList_Clear(CircleLinkList*list);/**向循環(huán)單鏈表pos位置處插入元素*@paramlist循環(huán)單鏈表指針*@paramnode元素指針*@parampos插入的索引*/intCircleLinkList_Insert(CircleLinkList*list,CircleLinkListNode*node,intpos);/**獲取循環(huán)單鏈表中索引位置處的元素*@paramlist循環(huán)單鏈表指針*@parampos循環(huán)單鏈表索引值*@paramreturn元素指針*/CircleLinkListNode*CircleLinkList_Get(CircleLinkList*list,intpos);/**刪除循環(huán)單鏈表中索引位置處的值*@paramlist循環(huán)單鏈表的指針*@parampos循環(huán)單鏈表索引*@paramreturn非0表示刪除成功*/intCircleLinkList_Remove(CircleLinkList*list,intpos);/**獲取循環(huán)單鏈表當(dāng)前已存儲元素的個數(shù)*@paramlist循環(huán)單鏈表的指針*@return循環(huán)單鏈表中已存儲元素的個數(shù)*/intCircleLinkList_Length(CircleLinkList*list);/**刪除循環(huán)單鏈表中的特定元素*@paramlist循環(huán)單鏈表的指針*@parampos循環(huán)單鏈表元素指針*@paramreturn非0表示刪除成功*/intCircleLinkList_DeleteNode(CircleLinkList*list,CircleLinkListNode*node);/**重置循環(huán)單鏈表中的游標,指向表頭*@paramlist循環(huán)單鏈表的指針*@return返回游標指向的元素的指針*/CircleLinkListNode*CircleLinkList_Reset(CircleLinkList*list);/**獲取當(dāng)前游標指向的元素指針*@paramlist循環(huán)單鏈表的指針*@return返回當(dāng)前游標指向的元素指針*/CircleLinkListNode*CircleLinkList_Current(CircleLinkList*list);/**移動當(dāng)前游標到下一個元素*@paramlist循環(huán)單鏈表的指針*@return移動后的游標指向的元素的指針*/CircleLinkListNode*CircleLinkList_Next(CircleLinkList*list);#endif//CIRCLECircleLinkListCircleLinkList.c?
#include"Circlelinklist.h"#include<malloc.h>//循環(huán)單鏈表typedefstruct_CircleLinkList{CircleLinkListNodeheader;//鏈表頭節(jié)點CircleLinkListNode*cursor;//游標intlength;//鏈表長度}TCircleLinkList;/**創(chuàng)建循環(huán)單鏈表*@return返回循環(huán)單鏈表的指針*/CircleLinkList*CircleLinkList_Create(){TCircleLinkList*list=(TCircleLinkList*)malloc(sizeof(TCircleLinkList));if(list!=0){list->header.next=0;list->length=0;}returnlist;}/**銷毀循環(huán)單鏈表*@paramlist循環(huán)單鏈表的指針*/voidCircleLinkList_Destroy(CircleLinkList*list){free(list);}/**清空循環(huán)單鏈表*@paramlist循環(huán)單鏈表的指針*/voidCircleLinkList_Clear(CircleLinkList*list){if(list!=0){TCircleLinkList*c_list=(TCircleLinkList*)c_list;c_list->header.next=0;c_list->length=0;c_list->cursor=0;}}/**向循環(huán)單鏈表pos位置處插入元素*@paramlist循環(huán)單鏈表指針*@paramnode元素指針*@parampos插入的索引*/intCircleLinkList_Insert(CircleLinkList*list,CircleLinkListNode*node,intpos){//類型轉(zhuǎn)換TCircleLinkList*l_list=(TCircleLinkList*)list;//判斷鏈表指針和節(jié)點指針不能為空,當(dāng)前插入的位置是否合法intret=((list!=0)&&(node!=0)&&(pos>=0)&&(pos<=l_list->length));if(ret){CircleLinkListNode*current=(CircleLinkListNode*)l_list;inti;//移動到需要插入的位置的前驅(qū)for(i=0;i<pos;i++){current=current->next;}node->next=current->next;//被插入節(jié)點的后繼指針指向前驅(qū)節(jié)點的后繼指針current->next=node;//前驅(qū)節(jié)點的后繼指針指向被插入節(jié)點//如果插入的位置是0,則需要修改尾節(jié)點的后繼指針if(pos==0){current=l_list->header.next;for(i=0;i<l_list->length;i++){current=current->next;}current->next=node;//改變尾節(jié)點的指針//判斷插入是否是空表if(l_list->length==0){l_list->cursor=node;node->next=node;}}l_list->length++;}returnret;}/**獲取循環(huán)單鏈表中索引位置處的元素*@paramlist循環(huán)單鏈表指針*@parampos循環(huán)單鏈表索引值*@paramreturn元素指針*/CircleLinkListNode*CircleLinkList_Get(CircleLinkList*list,intpos){CircleLinkListNode*node=0;TCircleLinkList*l_list=(TCircleLinkList*)list;//判斷鏈表指針不為空,且獲取的索引合法if((l_list!=0)&&(pos>=0)){CircleLinkListNode*current=(CircleLinkListNode*)l_list;inti;for(i=0;i<pos;i++){current=current->next;}node=current->next;}returnnode;}/**刪除循環(huán)單鏈表中索引位置處的值*@paramlist循環(huán)單鏈表的指針*@parampos循環(huán)單鏈表索引*@paramreturn非0表示刪除成功*/intCircleLinkList_Remove(CircleLinkList*list,intpos){TCircleLinkList*l_list=(TCircleLinkList*)list;intret=((l_list!=0)&&(pos>=0)&&(pos<l_list->length));if(ret){CircleLinkListNode*current=(CircleLinkListNode*)list;CircleLinkListNode*first=l_list->header.next;CircleLinkListNode*last=(CircleLinkListNode*)CircleLinkList_Get(l_list,l_list->length-1);CircleLinkListNode*del;inti;for(i=0;i<pos;i++){current=current->next;}del=current->next;current->next=del->next;l_list->length--;if(first==del){l_list->header.next=del->next;last->next=del->next;}if(l_list->cursor==del){l_list->cursor=del->next;}if(l_list->length==0){l_list->header.next=0;l_list->cursor=0;}}returnret;}/**獲取循環(huán)單鏈表當(dāng)前已存儲元素的個數(shù)*@paramlist循環(huán)單鏈表的指針*@return循環(huán)單鏈表中已存儲元素的個數(shù)*/intCircleLinkList_Length(CircleLinkList*list){intret=-1;if(list!=0){TCircleLinkList*l_list=(TCircleLinkList*)list;ret=l_list->length;}returnret;}/**刪除循環(huán)單鏈表中的特定元素*@paramlist循環(huán)單鏈表的指針*@parampos循環(huán)單鏈表元素指針*@paramreturn被刪除元素的索引*/intCircleLinkList_DeleteNode(CircleLinkList*list,CircleLinkListNode*node){intret=-1;if((list!=0)&&(node!=0)){TCircleLinkList*l_list=(TCircleLinkList*)list;CircleLinkListNode*current=l_list->header.next;inti;for(i=0;i<l_list->length;i++){if(node==current){CircleLinkList_Remove(l_list,i);ret=i;break;}current=current->next;}}returnret;}/**重置循環(huán)單鏈表中的游標,指向表頭*@paramlist循環(huán)單鏈表的指針*@return返回游標指向的元素的指針*/CircleLinkListNode*CircleLinkList_Reset(CircleLinkList*list){CircleLinkListNode*node=0;if(list!=0){TCircleLinkList*l_list=(TCircleLinkList*)list;l_list->cursor=l_list->header.next;node=l_list->cursor;}returnnode;}/**獲取當(dāng)前游標指向的元素指針*@paramlist循環(huán)單鏈表的指針*@return返回當(dāng)前游標指向的元素指針*/CircleLinkListNode*CircleLinkList_Current(CircleLinkList*list){CircleLinkListNode*node=0;if(list!=0){TCircleLinkList*l_list=(TCircleLinkList*)list;node=l_list->cursor;}returnnode;}/**移動當(dāng)前游標到下一個元素*@paramlist循環(huán)單鏈表的指針*@return移動后的游標指向的元素的指針*/CircleLinkListNode*CircleLinkList_Next(CircleLinkList*list){CircleLinkListNode*node=0;if(list!=0){TCircleLinkList*l_list=(TCircleLinkList*)list;l_list->cursor=l_list->cursor->next;node=l_list->cursor;}returnnode;}測試代碼?
#include<stdio.h>#include"Circlelinklist.h"structValue{CircleLinkListNodenode;intval;};intmain(void){structValueval[5];inti;structValue*p;CircleLinkList*list=CircleLinkList_Create();for(i=0;i<5;i++){val[i].val=i;}for(i=0;i<5;i++){CircleLinkList_Insert(list,(CircleLinkListNode*)&(val[i]),0);}//CircleLinkList_DeleteNode(list,&(val[0]));for(i=0;i<6;i++){p=CircleLinkList_Get(list,i);printf("%d\n",p->val);CircleLinkList_Next(list);}CircleLinkList_Reset(list);p=CircleLinkList_Get(list,0);printf("%d\n",p->val);return0;}?

了解更多網(wǎng)絡(luò)知識關(guān)注:http://www.vecloud.com/

【C語言數(shù)據(jù)結(jié)構(gòu)】循環(huán)單鏈表的評論 (共 條)

分享到微博請遵守國家法律
镇江市| 织金县| 沂水县| 泰州市| 烟台市| 威海市| 张北县| 阿瓦提县| 革吉县| 黄大仙区| 河津市| 望城县| 恩平市| 进贤县| 杭锦旗| 龙井市| 申扎县| 封开县| 济阳县| 辽宁省| 泗阳县| 灵武市| 濮阳市| 黄骅市| 古交市| 承德市| 长宁区| 南投市| 竹山县| 黔南| 炎陵县| 启东市| 新晃| 昌乐县| 商南县| 江源县| 九龙城区| 洛宁县| 麟游县| 海城市| 礼泉县|