亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

C語言之復雜鏈表的復制詳解

2020-01-26 14:02:24
字體:
來源:轉載
供稿:網友

什么是復雜鏈表?

復雜鏈表指的是一個鏈表有若干個結點,每個結點有一個數據域用于存放數據,還有兩個指針域,其中一個指向下一個節點,還有一個隨機指向當前復雜鏈表中的任意一個節點或者是一個空結點。今天我們要實現的就是對這樣一個復雜鏈表復制產生一個新的復雜鏈表。

復雜鏈表的數據結構如下:

typedef int DataType; //數據域的類型//復雜鏈表的數據結構typedef struct ComplexNode{DataType _data ;   // 數據struct ComplexNode * _next;  // 指向下個節點的指針struct ComplexNode * _random; // 指向隨機節點(可以是鏈表中的任意節點 or 空)}ComplexNode; 

上圖就是一個復雜鏈表的例子,那么我們應該如何實現復雜鏈表的復制呢?

1、首先我們應該根據已有的復雜鏈表創建一條新的復雜鏈表,但是這個新的復雜鏈表的所有的結點的random指針都指向空,這樣是很好實現的,相當于我們創建了一條簡單的單鏈表(newlist),我們要復制的鏈表不妨稱之為oldlist。

2、接下來我們應該把新創建的這條復雜鏈表(newlist)與已有的復雜鏈表(oldlist)合并成如下的形式:

在這種情況下我們已經把兩條復雜鏈表合并成了一條鏈表(稱之為linklist),通過對這條鏈表(linklist)的觀察,我們可以發現合并的鏈表(linklist)中屬于newlist的結點pnew的上一個結點pold(屬于oldlist的結點)的random指針所指向的結點的next指針就應該是pnew結點的randow指針所指向的結點。

這樣我們讓pold和pnew指針一直往后走最后就可以實現對所有屬于新創建的復雜鏈表(newlist)的random指針指向相應的結點的操作。構成的復雜鏈表如下圖

在完成以上的步驟之后我們所要做的工作就很簡單了,我們只要把這一條鏈表linklist分開成我們的newlist鏈表和oldlist鏈表就可以了。

這樣我們就完美的完成了復雜鏈表的復制工作下面就是具體實現的代碼:

頭文件complexnode.h:

#ifndef __COMPLEX__NODE__H__#define __COMPLEX__NODE__H__//包含頭文件#include <stdio.h>#include<stdlib.h>#include <assert.h>typedef int DataType; //數據域的類型//復雜鏈表的數據結構typedef struct ComplexNode{DataType _data ;    // 數據struct ComplexNode * _next;  // 指向下個節點的指針struct ComplexNode * _random; // 指向隨機節點(可以是鏈表中的任意節點 or 空)}ComplexNode; //創建一個復雜鏈表的結點ComplexNode * BuyComplexNode(DataType x);//打印復雜的單鏈表void Display(const ComplexNode * cplist);//復雜鏈表的復制ComplexNode * CopyComplexNode(ComplexNode * cplist); #endif//__COMPLEX__NODE__H__

具體功能實現complexnode.c

