-
Notifications
You must be signed in to change notification settings - Fork 0
/
un.cpp
186 lines (158 loc) · 4.34 KB
/
un.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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
/* PRESET CODE BEGIN - NEVER TOUCH CODE BELOW */
#include <stdio.h>
#include <stdlib.h>
#define LIST_MAX_SIZE 100 //空间初始大小
#define OK 1
#define ERROR 0
typedef int ElemType; //元素的数据类型Q
typedef int Status; //状态。函数返回值
typedef struct {
// ElemType elem[ LIST_MAX_SIZE ]; // 存储空间
ElemType * elem; // 存储空间
int length; // 当前元素个数
int listsize; // 能够保存的最大元素数量
} SqList;
// 以下为函数原型
Status InitList( SqList & );
Status ListInsert( SqList &, int, ElemType ); //这是需要你编写的基本操作
Status GetElem( SqList, int, ElemType & ); //这是需要你编写的基本操作
int ListLength( SqList ); //这是需要你编写的基本操作
Status ListTraverse( SqList &, void (*)( ElemType ) );
void ListUnion( SqList &, SqList );
void out( ElemType );
int equal(ElemType, ElemType );
Status LocateElem(SqList, ElemType, Status (*)(ElemType,ElemType));
/*
int ListLength(SqList L){
return L.length;
}
Status GetElem(SqList L, int i, ElemType &e){
//取第i个元素赋值给e
if (i > 0 && i <= L.length){
e = L.elem[i-1];}
return OK;
}
Status ListInsert( SqList &L, int i, ElemType e ){
int len = L.length;
if (i<0||i>=len+1){ return 0;}
if (len >= L.listsize){return 0;}
for (int j=len; j>=i; j--){
printf("%d", len);
L.elem[j] = L.elem[j-1];
}
L.elem[i] = e;
L.length++;
return OK;
}
*/
Status ListInsert(SqList &L, int i, ElemType e){
int len = L.length;
if (i < 0 || i > len + 1){ return 0;}
if (len >= L.listsize){return 0;}
//if (len == 0)
for (int j=len; j>=i; j--){
L.elem[j] = L.elem[j-1];
}
L.elem[i - 1] = e;
L.length++;
return OK;
}
Status GetElem(SqList L, int i, ElemType &e)
{
if (i > 0 || i <= L.length){
e = L.elem[i - 1];
}
return OK;
}
int ListLength(SqList L) {
return L.length;
}
// 以下为函数定义
Status InitList( SqList & L ) // 建立一个空的线性表 L
{
L.elem = (ElemType *)malloc(LIST_MAX_SIZE*sizeof(ElemType));
// if ( !L.elem ) exit(-1); // 失败则终止程序
L.length = 0; // 空表长度为0
L.listsize = LIST_MAX_SIZE;
return OK;
}
Status ListTraverse( SqList &L, void (*visit)( ElemType ) )
{ // 依次对L的每个元素调用函数visit()。若visit()失败,则操作失败
int i, L_len = ListLength( L );
ElemType e;
for ( i = 1; i <= L_len; i++ ) {
GetElem(L, i, e);
(*visit)( e );
}
return OK;
}
int equal(ElemType x, ElemType y)
{ return x==y;
}
Status LocateElem( SqList L, ElemType e,
Status (*compare)(ElemType,ElemType) )
{ //在L中查找与元素 e 满足compare() 的第 1 个元素
//返回 L 中第 1 个与 e 满足关系compare( ) 的元素的位序
int i = 1;
ElemType * p;
while ( i<=L.length ) //
if ( (*compare)(e,L.elem[i-1]) ) break;
else i++;
if ( i <= L.length ) return i; // 找到 e,返回位序i
else return 0; //若没有找到,则返回0
}
void out( ElemType e )
{ printf("%d,", e);
}
void ListUnion( SqList &La, SqList Lb ) //求 A=A∪B
{ int La_len, Lb_len, i;
ElemType e;
La_len = ListLength( La ); // 求线性表的长度
Lb_len = ListLength( Lb );
for ( i = 1; i <= Lb_len; i++ ) {
GetElem(Lb, i, e); // 取Lb中第i个数据元素赋给e
if ( !LocateElem( La, e, equal ) )
ListInsert ( La, ++La_len, e ); // La中不存在和 e 相同的数据元素,则插入
}
}
int main()
{ SqList La, Lb;
int n, i;
ElemType e;
InitList( La );
InitList( Lb );
scanf("%d", &n); //读入集合A
for ( i=0; i<n; i++ )
{ scanf("%d", &e);
ListInsert( La, i+1, e );
}
scanf("%d", &n); //读入集合B
for ( i=0; i<n; i++ )
{ scanf("%d", &e);
ListInsert( Lb, i+1, e );
}
printf("Output La:");
ListTraverse( La, out );
printf("\nOutput Lb:");
ListTraverse( Lb, out );
ListUnion( La, Lb );
printf("\nResult La:");
ListTraverse( La, out );
printf("\n");
return OK;
}
/****************
Status ListInsert( SqList &L, int i, ElemType e )
{ //在顺序线性表L中第 i (1≤i≤L.length+1)个位置之前插入元素e,
Here is wating for you.
}
Status GetElem(SqList L, int i, ElemType &e)
{
Here is wating for you.
}
int ListLength(SqList L)
{
Here is wating for you.
}
*********************/
/* PRESET CODE END - NEVER TOUCH CODE ABOVE */