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

首頁 > 編程 > C > 正文

C語言之復雜鏈表的復制方法(圖示詳解)

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

什么是復雜鏈表?

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

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

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;}

程序的運行結果如下圖:

以上這篇C語言之復雜鏈表的復制方法(圖示詳解)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林網。

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

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲欧美精品suv| 国产精品99久久久久久久久| 国产欧美日韩精品丝袜高跟鞋| 久久精品国产欧美亚洲人人爽| 日韩视频免费中文字幕| 亚洲国产精品人人爽夜夜爽| 日韩av电影手机在线观看| 国产精品视频区| 日韩高清不卡av| 4438全国亚洲精品在线观看视频| 久久久久久久成人| 国产一区二区视频在线观看| 91社区国产高清| 不用播放器成人网| 久久久精品久久久| 欧美巨大黑人极品精男| 日韩国产高清污视频在线观看| 日韩欧美大尺度| 亚洲国产精品一区二区久| 国产精品av网站| 国产精品xxxxx| 91干在线观看| 中文字幕日韩综合av| 亚洲一区二区自拍| 亚洲一区二区久久久久久| 国产精品极品在线| 亚洲最大的网站| 98精品国产高清在线xxxx天堂| 久久精品电影一区二区| 日韩在线视频线视频免费网站| 欧美国产亚洲视频| 性欧美xxxx视频在线观看| 欧美性猛交xxxx免费看久久久| 亚洲第一网站免费视频| 日韩视频在线观看免费| 久久影视三级福利片| 97久久久久久| 国产成人91久久精品| 高清一区二区三区日本久| 亚洲一二在线观看| 国产亚洲欧洲高清| 国产精品成人v| 亚洲第一页在线| 日韩在线一区二区三区免费视频| 亚洲香蕉av在线一区二区三区| 国产玖玖精品视频| 日韩极品精品视频免费观看| 精品国内产的精品视频在线观看| 亚洲精品第一页| 日韩一区二区在线视频| 亚洲社区在线观看| 欧美午夜片欧美片在线观看| 色偷偷88888欧美精品久久久| 黄色精品在线看| 亚洲毛片一区二区| 国产成人av在线| 日韩成人中文字幕| 欧美限制级电影在线观看| 国产精品jvid在线观看蜜臀| 久久99精品视频一区97| 日韩免费在线电影| 久久视频在线观看免费| 亚洲美女视频网站| 欧美激情在线观看视频| 激情成人中文字幕| 欧美成人手机在线| 国产精品自拍偷拍| 夜夜嗨av一区二区三区四区| 97婷婷大伊香蕉精品视频| 国产精品久久久久福利| 日韩av男人的天堂| 91手机视频在线观看| 3344国产精品免费看| 亚洲韩国日本中文字幕| 中文字幕亚洲二区| 日韩美女免费观看| 国产欧美va欧美va香蕉在| 欧美性感美女h网站在线观看免费| 欧美一性一乱一交一视频| 一本色道久久综合狠狠躁篇怎么玩| 日韩在线视频二区| 欧美性猛交99久久久久99按摩| 欧洲成人免费视频| 日韩精品丝袜在线| 26uuu亚洲伊人春色| 久久国产精品首页| 97婷婷大伊香蕉精品视频| 综合136福利视频在线| 97精品欧美一区二区三区| 欧美乱人伦中文字幕在线| 欧美插天视频在线播放| 色无极亚洲影院| 激情亚洲一区二区三区四区| 在线精品视频视频中文字幕| 日韩电影中文字幕在线观看| 国产福利成人在线| 91精品国产高清久久久久久91| 国产精品亚发布| 久久久久久有精品国产| 成人自拍性视频| 国产91精品久久久久久久| 国产精品在线看| 久久久久国产精品免费网站| 亚洲人高潮女人毛茸茸| 中文日韩在线观看| 色婷婷久久av| 国产精品网站大全| 色午夜这里只有精品| 亚洲自拍偷拍一区| 午夜精品久久久久久久久久久久久| 国产精品女视频| 性欧美在线看片a免费观看| 久久精品国产69国产精品亚洲| 亚洲xxxx在线| 欧美一区二区三区精品电影| 欧美激情区在线播放| 96pao国产成视频永久免费| 亚洲香蕉av在线一区二区三区| 日韩精品免费一线在线观看| 日本久久久久久久| 欧美巨大黑人极品精男| 97婷婷涩涩精品一区| 亚洲国产精久久久久久久| 成人a视频在线观看| 不卡av电影院| 欧美另类交人妖| 色一情一乱一区二区| 亚洲欧洲偷拍精品| 久久久久久久香蕉网| 91久久精品视频| 国产精品久久综合av爱欲tv| 性色av一区二区三区免费| 国产精品直播网红| 国产一区深夜福利| 欧美日韩另类在线| 91精品国产91久久久久久| 久久99热精品这里久久精品| 国产97在线观看| 欧美做爰性生交视频| 国产精品香蕉国产| 日本精品视频在线观看| 亚洲欧美激情另类校园| 日韩中文字幕欧美| 欧美一区第一页| 亚洲精品99999| 久久精品成人欧美大片古装| 亚洲欧美日韩直播| 成人免费观看网址| 欧美噜噜久久久xxx| 亚洲人成网站免费播放| 国产亚洲在线播放| 中文字幕亚洲精品| 国产成人精品在线视频| 国模吧一区二区三区| 91a在线视频| 国产精品久久久久不卡| 亚洲国产成人精品一区二区| 欧美中文字幕视频在线观看| 韩国v欧美v日本v亚洲| 精品久久久久久中文字幕大豆网| 久久成人综合视频| 日韩中文字在线| 欧美性猛交99久久久久99按摩| 最近2019年好看中文字幕视频|