代码错误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;
}