这个程序主要是练习链表的用法,我既然无法通过编译。最重要的是我不知道编译出错的地方究竟哪里错了!
我的程序代码:
/*
The Blocks Problem
input:
10
move 9 onto 1
move 8 over 1
move 7 over 1
move 6 over 1
pile 8 over 6
pile 8 over 5
move 2 over 1
move 4 over 9
quit
output:
0: 0
1: 1 9 2 4
2:
3: 3
4:
5: 5 8 7 6
6:
7:
8:
9:
*/
#include "stdio.h"
#include "iostream"
#include "string"
using namespace std;
struct node
{
int a;
node* next;
};
int main()
{
char str1[5],str2[5];
int i,j,n,k;
scanf("%d",&n);
if(n<1||n>=25)
return 0;
node* q[25];
node* p,p1,p2,p3;
int flag1,flag2;
for(k=0;k<n;k++){
p=new node;
p->a=k;
q[k].next=p;
}
while(1)
{
cin>>str1;
if(!strcmp(str1,"quit"))
break;
cin>>i>>str2>>j;
if(!strcmp(str1,"move")){
for(k=0;k<n;k++)
{
p=q[k];
p=p->next;
while(p)
{
if(p->a==i)
break;
p=p->next;
}
if(p->a==i)
break;
}
p1=p;
p=p->next;
p1->next=NULL;
if( ( (q[k]->next)->a ) == (p1->a) )
q[k]->next=NULL;
while(p)
{
q[p->a]->next=p;
p3=p;
p=p->next;
p3->next=NULL;
}
}
if(!strcmp(str1,"pile")){
for(k=0;k<n;k++)
{
p=q[k];
p=p->next;
while(p)
{
if(p->a==i)
break;
p=p->next;
}
if(p->a==i)
break;
}
p1=p;
if(q[k]->next->a==p1->a)
q[k]->next=NULL;
flag1=k;
}
if(!strcmp(str2,"onto")){
for(k=0;k<n;k++)
{
p=q[k];
p=p->next;
while(p)
{
if(p->a==j)
break;
p=p->next;
}
if(p->a==j)
break;
}
flag2=k;
if(flag1==flag2)
continue;
p2=p;
p=p->next;
p2->next=NULL;
while(p)
{
q[p->a]->next=p;
p3=p;
p=p->next;
p3->next=NULL;
}
p2->next=p1;
}
if(!strcmp(str2,"over")){
for(k=0;k<n;k++)
{
p=q[k];
p=p->next;
while(p)
{
if(p->a==j)
break;
p=p->next;
}
if(p->a==j)
break;
}
flag2=k;
if(flag1==flag2)
continue;
while(p->next)
p=p->next;
p->next=p1;
}
}
for(k=0;k<n;k++){
printf("%d:",k);
while(!q[k]->next)
{
printf(" %d",q[k]->next->a);
}
printf("/n");
}
return 0;
}