#include <stdio.h>
#include <stdlib.h>
#define OK 1
typedef int status;
typedef int ElemType;
typedef struct Node{
ElemType data;
struct Node *next;
}LNode,*LinkList;
void creat(LinkList L);
void IntersectionList1(LinkList L);
void Insert(LinkList L,LinkList p);
status Sort(LinkList L);
//void Print(LinkList L);
int main() {
LinkList La;
La=(LinkList)malloc(sizeof(LNode));
La->next=NULL;
La->data=-1;
creat(La);
Sort(La);
printf("交集为:\n");
IntersectionList1(La);
printf("\n");
return 0;
}
//创建一个新的链表
void creat(LinkList L){
int n1,n2;
LinkList p,q;
p=L;
printf("请输入A集合元素的个数:\n");
scanf("%d",&n1);
printf("请输入A集合元素:\n");
while(n1--) {
q=(LinkList)malloc(sizeof(LNode));
scanf("%d",&q->data);
q->next=NULL;
p->next=q;
p=q;
}
getchar();
printf("请输入B集合元素的个数:\n");
scanf("%d",&n2);
printf("请输入B集合元素:\n");
while(n2--) {
q=(LinkList)malloc(sizeof(LNode));
scanf("%d",&q->data);
q->next=NULL;
p->next=q;
p=q;
}
}
//提取链表中的重复元素
void IntersectionList1(LinkList L)
{
LinkList p,q,s;
p=L;
q=L->next;
while(q->next)
{
if(q->data==q->next->data)
{
printf("%d ",q->data);
p->next=q->next;
s=q;
q=q->next;
free(s);
}
else
{
p=p->next;
q=q->next;
}
}
}
//升序排列
void Insert(LinkList L,LinkList p)
{
LinkList s;
s=L;
while(s->next && s->next->data < p->data)
s=s->next;
p->next=s->next;
s->next=p;
}
status Sort(LinkList L){
LinkList s,r;
s=L->next;
L->next=NULL;
while(s){
r=s;
s=s->next;
r->next=NULL;
Insert(L,r);
}
return OK;
}
/*void Print(LinkList L)
{
LinkList p;
p=L->next;
printf("交集为:\n");
while(p)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}*/
#include <stdlib.h>
#define OK 1
typedef int status;
typedef int ElemType;
typedef struct Node{
ElemType data;
struct Node *next;
}LNode,*LinkList;
void creat(LinkList L);
void IntersectionList1(LinkList L);
void Insert(LinkList L,LinkList p);
status Sort(LinkList L);
//void Print(LinkList L);
int main() {
LinkList La;
La=(LinkList)malloc(sizeof(LNode));
La->next=NULL;
La->data=-1;
creat(La);
Sort(La);
printf("交集为:\n");
IntersectionList1(La);
printf("\n");
return 0;
}
//创建一个新的链表
void creat(LinkList L){
int n1,n2;
LinkList p,q;
p=L;
printf("请输入A集合元素的个数:\n");
scanf("%d",&n1);
printf("请输入A集合元素:\n");
while(n1--) {
q=(LinkList)malloc(sizeof(LNode));
scanf("%d",&q->data);
q->next=NULL;
p->next=q;
p=q;
}
getchar();
printf("请输入B集合元素的个数:\n");
scanf("%d",&n2);
printf("请输入B集合元素:\n");
while(n2--) {
q=(LinkList)malloc(sizeof(LNode));
scanf("%d",&q->data);
q->next=NULL;
p->next=q;
p=q;
}
}
//提取链表中的重复元素
void IntersectionList1(LinkList L)
{
LinkList p,q,s;
p=L;
q=L->next;
while(q->next)
{
if(q->data==q->next->data)
{
printf("%d ",q->data);
p->next=q->next;
s=q;
q=q->next;
free(s);
}
else
{
p=p->next;
q=q->next;
}
}
}
//升序排列
void Insert(LinkList L,LinkList p)
{
LinkList s;
s=L;
while(s->next && s->next->data < p->data)
s=s->next;
p->next=s->next;
s->next=p;
}
status Sort(LinkList L){
LinkList s,r;
s=L->next;
L->next=NULL;
while(s){
r=s;
s=s->next;
r->next=NULL;
Insert(L,r);
}
return OK;
}
/*void Print(LinkList L)
{
LinkList p;
p=L->next;
printf("交集为:\n");
while(p)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}*/