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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

第十天2017/04/23(1、企业财富库:“循环单链表”的设计与实现)

發(fā)布時間:2025/3/21 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第十天2017/04/23(1、企业财富库:“循环单链表”的设计与实现) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

循環(huán)單鏈表


循環(huán)單鏈表的插入操作(分為四種情況,歸結(jié)為三類)

循環(huán)單鏈表的刪除操作(分為四種情況,歸結(jié)為三類)

//circlelist.h函數(shù)的聲明 #ifndef _CIRCLELIST_H_ #define _CIRCLELIST_H_typedef void CircleList; /* typedef struct _tag_CircleListNode CircleListNode; struct _tag_CircleListNode {CircleListNode* next; }; */ typedef struct _tag_CircleListNode {struct _tag_CircleListNode * next; }CircleListNode;CircleList* CircleList_Create(); void CircleList_Destroy(CircleList* list); void CircleList_Clear(CircleList* list); int CircleList_Length(CircleList* list); CircleListNode* CircleList_Get(CircleList* list, int pos); int CircleList_Insert(CircleList* list, CircleListNode* node, int pos); CircleListNode* CircleList_Delete(CircleList* list, int pos);//addCircleListNode* CircleList_DeleteNode(CircleList* list, CircleListNode* node); CircleListNode* CircleList_Reset(CircleList* list); CircleListNode* CircleList_Current(CircleList* list); CircleListNode* CircleList_Next(CircleList* list);#endif=============================================================================== //circlelist.cpp函數(shù)的實現(xiàn) #include <stdio.h> #include <malloc.h> #include "CircleList.h"typedef struct _tag_CircleList {CircleListNode header; //頭結(jié)點CircleListNode* slider; //游標int length; //長度 } TCircleList;CircleList* CircleList_Create() // O(1) {TCircleList* ret = (TCircleList*)malloc(sizeof(TCircleList));if (ret == NULL){return NULL;}ret->length = 0;ret->header.next = NULL;ret->slider = NULL;return ret; }void CircleList_Destroy(CircleList* list) // O(1) {if (list == NULL){return ;}free(list); }void CircleList_Clear(CircleList* list) // O(1) {TCircleList* sList = (TCircleList*)list;if (sList == NULL){return ;}sList->length = 0;sList->header.next = NULL;sList->slider = NULL; }int CircleList_Length(CircleList* list) // O(1) {TCircleList* sList = (TCircleList*)list;int ret = -1;if (list == NULL) {return ret;}ret = sList->length;return ret; }CircleListNode* CircleList_Get(CircleList* list, int pos) // O(n) {TCircleList* sList = (TCircleList*)list;CircleListNode* ret = NULL;int i = 0;if (list==NULL || pos<0){return NULL;}//if( (sList != NULL) && (pos >= 0) && (sList->length > 0) )//因為是循環(huán)鏈表,所以長度判斷不需要了{CircleListNode* current = (CircleListNode*)sList;for(i=0; i<pos; i++){current = current->next;}ret = current->next;}return ret; }/* 在循環(huán)鏈表中插入結(jié)點(分為圖示的4種情況): 總結(jié):①、②、③、④這四種情況的前兩步代碼是一樣的,只不過②、④兩個情況多了一步代碼 ①、③:根據(jù)圖示,這兩種情況是一種情況 ②、④:這兩種情況都是在 “ pos = 0 ” 的位置插入元素,但是有一點點的不同②:④:與②進行對比,④需要找到最后一個結(jié)點的位置,使它指向插入的新結(jié)點 */ int CircleList_Insert(CircleList* list, CircleListNode* node, int pos) // O(n) { int ret = 0, i=0; TCircleList* sList = (TCircleList*)list;if (list == NULL || node== NULL || pos<0){return -1;}CircleListNode* current = (CircleListNode*)sList;for(i=0; (i<pos) && (current->next != NULL); i++)//定位current{current = current->next;}//case①②③④:執(zhí)行代碼第1、2步node->next = current->next; //1current->next = node; //2//case③:if(鏈表是空表,只有頭結(jié)點,沒有其他結(jié)點)if( sList->length == 0 ){node->next = node; //代碼第3步sList->slider = node;}sList->length++; //注:必須在此處長度++,因為此時已經(jīng)在pos=0處插入了結(jié)點,所以長度+1//case④:if(鏈表除了頭結(jié)點外,還有其他結(jié)點)if(sList->length > 0)// 若鏈表有其他結(jié)點,且插入位置 pos = 0。 {if( current == (CircleListNode*)sList )//if(pos == 0) //if(插入位置是pos=0){CircleListNode* last = CircleList_Get(sList, sList->length - 1); //獲取最后一個元素last->next = current->next; //代碼第3步}}return ret; }/* 在循環(huán)鏈表中刪除結(jié)點(分為圖示的4種情況): 總結(jié):①、②、③、④這四種情況的前一步代碼是一樣的,只不過③、④兩個情況多了一步代碼 ①、②:根據(jù)圖示,這兩種情況是一種情況 ③、④:這兩種情況都是在 “ pos = 0 ” 的位置刪除元素,但是有一點點的不同 ---------------------------------------------------------------------------③:除了頭結(jié)點外,只有一個鏈表結(jié)點④:與③進行對比,④需要找到最后一個結(jié)點的位置,使它指向被刪除結(jié)點的后繼 */ CircleListNode* CircleList_Delete(CircleList* list, int pos) // O(n) {CircleListNode* ret = NULL;TCircleList* cList = (TCircleList*)list;CircleListNode* current = &cList->header;for(int i=0;i<pos;i++){current = current->next; //待刪結(jié)點的前驅(qū)}if(current == &cList->header) //如果刪除位置:pos = 0{if(cList->length == 1) //case③:如果只有一個鏈表結(jié)點{ret = current->next;current->next = NULL;cList->length = 0;cList->slider = NULL;return ret;}else if(cList->length > 1) //case④:如果不止一個鏈表結(jié)點{CircleListNode* ret = current->next;CircleListNode* last = CircleList_Get(list,CircleList_Length(list)-1);current->next = current->next->next;last->next = current->next;cList->length--;//若刪除的元素為游標所指的元素if( cList->slider == ret ){cList->slider = ret->next;}return ret;}}//如果刪除位置:pos!= 0ret = current->next;current->next = current->next->next;cList->length--;//若刪除的元素為游標所指的元素if( cList->slider == ret ){cList->slider = ret->next;}return ret; }CircleListNode* CircleList_DeleteNode(CircleList* list, CircleListNode* node) // O(n) {TCircleList* sList = (TCircleList*)list;CircleListNode* ret = NULL;int i = 0;if( sList != NULL ){CircleListNode* current = (CircleListNode*)sList;//查找node在循環(huán)鏈表中的位置ifor(i=0; i<sList->length; i++){if( current->next == node ){ret = current->next;break;}current = current->next;}//如果ret找到,根據(jù)i去刪除 if( ret != NULL ){CircleList_Delete(sList, i);}}return ret; }CircleListNode* CircleList_Reset(CircleList* list) // O(1) {TCircleList* sList = (TCircleList*)list;CircleListNode* ret = NULL;if( sList != NULL ){sList->slider = sList->header.next;ret = sList->slider;}return ret; }CircleListNode* CircleList_Current(CircleList* list) // O(1) {TCircleList* sList = (TCircleList*)list;CircleListNode* ret = NULL;if( sList != NULL ){ret = sList->slider;}return ret; }CircleListNode* CircleList_Next(CircleList* list) // O(1) {TCircleList* sList = (TCircleList*)list;CircleListNode* ret = NULL;if( (sList != NULL) && (sList->slider != NULL) ){ret = sList->slider;sList->slider = ret->next;}return ret; } ====================================================================================== //main.cpp測試代碼 #include <stdio.h> #include <stdlib.h> #include "CircleList.h"struct Value {CircleListNode header; //Linux內(nèi)核int v; };void print_1(CircleList* list) {for(int i=0; i<CircleList_Length(list); i++){CircleListNode* p = CircleList_Get(list,i);struct Value *q = (struct Value*)p;printf("%d\n",q->v);} }void print_2(CircleList* list) {CircleList_Reset(list);//重置游標位置為pos=0for(int i=0; i<CircleList_Length(list); i++){struct Value* pv = (struct Value*)CircleList_Next(list);//用游標進行遍歷printf("%d\n", pv->v);} } void main() {CircleList* list = CircleList_Create();struct Value v1, v2, v3, v4, v5, v6, v7, v8;v1.v = 1; v2.v = 2; v3.v = 3; v4.v = 4; v5.v = 5; v6.v = 6; v7.v = 7; v8.v = 8; //插入數(shù)據(jù)CircleList_Insert(list, (CircleListNode*)&v1, 0); //1CircleList_Insert(list, (CircleListNode*)&v2, 1); //2CircleList_Insert(list, (CircleListNode*)&v3, 2); //3CircleList_Insert(list, (CircleListNode*)&v4, 3); //4CircleList_Insert(list, (CircleListNode*)&v5, 0); //5CircleList_Insert(list, (CircleListNode*)&v6, 0); //6CircleList_Insert(list, (CircleListNode*)&v7, CircleList_Length(list)); //7CircleList_Insert(list, (CircleListNode*)&v8, 0); //8print_1(list);printf("\n"); //刪除數(shù)據(jù)CircleList_Delete(list,0);CircleList_Delete(list,3);CircleList_Delete(list,CircleList_Length(list));print_2(list);printf("\n"); //銷毀鏈表CircleList_Destroy(list);system("pause");return ; }

