-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathset.cpp
124 lines (104 loc) · 1.74 KB
/
set.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
#include <cstddef>
#include <stdlib.h>
#include <stdio.h>
#include <stdarg.h>
#include "set.h"
symset appendSet(symset s1, symset s2)
{
symset s;
snode* p;
s = p = (snode*) malloc(sizeof(snode));
s->elem = 0;
p->elem = 0;
while (s1 && s2)
{
p->next = (snode*) malloc(sizeof(snode));
p = p->next;
if (s1->elem < s2->elem)
{
p->elem = s1->elem;
s1 = s1->next;
}
else
{
p->elem = s2->elem;
s2 = s2->next;
}
}
while (s1)
{
p->next = (snode*) malloc(sizeof(snode));
p = p->next;
p->elem = s1->elem;
s1 = s1->next;
}
while (s2)
{
p->next = (snode*) malloc(sizeof(snode));
p = p->next;
p->elem = s2->elem;
s2 = s2->next;
}
p->next = NULL;
return s;
} // appendSet
void insertIntoSet(symset s, int elem)
{
snode* p = s;
snode* q;
while (p->next && p->next->elem < elem)
{
p = p->next;
}
q = (snode*) malloc(sizeof(snode));
q->elem = elem;
q->next = p->next;
p->next = q;
} // insertIntoSet
symset createSet(int elem, .../* SYM_NULL */)
{
va_list list;
symset s;
s = (snode*) malloc(sizeof(snode));
s->elem = 0;
s->next = NULL;
va_start(list, elem);
while (elem)
{
insertIntoSet(s, elem);
elem = va_arg(list, int);
}
va_end(list);
return s;
} // createSet
void destroySet(symset s)
{
snode* p;
while (s)
{
p = s;
s = s->next;
free(p);
}
} // destroySet
int checkIfInSet(int elem, symset s)
{
s = s->next;
while (s && s->elem < elem)
s = s->next;
if (s && s->elem == elem)
return 1;
else
return 0;
} // checkIfInSet
void printSet(symset s, const char *symtypeDesc[]) {
while (s->next) {
int idx = s->elem;
if (s->elem <= 41) {
printf("%s->", symtypeDesc[s->elem]);
}
s=s->next;
}
printf("END \r\n");
}
// EOF set.c