{\rtf1\ansi\ansicpg936\deff0\deflang1033\deflangfe2052{\fonttbl{\f0\fmodern\fprq6\fcharset134 \'cb\'ce\'cc\'e5;}}
\viewkind4\uc1\pard\lang2052\f0\fs20 #include<iostream>\par
#include<string>\par
#include<cstring>\par
#include<malloc.h>\par
using namespace std;\par
#define N 25\par
typedef struct DuLNode\par
\{\par
\tab int data;\par
\tab struct DuLNode *prior;\par
\tab struct DuLNode *next;\par
\}DuLNode,*DuLinkList;\par
DuLinkList search(DuLinkList *AdjList,int n,int a)\par
\{\par
\tab int i;\par
\tab DuLinkList p;\par
\tab for(i=0;i<n;i++)\par
\tab\{\par
\tab\tab p=AdjList[i]->next;\par
\tab\tab while(p!=0&&p->data!=a)\par
\tab\tab\tab p=p->next;\par
\tab\tab if(p->data==a)\par
\tab\tab\{\par
\tab\tab\tab return p;\par
\tab\tab\tab break;\par
\tab\tab\}\par
\tab\}\par
\}\par
int main()\par
\{\par
\tab int i=0,n,j,sum;\par
\tab DuLinkList AdjList[N],s;\par
\tab string command[100];\par
\tab cin>>n;\par
\tab for(j=0;j<n;j++)\par
\tab\{\par
\tab\tab AdjList[j]=(DuLinkList)malloc(sizeof(DuLNode));\par
\tab\tab AdjList[j]->data=j;\par
\tab\tab s=(DuLinkList)malloc(sizeof(DuLNode));\par
\tab\tab s->data=j;\par
\tab\tab s->prior=AdjList[j];\par
\tab\tab AdjList[j]->next=s;\par
\tab\}\par
\tab i=0;\par
\tab cin>>command[i++];\par
\tab while(command[i-1]!="quit")\par
\tab\{\par
\tab\tab cin>>command[i++];\par
\tab\}\par
sum=i;\par
\tab for(i=0;command[i]!="quit";i+=4)\par
\tab\{\par
\tab\tab int a,b;\par
\tab\tab DuLinkList p,q;\par
\tab\tab if(command[i]=="move")\par
\tab\tab\{\par
\tab\tab\tab if(command[i+2]=="onto")\par
\tab\tab\tab\{\par
\tab\tab\tab\tab a=(int)command[i+1][0];\par
\tab\tab\tab\tab b=(int)command[i+3][0];\par
\tab\tab\tab\tab p=search(AdjList,n,a);\par
\tab\tab\tab\tab q=search(AdjList,n,b);\par
\tab\tab\tab\tab p->prior->next=p->next;\par
\tab\tab\tab\tab p->next->prior=p->prior;\par
\tab\tab\tab\tab p->next=q->next;\par
\tab\tab\tab\tab q->next->prior=p;\par
\tab\tab\tab\tab q->next=p;\par
\tab\tab\tab\tab p->prior=q;\par
\tab\tab\tab\}\par
\tab\tab\tab else\par
\tab\tab\tab\{\par
\tab\tab\tab\tab a=(int)command[i+1][0];\par
\tab\tab\tab\tab b=(int)command[i+3][0];\par
\tab\tab\tab\tab p=search(AdjList,n,a);\par
\tab\tab\tab\tab q=search(AdjList,n,b);\par
\tab\tab\tab\tab p->prior->next=p->next;\par
\tab\tab\tab\tab p->next->prior=p->prior;\par
\tab\tab\tab\tab while(q->next)\par
\tab\tab\tab\tab\tab q=q->next;\par
\tab\tab\tab\tab q->next=p;\par
\tab\tab\tab\tab p->prior=q;\par
\tab\tab\tab\}\par
\tab\tab\}\par
\tab\tab else\par
\tab\tab\{\par
\tab\tab\tab if(command[i+2]=="onto")\par
\tab\tab\tab\{\par
\tab\tab\tab\tab DuLinkList r;\par
\tab\tab\tab\tab a=(int)command[i+1][0];\par
\tab\tab\tab\tab b=(int)command[i+3][0];\par
\tab\tab\tab\tab p=search(AdjList,n,a);\par
\tab\tab\tab\tab q=search(AdjList,n,b);\par
\tab\tab\tab\tab p->prior->next=0;\par
\tab\tab\tab\tab r=p;\par
\tab\tab\tab\tab while(p->next)\par
\tab\tab\tab\tab\tab p=p->next;\par
\tab\tab\tab\tab p->next=q->next;\par
\tab\tab\tab\tab q->next->prior=p;\par
\tab\tab\tab\tab r->prior=q;\par
\tab\tab\tab\tab q->next=r;\par
\tab\tab\tab\}\par
\tab\tab\tab else\par
\tab\tab\tab\{\par
\tab\tab\tab\tab a=(int)command[i+1][0];\par
\tab\tab\tab\tab b=(int)command[i+3][0];\par
\tab\tab\tab\tab p=search(AdjList,n,a);\par
\tab\tab\tab\tab q=search(AdjList,n,b);\par
\tab\tab\tab\tab p->prior->next=0;\par
\tab\tab\tab\tab while(q->next)\par
\tab\tab\tab\tab\tab q=q->next;\par
\tab\tab\tab\tab q->next=p;\par
\tab\tab\tab\tab p->prior=q;\par
\tab\tab\tab\}\par
\tab\tab\}\par
\tab\}\par
\tab for(i=0;i<n;i++)\par
\tab\{\par
\tab\tab cout<<i<<": "<<endl;\par
\tab\tab s=AdjList[i];\par
\tab\tab while(s->next)\par
\tab\tab\{\par
\tab\tab\tab cout<<s->next->data<<" "<<endl;\par
\tab\tab\tab s=s->next;\par
\tab\tab\}\par
\tab\}\par
\tab return 1;\par
\}\par
\tab\tab\tab\par
}
评论2