#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);
}
动态初始化排序链表
最新推荐文章于 2019-06-22 16:45:24 发布