集合的交并运算

喜欢ヅ旅行 2022-06-04 02:11 382阅读 0赞

数据结构链表实现集合的交并运算

//consts.h

  1. #include<string.h>
  2. #include<malloc.h>
  3. #include<stdlib.h>
  4. #include<stdio.h>
  5. #include<limits.h>
  6. #include<io.h>
  7. #include<math.h>
  8. #include<process.h>
  9. #define TRUR 1
  10. #define FALSE 0
  11. #define OK 1
  12. #define ERROR -1
  13. #define INFEASIBLE -1

//linklist.h

  1. #ifndef MY_H_FILE
  2. #define MY_H_FILE
  3. #include"consts.h"
  4. #endif
  5. typedef char DataType;
  6. typedef struct node
  7. {
  8. DataType data;
  9. struct node *next;
  10. }LinkedList;
  11. void InitLlist(LinkedList *L)
  12. {
  13. L->next=NULL;
  14. }
  15. int GetLListLength(LinkedList *L)
  16. {
  17. LinkedList *p;
  18. int j;
  19. p=L->next;
  20. j=0;
  21. while(p!=NULL)
  22. {
  23. p=p->next;
  24. j++;
  25. }
  26. return j;
  27. }
  28. LinkedList *GetLListElem(LinkedList *L,int i)
  29. {
  30. int j;
  31. LinkedList *p;
  32. p=L;
  33. j=0;
  34. while((p->next!=NULL)&&(j<i))
  35. {
  36. p=p->next;
  37. j++;
  38. }
  39. if(i=j)
  40. {
  41. return p;
  42. }
  43. else
  44. return NULL;
  45. }
  46. LinkedList *LocateLListElem(LinkedList *L,DataType key)
  47. {
  48. LinkedList *p;
  49. p=L->next;
  50. while(p!=NULL)
  51. {
  52. if(p->data!=key)
  53. {
  54. p=p->next;
  55. }
  56. else
  57. break;
  58. }
  59. return p;
  60. }
  61. int InsertLList(LinkedList *L,int i,DataType x)
  62. {
  63. LinkedList *pre,*s;
  64. int k;
  65. pre=L;
  66. k=0;
  67. while(pre!=NULL && k<i-1)
  68. {
  69. pre=pre->next;
  70. k=k+1;
  71. }
  72. if(!pre)
  73. {
  74. printf("插入位置不合理");
  75. return ERROR;
  76. }
  77. s=(LinkedList*)malloc(sizeof(LinkedList));
  78. s->data=x;
  79. s->next=pre->next;
  80. pre->next=s;
  81. return OK;
  82. }
  83. int DeleteLList(LinkedList *L,int i,DataType *e)
  84. {
  85. LinkedList *pre,*r;
  86. int k;
  87. pre=L;
  88. k=0;
  89. while(pre->next!=NULL && k<i-1)
  90. {
  91. pre=pre->next;
  92. k++;
  93. }
  94. if(!(pre->next))
  95. {
  96. printf("删除的位置不合理");
  97. return ERROR;
  98. }
  99. r=pre->next;
  100. pre->next=pre->next->next;
  101. *e=r->data;
  102. free(r);
  103. printf("成功删除结点");
  104. return OK;
  105. }
  106. LinkedList *CreateLListR()
  107. {
  108. char ch;
  109. LinkedList *head,*s,*r;
  110. head=(LinkedList*)malloc(sizeof(LinkedList));
  111. r=head;
  112. ch=getchar();
  113. while(ch!='$')
  114. {
  115. s=(LinkedList*)malloc(sizeof(LinkedList));
  116. s->data=ch;
  117. r->next=s;
  118. r=s;
  119. ch=getchar();
  120. }
  121. r->next=NULL;
  122. return head;
  123. }
  124. void PrintLList(LinkedList *q)
  125. {
  126. LinkedList *p;
  127. p=q->next;
  128. printf("字符单链表结果是:\n");
  129. while(p!=NULL)
  130. {
  131. printf("%5c",p->data);
  132. p=p->next;
  133. }
  134. printf("\b\n");
  135. }

//main.h

  1. #include"linklist.h"
  2. //求并集
  3. void UnionLinkCollection(LinkedList *a,LinkedList *b,LinkedList *c)
  4. {
  5. LinkedList *p,*q,*r,*s;
  6. int flag=0;
  7. r=c;
  8. for(p=a->next;p!=NULL;p=p->next)
  9. {
  10. s=(LinkedList*)malloc(sizeof(LinkedList));
  11. s->data=p->data;
  12. r->next=s;
  13. r=s;
  14. s->next=NULL;
  15. }
  16. for(p=b->next;p!=NULL;p=p->next)
  17. {
  18. for(q=a->next;q!=NULL;q=q->next)
  19. {
  20. if(p->data==q->data)
  21. {
  22. flag=1;
  23. break;
  24. }
  25. }
  26. if(flag==0)
  27. {
  28. s=(LinkedList*)malloc(sizeof(LinkedList));
  29. s->data=p->data;
  30. r->next=s;
  31. r=s;
  32. s->next=NULL;
  33. }
  34. flag=0;
  35. }
  36. }
  37. //求jiao集
  38. int InterLinkCollection(LinkedList *a,LinkedList *b,LinkedList *c)
  39. {
  40. int reg=0;
  41. LinkedList *p,*q,*r=c,*s;
  42. for(p=a->next;p!=NULL;p=p->next)
  43. {
  44. for(q=b->next;q!=NULL;q=q->next)
  45. {
  46. if(p->data==q->data)
  47. {
  48. s=(LinkedList*)malloc(sizeof(LinkedList));
  49. s->data=p->data;
  50. r->next=s;
  51. r=s;
  52. s->next=NULL;
  53. reg=1;
  54. }
  55. }
  56. }
  57. return reg;
  58. }
  59. int main()
  60. {
  61. LinkedList *a,*b,*jiao,*bing;
  62. printf("请输入表a的元素:(以$结束)\n");
  63. a=CreateLListR();
  64. getchar();
  65. printf("请输入表b的元素:(以$结束)\n");
  66. b=CreateLListR();
  67. printf("集合a中的元素为:");
  68. PrintLList(a);
  69. printf("集合b中的元素为:");
  70. PrintLList(b);
  71. jiao=(LinkedList*)malloc(sizeof(LinkedList));
  72. bing=(LinkedList*)malloc(sizeof(LinkedList));
  73. printf("a交b为:");
  74. InterLinkCollection(a,b,jiao);
  75. PrintLList(jiao);
  76. printf("a并b为:");
  77. UnionLinkCollection(a,b,bing);
  78. PrintLList(bing);
  79. return 0;
  80. }

发表评论

表情:
评论列表 (有 0 条评论,382人围观)

还没有评论,来说两句吧...

相关阅读