数据结构第二章习题

2.15

//2018年8月17日 练习2.15

void stick(linklist &ha, linklist &hb, linklist &hc)
{
	if (m < n)
	{
		pa = ha->next;
		while (pa->next != null)
			pa = pa->next;
		pa->next = hb->next;
		free(hb);
		hc = ha;
	}
	else
	{
		pb = hb->next;
		while (pb->next != null)
			pb = pb->next;
		pb->next = ha->next;
		free(ha);
		hc = hb;
	}
}

2.16

void deleteandinsertsub(linkedlist la, linkedlist lb, int i, int j, int len)
{
	if (i < 0 || j < 0 || len < 0) return INFEASIBLE;
	p = la;prep = la;k = 1;prev = NULL;
	while(p&&k<i)
	{
		prev = p;p = p->next;k++;
	}
	if (!p) return INFEASIBLE;//找到第i个
	q = p;k = 1;
	while (q&&k < len)
	{
		q = q->next;k++;
	}
	if (!q) return INFEASIBLE;
	if (!prep) la = q->next;//全删完了,剩下空表
	if (j == 1) q->next = lb;
	else
	{
		s = lb;k = 1;
		while (s&&k < j - 1)
		{
			s = s->next;
			k++;
		}
		q->next = s->next;
		s->next = p;
		return OK;
	}
}

2.22

void revert(linklist la)
{
	s = la->next;
	la->next = null;
	p = s;
	while (s->next != null)
	{
		p = p->next;
		s->next = la->next;
		la->next = s;
		s = p;
	}
	s->next = la->next;
	la->next = s;
}

2.23

void connect(linklist la, linklist lb)
{
	p = la;q = lb;
	while (p->next&&q->next)
	{
		m = q->next;
		q->next = p->next;
		p->next = q;
		p = q->next;
		q = m;
	}
	if (!p->next)
	{
		q->next = p->next;
		p->next = q;
	}
        free(lb);
}

2.24

void connection(linklist la, linklist lb)
{
	p = la->next;
	p1 = p->next;
	q = lb->next;
	q1 = q->next;
	free(lb);
	la->next = null;//拿la做头结点
	while (p&&q)
	{
		if (p->data < q->data)
		{
			p->next = la->next;
			la->next = p;
			p = p1;
			p1 = p1->next;
		}
		else
		{
			q->next = la->next;
			la->next = q;
			q = q1;
			q1 = q1->next;
		}
	}
	while (!p)
	{
		p1 = p->next;
		p->next = la->next;
		la->next = p;
		p = p1;
	}
	while (!q)
	{
		q1 = q->next;
		q->next = la->next;
		la->next = q;
		q = q1;
	}
}

2.28

void connection(linklist la, linklist lb)
{
	pa = la->next;pb = lb->next;
	ha = la;
	la->next = null;
	while (pa&&pb)
	{
		if (pa->data < pb->data&&)
		{
			ha->next = pa;
			pa = pa->next;
			ha = ha->next;
		}
		if (pa->data > pb->data)
		{
			ha->next = pb;
			pb = pb->next;
			ha = ha->next;
		}
		if (pa->data == pb->data)
		{
			ha->next = pa;
			pa = pa->next;
			ha = ha->next;
			freeb = pb;
			pb = pb->next;
			free(freeb);
		}
	}
	while (!pa)
	{
		ha->next = pa;
	}
	while (!pb)
	{
		ha->next = pb;
	}
}

2.29

void delete(linklist la, linklist lb, linklist lc)
{
	pa = la->next;
	da = la;
	pb = lb->next;
	pc = lc->next;
	while (pa)
	{
		if (!pb) {
			if (pa->data == pb->data&&pb->data != pc->data)
			{
				da->next = pa->next;
				deletea = pa;
				pa = pa->next;
				free(deletea);
				pb = pb->next;
			}
		}
		if (!pc) {
			if (pa->data == pc->data&&pc->data != pb->data)
			{
				da->next = pa->next;
				deletea = pa;
				pa = pa->next;
				free(deletea);
				pc = pc->next;
			}
		}
		if (!pc && !pb) {
			if (pa->data == pb->data&&pb->data == pc->data)
			{
				da->next = pa->next;
				deletea = pa;
				pa = pa->next;
				free(deletea);
				pb = pb->next;
				pc = pc->next;
			}
		}
		if(pa->data!=pb->data&&pa->data!=pc->data)
		{
			pa = pa->next;
			pb = pb->next;
			pc = pc->next;
		}
		if (pb->data == pc->data&&pb->data != pa->data)
		{
			pa = pa->next;
			pb = pb->next;
			pc = pc->next;
		}
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_41878471/article/details/81782724