codeup id=1814 剩下的树

 代码错误50%

#include<iostream>
#include<stdlib.h> 
#define Maxsize 1000
using namespace std;
typedef struct node
{ struct node* prior;
  struct node* next;
	int data;
}NODE,*PNODE;
  /********遍历链表 *****/
int traverse_list(PNODE r,PNODE L)
{
   	  	r=L;
		while(r->next!=NULL)
		{	
			r=r->next;
			printf(" %d",r->data);
		}
  return 0;
}
  /********链表节点统计*****/
int court_list_node(PNODE r,PNODE L,int &x)
{       
   	  	r=L->next;
		while(r!=NULL)
		{
			x++;
			r=r->next;
		}
  return 0;
}
  /********链表查找元素 *****/
int findElement_prior_next(PNODE L,PNODE r,int e,int m,int v,PNODE &K)//链表头参考点,遍历指针,查找值,链表区间值 ,返回指针
{	r=L;
    K=L;
	while(r!=NULL)
	{if(r->data==e)
	if(v==1)         
    K=r->prior;
    else if(v==2)
	K=r->next;
    r=r->next;
	}
	return 0;
  }
  


  /********创建链表 *****/
 void creatlist(PNODE S,PNODE P,int m)
 {
   
 		for(int j=0;j<=m;j++)
 	 	{	S=(PNODE)malloc(sizeof(NODE));
  			S->data=j;
  			P->next=S;
  			S->prior=P;
  			P=P->next;
  			//S=P->next;
			  
  		}
		   P->next=NULL;
	} 

	int main()
	{PNODE Phead,S,P,r,M1[Maxsize],M2[Maxsize],rear;
 	int m,left[Maxsize],right[Maxsize],NO;
 	int number=0;
 //	cout<<"输入数值范围0~m"<<endl;

	  while(cin>>m>>NO)
	  {if(m>10000||m<1)
	  break;
	 if(NO<0||NO>100)
	 break;
	 Phead=NULL;
	Phead=(PNODE)malloc(sizeof(NODE));//创建 表头 
 	P=Phead;
    M1[0]=M2[0]=Phead;
  	creatlist(S,P,m);//创建链表
  	 	//traverse_list(r,Phead);//遍历链表
  	//	cout<<endl;
  	//cout<<"输入几组区间"<<endl;
  	for(int i=0,v=1;i<NO;i++,v++)
  	{  //cout<<"输入第"<<v<<"组区间"<<endl;
     		cin>>left[i]>>right[i];
     		r=Phead;
  		 findElement_prior_next(Phead,r,left[i],m,1,M1[i]);
		 findElement_prior_next(Phead,r,right[i],m,2,M2[i]);
	}
	  	for(int i=0;i<NO;i++)
  	{  
	if(left[i]<=left[i-1]&&right[i]>=right[i-1])//后一个区间包含前一个区间
			{ M1[i]->next=M2[i];
		     M2[i]->prior=M1[i];}
		else if(left[i]>=left[i-1]&&right[i]<=right[i-1])
			{ M1[i-1]->next=M2[i-1];
		     M2[i-1]->prior=M1[i-1];}
		else if(left[i]>right[i-1])//后一个区间与前一个区间不相关
	   {M1[i]->next=M2[i];
		M2[i]->prior=M1[i];
		} 
		else if(right[i-1]>=left[i])//后区间左区域在前区间内
		{ M1[i-1]->next=M2[i];
		  M2[i]->prior=M1[i-1];
		}
		
	}

  	  //r=Phead;
     //  traverse_list(r,Phead);//遍历链表
    //  cout<<endl;
    //  cout<<"剩余节点数量"<<endl;
    number=0;
       court_list_node(r,Phead,number);
    	cout<<number<<endl;
    }
    return 0;
}















#include<iostream>
#include<stdlib.h> 
#define Maxsize 1000
using namespace std;
typedef struct node
{ struct node* prior;
  struct node* next;
	int data;
}NODE,*PNODE;
  /********遍历链表 *****/
