数据结构 — 2.顺序表删除问题

【问题描述】已知A,B和C为三个非递减有序的线性表,现要求对A表做如下操作:删去那些既在B表中出现又在C表中

出现的元素.试对顺序表编写实现上述操作的算法(注意题中并没有特别指明同一表中的元素值各不相同).  注意此

题用顺序表编写程序.

【输入形式】第一行为A表,第二行为B表,第三行为C表,分别以-1结束

【输出形式】删除后的A表

【样例输入】1 3 5 5 7 -1

                      2 4 5 6 8 -1

                      5 6 7 9 -1
【样例输出】1 3 7


#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>

#define listsize 100

typedef int elemtype;
typedef struct
{
	elemtype *elem;
	int length;
	int size;
}sqlist;
void Initlist(sqlist &l)
{
	l.elem=(elemtype *)malloc(listsize*sizeof(elemtype));
	if(!l.elem)
	  exit(-1);

	l.length=0;
	l.size=listsize;
}

void creatlist(sqlist &l)
{
    int i=0,m;
	while(1)
	{
		scanf("%d",&m);
		if(m<0)
			break;
		l.elem[i]=m;
		i++;
	}
	l.length=i;
}


void show(sqlist l)
{
	int i;
	for(i=0;i<l.length;i++)
		printf("%d ",l.elem[i]);
	printf("\n");
}


void deletelist(sqlist &l,elemtype e)
{
	int i;
	elemtype *p,*q;
	for(i=0;i<l.length;i++)
	{
	    //查找
		if(l.elem[i]==e)
		{
			p=&(l.elem[i]);
			//找到节点的位置 q
			q=l.elem+l.length-1;
			//移动->线性表的删除
			for(++p;p<=q;p++)
				*(p-1)=*p;
            //长度减一
			l.length--;
			i--;
		}
	}

}


void searchlist(sqlist &la,sqlist lb,sqlist lc)
{
	int i,j;

	for(i=0;i<lb.length;i++)
	{
		for(j=0;j<lc.length;j++)
		{
		    //查找
			if(lb.elem[i]==lc.elem[j])
            //在la中删除la、lb中公有的值
			deletelist(la,lb.elem[i]);
		}
	}
}

int main()
{
	sqlist A,B,C;

	Initlist(A);
	Initlist(B);
	Initlist(C);

	creatlist(A);
	creatlist(B);
	creatlist(C);

	searchlist(A,B,C);
	show(A);

	return 0;
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PeersLee

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值