#include "complexnode.h" //創建一個復雜鏈表的結點ComplexNode * BuyComplexNode(DataType x){ComplexNode *cnode = (ComplexNode *)malloc(sizeof(ComplexNode));if(cnode == NULL)//創建失敗{perror("BuyComplexNode()::malloc");return NULL;}//創建成功cnode->_data = x;cnode->_next = NULL;cnode->_random = NULL;return cnode;} //打印復雜的單鏈表void Display(const ComplexNode * cplist){ComplexNode *pnode = cplist;while (pnode){printf("%d::%d -->",pnode->_data,pnode->_random->_data);pnode = pnode->_next;}printf("over/n");}//復雜鏈表的復制ComplexNode * CopyComplexNode(ComplexNode * cplist){ComplexNode * pold = NULL;ComplexNode * pnew = NULL;ComplexNode * newlist = NULL;//指向新的復雜鏈表的頭結點的指針pold = cplist;//創建一條新的復雜鏈表while(pold != NULL){ComplexNode * new_node = BuyComplexNode(pold->_data);if(newlist == NULL)//當新的復雜鏈表中沒有結點時{newlist = new_node;}else//當新的復雜鏈表有結點時{ComplexNode * node = newlist;while(node->_next != NULL)//找到最后一個結點{node = node->_next;}node->_next = new_node;//插入新的結點}pold = pold->_next; }//創建新的復雜鏈表結束 //合并兩條復雜鏈表pold = cplist;pnew = newlist;while (pold){ComplexNode * curold = NULL;ComplexNode * curnew = NULL;curold = pold->_next;curnew = pnew->_next;if(pold->_next == NULL){pold->_next = pnew;pold = curold;pnew = curnew;break;}pold->_next = pnew;pnew->_next = curold;pold = curold;pnew = curnew;}//合并兩條復雜鏈表結束 //讓新創建的那條復雜鏈表上的所有結點的random指針指向相應的結點pold = cplist;pnew = newlist;while (pnew){pnew->_random = pold->_random->_next;pold = pnew->_next;if(pold == NULL)//這是pnew的_next指針已經指向空{break;}pnew = pold->_next;}//結束 //分離合并后的復雜鏈表pold = cplist;pnew = newlist;while (pold){ComplexNode * curold = NULL;ComplexNode * curnew = NULL;if(pnew->_next == NULL)//已經分離完成{pold->_next = NULL;pnew->_next = NULL;break; }curold = pold->_next->_next;curnew = pnew->_next->_next; pold->_next = curold;pnew->_next = curnew;pold = curold;pnew = curnew;}//分離合并的復雜鏈表結束 return newlist;}測試代碼test.c:#include "complexnode.h"http:////復雜鏈表的復制。?個鏈表的每個節點,有?個指向next指針指向下?個節//點,還有?個random指針指向這個鏈表中的?個隨機節點或者NULL,現在要//求實現復制這個鏈表,返回復制后的新鏈表。//ps: 復雜鏈表的結構 void test(){ComplexNode * cplist;ComplexNode * copylist;ComplexNode * node1;ComplexNode * node2;ComplexNode * node3;ComplexNode * node4;cplist = BuyComplexNode(1);node1 = BuyComplexNode(2);node2 = BuyComplexNode(3);node3 = BuyComplexNode(4);node4 = BuyComplexNode(5);cplist->_next = node1;node1->_next = node2;node2->_next = node3;node3->_next = node4;cplist->_random = node3;node1->_random = node4;node2->_random = cplist;node3->_random = node1;node4->_random = node2;Display(cplist);copylist = CopyComplexNode(cplist);Display(copylist);}int main(){test();return 0;}

