您现在的位置是:首页 >精选问答 > 2024-05-03 08:01:33 来源:
已知集合a等于{x|x2-8x-20}(已知集合a)
大家好,我是小夏,我来为大家解答以上问题。已知集合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、}
本文到此讲解完毕了,希望对大家有帮助。