`
hufeng
  • 浏览: 103324 次
  • 性别: Icon_minigender_1
  • 来自: 江西
社区版块
存档分类
最新评论

动态初始化排序链表

阅读更多
#include "stdio.h"
#include "stdlib.h"
typedef int DataType;

/*编一C程序,它能读入集合A的一串整数(以-9999为结束标记,-9999不算在内)和集合B的一串整数(以-9999为结束标记),
计算出A与B的交集,并以由小到大的次序输出A与B的交集中的所有整数
(输入整数时,相邻的两个用空格隔开。为A或B输入时,同一个数可能出现多次,而A与B的交集中同一个数不能出现多次)。*/
typedef struct link
{
	DataType d;
	struct link *next;
}Linklist,*PLink;

void printLink(PLink h)
{
	PLink p;
	int count=0;
	if(h==NULL)return;
	p=h->next;
	while(p)
	{
		printf("%-5d",p->d);
		if(++count%10==0)printf("\n");
		p=p->next;
	}
}
//插入排序 输入两个整数集合

void insertData(PLink h,int x)
{
	PLink p,pre,q;
	pre=h;
	p=pre->next;
	while(p&&p->d<x)
	{
		pre=pre->next;
		p=pre->next;
	}
	q=(PLink)malloc(sizeof(Linklist));
	q->d=x;

	q->next=p;
	pre->next=q;

//	printLink(h);
//	printf("\n");
}
void inputData(PLink *h)
{
	int d;
	if(*h==NULL)
	{
		*h=(PLink)malloc(sizeof(Linklist));
		(*h)->next=NULL;
	}
	printf("input a:\n");
	do
	{
		scanf("%d",&d);
		if(d==-9999)break;

		insertData(*h,d);
	}while(9);
	printf("input b:\n");
	do
	{
		scanf("%d",&d);
		if(d==-9999)break;

		insertData(*h,d);
	}while(9);
}
//链表有序前提删除重复元素
void deleteReputNode(PLink h)
{
	PLink p,f;
	f=h;
	p=h->next;
	while(p&&p->next)
	{
		if(p->d==p->next->d)
		{
			f->next=p->next;
			free(p);
			p=f->next;
			continue;
		}
		f=p;
		p=p->next;
	}
}
void main()
{
	PLink a=NULL;
	inputData(&a);
	printLink(a);
	deleteReputNode(a);
	printf("\n");
	printLink(a);

}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics