CopyComplexList2

来源:互联网 发布:unid淘宝客 编辑:程序博客网 时间:2024/04/29 20:00
// CopyComplexList.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include <string.h>struct NameItem{NameItem(char * name){strcpy(this->name,name);pOther=NULL;pNext=NULL;}NameItem(NameItem * pItem){strcpy(this->name,pItem->name);pOther=NULL;pNext=NULL;}NameItem* InsertMeAfterSb(NameItem * pSbPrev){this->pNext=pSbPrev->pNext;pSbPrev->pNext=this;return this;}NameItem* InsertSbAfterMe(NameItem * pSb){pSb->pNext=this->pNext;this->pNext=pSb;return pSb;}char name[256];NameItem *pOther;NameItem *pNext;};void printAll(NameItem* pItems){while(pItems){printf("%s ",pItems->name);pItems=pItems->pNext;}printf("\n");}void printOthers(NameItem* pItems){while(pItems){if(pItems->pOther){   printf("%s->%s ",pItems->name,pItems->pOther->name);}pItems=pItems->pNext;}printf("\n");}void freeAll(NameItem* pItems){NameItem* pItems0;while(pItems){//printf("%s ",pItems->name);pItems0=pItems->pNext;delete pItems;pItems=pItems0;}//printf("\n");}NameItem* ezCopyItems(NameItem* pSrc){NameItem* pHead=new NameItem(pSrc);pSrc=pSrc->pNext;NameItem* ptmpItem=pHead;while(pSrc){ptmpItem=ptmpItem->InsertSbAfterMe(new NameItem(pSrc));pSrc=pSrc->pNext;}return pHead;}//NameItem* GetItemByName(NameItem* pItem,char *name);int GetItemDeIndex(NameItem* p1stItem,NameItem* pItem);NameItem* GetItemByIndex(NameItem* pItem,int index);NameItem* complexCopyItems(NameItem* pItemBase,NameItem* pSrc){NameItem* pSrc0=pSrc;NameItem* pResult=pItemBase;while(pItemBase){if(pSrc->pOther){   //printf("%s->%s ",pItems->name,pItems->pOther->name);//pItemBase->pOther=GetItemByName(pResult,pSrc->pOther->name);int index=GetItemDeIndex(pSrc0,pSrc->pOther);pItemBase->pOther=GetItemByIndex(pResult,index);}pItemBase=pItemBase->pNext;pSrc=pSrc->pNext;}return pResult;}/*NameItem* GetItemByName(NameItem* pItem,char *name){while(pItem){if (strcmp(pItem->name,name)==0){return pItem;}pItem=pItem->pNext;}return NULL;}*/NameItem* GetItemByIndex(NameItem* pItem,int index){if(index<0)return NULL;for(int i=0;i<index;i++){ pItem=pItem->pNext; if(!pItem)return NULL;}return pItem;}int GetItemDeIndex(NameItem* p1stItem,NameItem* pItem){if(!pItem || !p1stItem)return -1;for(int i=0;;i++){if(p1stItem==pItem)break; p1stItem=p1stItem->pNext; if(!p1stItem)return -1;}return i;}NameItem* BindItemsByIndex(NameItem* pItem,int from,int to){NameItem*  pFrom=GetItemByIndex(pItem,from);NameItem*  pTo=GetItemByIndex(pItem,to);if(pFrom && pTo){pFrom->pOther=pTo;return pFrom;}else return NULL;}int main(int argc, char* argv[]){NameItem* pItemA=new NameItem("zhao");NameItem* pTmpItem=pItemA->InsertSbAfterMe(new NameItem("qian"));pTmpItem=pTmpItem->InsertSbAfterMe(new NameItem("shun"));pTmpItem=pTmpItem->InsertSbAfterMe(new NameItem("li"));printf("printAll(pItemA)=====\n");printAll(pItemA);///建立pItemA内部的复杂联系BindItemsByIndex(pItemA,1,3);BindItemsByIndex(pItemA,2,0);printf("printOthers(pItemA)=====\n");printOthers(pItemA);////NameItem* pItemB=ezCopyItems(pItemA);printf("printAll(pItemB)=====\n");printAll(pItemB);///在pItemB的基础上,拷贝pItemA内部的复杂联系NameItem* pItemC=complexCopyItems(pItemB,pItemA);//打印pItemC内部的复杂联系printf("printOthers(pItemC)=====\n");printOthers(pItemC);////printf("Hello World!\n");return 0;}/*printAll(pItemA)=====zhao qian shun liprintOthers(pItemA)=====qian->li shun->zhaoprintAll(pItemB)=====zhao qian shun liprintOthers(pItemC)=====qian->li shun->zhaoHello World!Press any key to continue*/

原创粉丝点击