您现在的位置是:首页 >精选问答 > 2024-05-03 08:01:33 来源:

已知集合a等于{x|x2-8x-20}(已知集合a)

导读 大家好,我是小夏,我来为大家解答以上问题。已知集合a等于{x|x2-8x-20},已知集合a很多人还不知道,现在让我们一起来看看吧!1、#include...

大家好,我是小夏,我来为大家解答以上问题。已知集合a等于{x|x2-8x-20},已知集合a很多人还不知道,现在让我们一起来看看吧!

1、#include <stdio.h>

2、#include <malloc.h>

3、typedef struct node {

4、 int num;

5、 struct node *next;

6、}AGG;

7、AGG *CreateList() { // 创建单循环链表,返回链表头

8、 AGG *head,*p;

9、 int i,n;

10、 printf("结点个数n = ");

11、 scanf("%d",&n);

12、 head = p = (AGG *)malloc(sizeof(AGG)); // 专用头结点

13、 head->num = 0;

14、 printf("输入 %d 整数(空格隔开): ",n);

15、 for(i = 0; i < n; ++i) {

16、 p->next = (AGG *)malloc(sizeof(AGG));

17、 scanf("%d",&p->next->num);

18、 p = p->next;

19、 }

20、 p->next = head;

21、 return head;

22、}

23、void RiseSort(AGG *head) { // 上升排序

24、 AGG *p,*s,*pt; 

25、 p = head;

26、 s = p->next;

27、 while(p->next != head) {

28、 while(s->next != head) {

29、 if(p->next->num > s->next->num) {

30、 pt = p->next;

31、 p->next = s->next;

32、 s->next = p->next->next;

33、 p->next->next = pt;

34、 }

35、 else s = s->next;

36、 }

37、 p = p->next;

38、 s = p->next;

39、 }

40、}

41、void Simplification(AGG *head) { // 去除相同的集合元素

42、 AGG *p,*q,*s;

43、 p = head->next;

44、 q = p->next;

45、 while(q != head) {

46、 if(p->num == q->num) {

47、 p->next = q->next;

48、 s = q;

49、 q = q->next;

50、 delete s;

51、 }

52、 else {

53、 p = p->next;

54、 q = q->next;

55、 }

56、 }

57、}

58、AGG *CreateAgg() {

59、 AGG *head;

60、 head = CreateList();

61、 RiseSort(head);;

62、 Simplification(head);

63、 return head;

64、}

65、void InsertNode(AGG *head,int num) {

66、 AGG *t,*p = head;

67、 while(p->next != head) {

68、 if(p->next->num == num) return; 

69、 if(p->next->num < num) p = p->next;

70、 else {

71、 t = (AGG *)malloc(sizeof(AGG));

72、 t->num = num;

73、 t->next = p->next;

74、 p->next = t;

75、 return;

76、 }

77、 }

78、 t =(AGG *)malloc(sizeof(AGG));

79、 t->num = num;

80、 p->next = t; 

81、 t->next = head;     // 插入在链表尾的处理

82、}

83、AGG *MergeAgg(AGG *A,AGG *B) {  // A∪B

84、 AGG *head,*pa,*pb,*pc,*qc;

85、 head = pc = (AGG *)malloc(sizeof(AGG));

86、 pa = A->next;

87、 while(pa != A) {

88、 qc = (AGG *)malloc(sizeof(AGG));

89、 qc->num = pa->num;

90、 pc->next = qc;

91、 pc = qc;

92、 pa = pa->next;

93、 }

94、 pc->next = head;

95、 pb = B->next;

96、 while(pb != B) {

97、 InsertNode(head,pb->num);

98、 pb = pb->next;

99、 }

100、 return head;

101、}

102、AGG *MutualAgg(AGG *A,AGG *B) {  // A∩B

103、 AGG *C,*pa,*pb,*pc,*qc;

104、 C = pc = (AGG *)malloc(sizeof(AGG));

105、 pc->num = 0;

106、 pa = A->next;

107、 pb = B;

108、 while(pa != A) {

109、 pb = B->next;

110、 while(pb != B) {

111、 if(pb->num == pa->num) {

112、 qc = (AGG *)malloc(sizeof(AGG));

113、 qc->num = pb->num;

114、 pc->next = qc;

115、 pc = qc;

116、 }

117、 pb = pb->next;

118、 }

119、 pa = pa->next;

120、 }

121、 pc->next = C;

122、 return C;

123、}

124、AGG *DifferAgg(AGG *A,AGG *B) { // 返回A、B的差集 A-B

125、 AGG *head,*p,*q,*r;

126、 int tag;

127、 head = r = (AGG *)malloc(sizeof(AGG));

128、 for(p = A->next; p != A; p = p->next) {

129、 tag = 1;

130、 for(q = B->next; q != B && tag; q = q->next)

131、 tag = p->num != q->num;

132、 if(tag) {

133、 r->next = (AGG *)malloc(sizeof(AGG));

134、 r = r->next;

135、 r->num = p->num;

136、 }

137、 }

138、 for(p = B->next; p != B; p = p->next) {

139、 tag = 1;

140、 for(q = A->next; q != A && tag; q = q->next)

141、 tag = p->num != q->num;

142、 if(tag) {

143、 r->next = (AGG *)malloc(sizeof(AGG));

144、 r = r->next;

145、 r->num = p->num;

146、 }

147、 }

148、 r->next = head;

149、 RiseSort(head);

150、 return head;

151、}

152、void PrintList(AGG *head) {

153、 AGG *p = head->next;

154、 short counter = 0;

155、 while(p != head) {

156、 if(counter && counter%10 == 0) printf(" ");

157、 printf("%5d",p->num);

158、 counter++;

159、 p = p->next;

160、 }

161、 if(counter % 10) printf(" ");

162、}

163、void freeheap(AGG *head) {

164、 AGG *p,*q;

165、 p = head;

166、 q = p->next;

167、 while(q != head) {

168、 p = q;

169、 q = p->next;

170、 free(p);

171、 }

172、 free(head);

173、}

174、int main() {

175、 AGG *A,*B,*C,*D,*E;

176、 printf("创建集合 A: ");

177、 A = CreateAgg();

178、 printf("创建集合 B: ");

179、 B = CreateAgg();

180、 printf("集合A的元素有: ");

181、 PrintList(A);

182、 printf("集合B的元素有: ");

183、 PrintList(B);

184、 C = MutualAgg(A,B);

185、 printf("交集 C = A∩B: ");

186、 PrintList(C);

187、 printf("并集 D = A∪B : ");

188、 D = MergeAgg(A,B);

189、 PrintList(D);

190、 printf("差集 D = A-B : ");

191、 E = DifferAgg(A,B);

192、 PrintList(E);

193、 freeheap(A);

194、 freeheap(B);

195、 freeheap(C);

196、 freeheap(D);

197、 freeheap(E);

198、 printf(" ");

199、 return 0;

200、}

本文到此讲解完毕了,希望对大家有帮助。