您的位置:首页 > 理论基础 > 数据结构算法

单链表实现递增有序交集

2016-09-29 13:36 316 查看
#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");

}*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