小天使的地盘

线性表总结

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外

posted on 2019-03-25 21:33  小天使的地盘  阅读(97)  评论(0编辑  收藏  举报

导航