int traverse_list(PNODE r,PNODE L,PNODE rear)
{
   	  	r=L;
		while(r->next!=rear)
		{	
			r=r->next;
		 printf(" -%d-",r->data);
		}
  return 0;
}
  /********链表节点统计*****/
int court_list_node(PNODE r,PNODE L,int &x,PNODE rear)
{       
   	  	r=L;
		while(r->next!=rear)
		{
			x++;
			r=r->next;
		}
	//	if(r->next==rear)
	//	x=0;
  return 0;
}
  /********链表查找元素 *****/
int findElement_prior(PNODE &L,PNODE &r,int e,PNODE rear,PNODE &K)//链表头参考点,遍历指针,查找值,链表区间值 ,返回指针
{   
     cout<<endl;
	 r=L;
    K=L;
	while(r!=NULL)
	{	if(r->data==e)
    	{	K=r->prior;break;
		}
 	else K=L;
	r=r->next;
	
	}
	cout<<"左边"<<K->data<<endl;
	return 0;
  }
    /********链表查找元素 *****/
int findElement_next(PNODE &L,PNODE r,int e,PNODE rear,PNODE &K)//链表头参考点,遍历指针,查找值,链表区间值 ,返回指针
{ //int flag;
  	  r=L;
    K=L;
	while(r!=NULL)
	{if(r->data==e)
	{K=r->next;break;}
 	else K=rear->prior;
    r=r->next;

	}
	cout<<"右边"<<K->data<<endl;
	return 0;
  }
  


  /********创建链表 *****/
 void creatlist(PNODE S,PNODE &P,int m)
 {
   
 		for(int j=0;j<=m;j++)
 	 	{	S=(PNODE)malloc(sizeof(NODE));
  			S->data=j;
  			P->next=S;
  			S->prior=P;
  			P=P->next;
  			//S=P->next;
  		}
		   P->next=NULL;
		  //rear->data=-1;
	      // rear->next=NULL;
	} 

	int main()
	{PNODE Phead,S,P,r,M1[Maxsize],M2[Maxsize],rear,front;
 	int m,left[Maxsize],right[Maxsize],NO;
 	int number=0,flag;
 //	cout<<"输入数值范围0~m"<<endl;

	  while(cin>>m>>NO)
	  {flag=0;
	  if(m>10000||m<1)
	  break;
	 if(NO<0||NO>100)
	 break;
	Phead=NULL;
	Phead=(PNODE)malloc(sizeof(NODE));//创建 表头 
 	P=Phead;
    M1[0]=M2[0]=Phead;
	creatlist(S,P,m);//创建链表
	rear=(PNODE)malloc(sizeof(NODE));
									 P->next=rear;
									 rear->prior=P;
									 rear->data=-1;
									 rear->next=NULL;
  	 	traverse_list(r,Phead,rear);//遍历链表
  	cout<<endl;
  	//cout<<"输入几组区间"<<endl;
  	for(int i=0,v=1;i<NO;i++,v++)
  	{ cout<<"输入第"<<v<<"组区间"<<endl;
     		cin>>left[i]>>right[i];
     if(left[i]==0&&right[i]==m)
			flag=1;
  			if(flag==0)
			{
				r=Phead;
  		 findElement_prior(Phead,r,left[i],rear,M1[i]);
		 findElement_next(Phead,r,right[i],rear,M2[i]);
		  M1[i]->next=M2[i];
		  M2[i]->prior=M1[i];
		  r=Phead;
		   traverse_list(r,Phead,rear);//遍历链表

	}
if(flag==0)
{	 r=Phead;
cout<<"末尾遍历\n"<<endl;
          traverse_list(r,Phead,rear);//遍历链表
     cout<<endl;
      cout<<"剩余节点数量"<<endl;

	     number=0;
       court_list_node(r,Phead,number,rear);
    	cout<<number<<endl;
}
else if(flag==1)
	      cout<<0<<endl;
}

}
    return 0;
}
 
 
 

猜你喜欢

转载自blog.csdn.net/qq_26004051/article/details/83305257