程序的運行結果如下圖:

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国内精品免费午夜毛片| 91精品啪aⅴ在线观看国产| 亚洲va国产va天堂va久久| 国产性色av一区二区| 亚洲精品suv精品一区二区| 欧美精品videosex极品1| 久久国产精品久久久久| 欧美国产精品人人做人人爱| 国产精品av网站| 日韩国产在线播放| 欧美黄色片在线观看| 91精品久久久久久久久不口人| 亚洲精品美女在线| 日韩在线视频中文字幕| 亚洲午夜av久久乱码| 日日噜噜噜夜夜爽亚洲精品| 欧美综合在线第二页| 成人久久精品视频| 亚洲第一天堂无码专区| 伊人伊成久久人综合网小说| 26uuu亚洲国产精品| 国产精品mp4| 久操成人在线视频| 亚洲一区亚洲二区亚洲三区| 成人深夜直播免费观看| 亚洲成人精品视频在线观看| 欧美高跟鞋交xxxxhd| 国产成人精品免费视频| 色综合视频一区中文字幕| 福利视频导航一区| 亚洲国产精彩中文乱码av在线播放| 亚洲美女黄色片| 97香蕉久久超级碰碰高清版| 欧美电影在线观看高清| 精品一区二区三区四区在线| 国产成人a亚洲精品| 欧美电影免费观看高清完整| 精品性高朝久久久久久久| 中文字幕日韩在线播放| 久久精品色欧美aⅴ一区二区| 亚洲人成啪啪网站| 欧美日韩国产综合新一区| 亚洲日韩欧美视频一区| 亚洲精品一区二区在线| 欧美乱大交做爰xxxⅹ性3| 亚洲精品不卡在线| 日韩亚洲欧美中文在线| 岛国精品视频在线播放| 久久综合网hezyo| 中文字幕亚洲第一| 亚洲一区精品电影| 国产精品美腿一区在线看| 91精品久久久久久久久久另类| 国产一区二区黑人欧美xxxx| 日韩欧美成人精品| 久久久久久av| 日韩精品免费在线| 久久久久久久久久久免费精品| 欧美日韩免费网站| 欧美华人在线视频| 久久久国产视频| 国产97免费视| 日韩欧美成人免费视频| 日本韩国欧美精品大片卡二| 亚洲国产私拍精品国模在线观看| 97av在线视频免费播放| 亚洲一区亚洲二区| 亚洲欧美国产视频| 精品国内亚洲在观看18黄| 国产成人在线视频| 在线成人激情黄色| 97视频在线观看播放| 精品成人在线视频| 久久久久久九九九| 日韩精品在线观看网站| 国产精品久久久久久久久久新婚| 欧美又大又硬又粗bbbbb| 日韩电影免费在线观看中文字幕| 日本免费一区二区三区视频观看| 国产精品一区二区三区在线播放| 欧洲亚洲免费视频| 最近2019年中文视频免费在线观看| 欧美日韩精品在线视频| 欧美中文字幕在线视频| 国产精品视频一区二区三区四| 成人黄色中文字幕| 不卡伊人av在线播放| 亚洲石原莉奈一区二区在线观看| 国产成人精品免费视频| 国产乱人伦真实精品视频| 韩国三级日本三级少妇99| 欧美在线中文字幕| 欧美性高跟鞋xxxxhd| 日韩亚洲精品视频| 久久精品成人一区二区三区| 不卡在线观看电视剧完整版| 日韩精品极品视频| 欧美国产日韩免费| 高清日韩电视剧大全免费播放在线观看| 久久精品视频播放| 亚洲欧美国产制服动漫| 欧美老女人bb| 亚洲欧洲免费视频| 91日本在线观看| 亚洲黄色片网站| 国产一区二区三区毛片| 日韩欧美在线一区| 欧美电影在线观看完整版| 91视频88av| 亚洲精品视频播放| 91影院在线免费观看视频| 久久久久久com| 亚洲第一色在线| 久久久久久久久爱| 久久人体大胆视频| 成人黄在线观看| 国产精品久久久久久久9999| 亚洲国产天堂久久综合网| 欧美午夜宅男影院在线观看| 国产精品人人做人人爽| 欧美俄罗斯乱妇| 日韩激情av在线播放| 亚洲欧洲在线观看| 亚洲一区二区三区四区在线播放| 日韩久久精品成人| 亚洲天堂开心观看| 欧美老女人www| 国产精品96久久久久久又黄又硬| 亚洲一区999| 亚洲国产精品一区二区三区| 日韩一区二区在线视频| 日韩av免费在线播放| 国产一区私人高清影院| 久久精品国产91精品亚洲| 亚洲女性裸体视频| 欧亚精品中文字幕| 国产精品视频99| 日韩av第一页| 国产午夜精品一区二区三区| 国产精品午夜一区二区欲梦| 国产女精品视频网站免费| 久久99国产综合精品女同| 伊人精品在线观看| 国产成人a亚洲精品| 久久久这里只有精品视频| 日韩高清电影好看的电视剧电影| 91久久国产综合久久91精品网站| 欧美精品亚州精品| 国产精品久久久一区| 91精品美女在线| 蜜臀久久99精品久久久久久宅男| 国产成人精彩在线视频九色| 成人国产精品日本在线| 亚洲free性xxxx护士白浆| 亚洲自拍高清视频网站| 久久精品一偷一偷国产| 亚洲精品免费网站| 欧美日韩国产一区二区| 精品久久久999| 5252色成人免费视频| 中文字幕无线精品亚洲乱码一区| 欧美老女人性视频| 成人伊人精品色xxxx视频| 97欧美精品一区二区三区|