线性表总结
1.代码段
简介:设计一个算法,从顺序表中删除重复的元素,并使剩余元素间的相对次序保存不变,
--同学的代码--
void DelSameNode(List &L) //1
{ //2
int i,k,j=0; //3
int flag=0; //4
for(i=1;i<L->length;i++) //5
{ //6
k=0; //7
while(k<=j&&L->data[i]!=L->data[k]) //8
k++; //9
if(k>j) //10
{ //11
j++; //12
L->data[j]=L->data[i]; //13
} //14
flag=1; //15
} //16
if(flag)L->length=j+1; //17
} //18
1.1代码
--我的代码--
void DelSameNode(List &L) //1
{ //2
int i,j,k,flag=0; //3
int line[L->length]; //4
for(i=0;i<L->length-1;i++) //5
{ //6
for(j=i+1;j<L->length;j++) //7
{ //8
if(L->data[i]==L->data[j]) //9
{ //10
for(k=j;k<L->length;k++) //11
L->data[k]=L->data[k+1]; //12
L->length-=1; //13
} //14
} //15
} //16
} //17
2.不懂的地方
1.同学的代码
第五行到第十八行都看不懂,功能没懂。
2.我的代码
我的代码不完全正确,如果顺序表元素都相同,最后会剩下两个相同元素,而不是一个元素,我不知道怎么改正了,我找不到错误及新思路
2.代码段
简介:已知两个递增链表序列L1与L2,2个链表都是带头结点链表。设计函数实现L1,L2的合并,合并的链表仍然递增有序,头结点为L1的头结点。 合并后需要去除重复元素。
2.1代码
void MergeList(LinkList &L1,LinkList L2)//合并链表 //1
{ //2
LinkList p,q,r; //3
if(L1->next==NULL) //判断链表是否为空 //4
{ //5
L1->next=L2->next; //6
return; //7
} //8
else if(L2->next==NULL) //9
{ //10
return; //11
} //12
r=L1; //指针指向L1链表开头,进行链表重构 //13
p=L1->next; //p,q指向L1,L2链表首结点 //14
q=L2->next; //15
while(p!=NULL&&q!=NULL) //16
{ //17
if(p->data<q->data) //比较各结点数据的大小 //18
{ //19
r->next=p; //改变链表结点的逻辑关系 //20
p=p->next; //指针向后移 //21
} //22
else if(p->data>q->data) //23
{ //24
r->next=q; //25
q=q->next; //26
} //27
else if(p->data==q->data) //两结点数据大小相等 //28
{ //29
r->next=p; //任取一个结点,改变逻辑关系//30
p=p->next; //两个指针一起向后移动 //31
q=q->next; //32
} //33
r=r->next; //r指针向后移动 //34
if(p==NULL) //判断第一个链表是否已经读取完 //35
{ //36
r->next=q; //37
break; //38
} //39
else if(q==NULL)//判断第二个链表是否已经读取完 //40
{ //41
r->next=p; //42
break; //43
} //44
} //45
} //46
2.2不懂的地方
第三十五行到第四十五行,if的判断条件是pNULL或qNULL,但是while的循环条件是p和q都不为零才进入循环,我感觉矛盾了,应该把当p或q等于NULL时的链接放在while外