組み合わせシーケンステーブル

	/*
	*我是将链表A与B进行比较 
	*将b中与B不同的元素插入到链表A中 
	*/ 


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

#define max_size 10
#define ok 1
#define error 0 

typedef struct sq{
	int date[max_size];
	int lenth;
}sqlist;

void print(sqlist l)
{
	int i;
	for(i=0;i<l.lenth;i++)
		printf("%d ",l.date[i]);
	if(i==l.lenth)
	printf("\n");
}
void insert(sqlist *l,int n)	//线性表的初始化 
{
	int i;
	int temp;
	l->lenth = 0;
	if(n>max_size)
	{
		printf("error no room");
		exit(0);
	} 
	for(i=0;i<n;i++)
	{
		scanf("%d",&temp);
		l->date[i] = temp;
		l->lenth++;
	}
}

void getelem(sqlist l,int n,int *e)		//将链表的第N个元素用返回给E 
{
	if(n <= l.lenth)
		*e=l.date[n-1];
	else
		printf("error");
}

int locatelem(sqlist l,int e)		//查找元素,找到则返回元素下标 
{
	int i;
	for(i=0;i<l.lenth;i++)
	{
		if(l.date[i]==e)
			break;
	}
	return i;
}

int listinsert1(sqlist *l,int i,int n)
{
	int k;
	if(l->lenth==max_size)  //顺序表已满 
		return error;
	if(i>l->lenth)			//插入位置不合理 
		return error;
	if(i<=l->lenth&&i>=0)
	{
		for(k=l->lenth-1;k>=i+1;k--)
			l->date[k+1]=l->date[k];
		l->date[i]=n;
		l->lenth++;
	}
	print(*l);
	return ok;
}
//顺序表的删除 
int listdelete(sqlist *l,int i,int *e)
{
	int k;
	if(l->lenth<i&&i<1&&l->lenth==0)	//顺序表为空,删除位置不合理 
		return error;
	*e=l->date[i-1];					//将第i个元素取出 
	for(k=i-1;k<l->lenth;k++)			//从第i个元素起一次将后一个元素前移 
		l->date[k]=l->date[k+1];
	l->lenth--;						//长度减1 
	print(*l);
	return ok;
} 

int listcompare(sqlist l,int n)
{
	int i,k;
	for(i = 0;i < l.lenth;i++)
	{
		if(l.date[i]>n)
			break;
	}
	return i;
}
void unoin(sqlist *la,sqlist lb)		//链表合并
{
	int i,e,temp;
	for(i = 0;i<lb.lenth;i++)
	{
		getelem(lb,i+1,&e);
		printf("e=%d",e);
		if(locatelem(*la,e)==la->lenth)
		{
			temp = listcompare(*la,e);
			printf("temp=%d",temp);
			listinsert1(la,temp,e);
		}	
	}	
}

int main()
{
	sqlist *l;
	int n;
	int m;
	l=(sqlist*)malloc(sizeof(sqlist));
	l->lenth=0;						//初始化输入的数据个数,少于max_siax个 
	printf("请输入链表A元素个数(不大于10个)");
	scanf("%d",&n);
	printf("请输入链表A元素重小到大\n");
	insert(l,n);
	printf("链表A的元素有:"); 
	print(*l); 
	sqlist *lb;
	lb=(sqlist*)malloc(sizeof(sqlist));
	printf("请输入链表元B素个数(不大于10个)");
	scanf("%d",&n);
	printf("请输入链表B元素由小到大\n");
	insert(lb,n);
	printf("链表A的元素有:"); 
	print(*lb);
	unoin(l,*lb);
	printf("合并后链表的元素有:"); 
	print(*l);
	return 0;
}
公開された39元の記事 ウォンの賞賛0 ビュー1703

おすすめ

転載: blog.csdn.net/qq_41017546/article/details/104657429