单链表实现递增有序交集

来源:互联网 发布:广联达市政预算软件 编辑:程序博客网 时间:2024/06/07 06:36
#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");
}*/

0 0
原创粉丝点击