總結(jié)

以上是生活随笔為你收集整理的第十天2017/04/23(1、企业财富库:“循环单链表”的设计与实现)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 91久久久久久 | 亚洲av无码乱码国产精品久久 | 日韩福利电影在线 | 午夜婷婷在线观看 | 丁香五香天堂网 | 国产精九九网站漫画 | 日本视频在线免费观看 | av日日操| 久久看视频 | 国产精品丝袜在线观看 | 国产精品99久久 | 日日碰狠狠添天天爽 | 99热精品国产| 69精品无码成人久久久久久 | 欧美精品久久久久久久 | 91超薄肉色丝袜交足高跟凉鞋 | 日韩三级在线免费观看 | 日韩va亚洲va欧美va久久 | 91免费在线视频 | av解说在线观看 | 新91在线 | 看片一区二区 | 黄频在线免费观看 | 国产免费激情视频 | videos亚洲 | 韩国黄色精品 | 日韩在线二区 | 国产av天堂无码一区二区三区 | 国产伦精品一区二区三区 | 四虎影像| www.伊人.com | 天天曰| 91美女视频在线观看 | 三上悠亚一区二区 | 天堂av资源在线观看 | 涩里番在线观看 | 波多野av在线 | 欧美天堂在线视频 | 国产肉体xxxx裸体784大胆 | 在线超碰 | 熟妇高潮一区二区高潮 | 久久久免费高清视频 | 久一在线视频 | 老司机激情视频 | 色99色| 黄色特级大片 | 99在线观看免费视频 | 国产精品美女一区二区三区 | 国产福利在线观看视频 | 日韩伊人久久 | 亚洲网站免费观看 | 欧美 变态 另类 人妖 | 国产精品视频99 | 一区二区三区激情 | 国产精品区在线观看 | 国产色| 亚洲美女综合 | 国产第一页在线播放 | 国产无套在线观看 | 亚洲成人婷婷 | 一区二区精品视频在线观看 | 国产婷婷色综合av蜜臀av | 国产亚洲毛片 | 国产精品久久不卡 | 天堂激情网 | 怡红院一区二区 | 久久精品无码一区二区三区毛片 | 欧美不卡一二三 | 久久视频在线 | 超碰精品在线 | 欧美成人一级片 | av中文一区| 国产校园春色 | 毛片网站在线播放 | 精品乱码一区二区三区 | 青青草免费观看 | 亚洲高清在线视频 | 日韩手机视频 | 国产无码精品在线观看 | 亚洲男人的天堂av | 国产主播中文字幕 | 久久理论电影 | 麻豆视频官网 | 自拍偷拍国产精品 | 国产亲伦免费视频播放 | 在线超碰av | 99综合网 | 久久久久综合网 | 91麻豆精品国产91久久久更新时间 | 91嫩草香蕉 | 日批视频免费 | av成人免费 | 欧美天天色| 欧美日韩一区二区三区69堂 | 成人欧美在线视频 | 久久久久婷 | 亚洲综合久久久 | 午夜一区二区三区 | 国产精品美女自拍视频 |