1 //2016.9.4
2 #include <iostream>
3 #include <cstdio>
4
5 using namespace std;
6
7 const int maxsize = 100;
8
9 template<class T>
10 class seq_list
11 {
12 protected:
13 T *date;
14 int max_size;
15 int last;
16 public:
17 seq_list(int ms = maxsize);
18 seq_list(seq_list<T> &a);
19 ~seq_list(){delete [] date;}
20 int Length(){return last;}
21 bool Empty(){return last == 0;}
22 bool Full(){return last == maxsize;}
23 bool getDate(int pos, T &val) const
24 {if(pos>=0&&pos<last){val = date[pos]; return true;}else return false;}
25 bool Insert(int pos, T val);
26 bool Remove(int pos, T& val);
27 bool Update(int pos, T val);
28 bool Search(T x);
29 void output(){
30 for(int i = 0; i < last; i++)
31 cout<<date[i]<<" ";
32 cout<<endl;
33 }
34 seq_list<T> operator=(seq_list<T> &a);
35 };
36
37 template<class T>
38 seq_list<T>::seq_list(int ms)
39 {
40 if(ms > 0)
41 {
42 max_size = ms;
43 last = 0;
44 date = new T[max_size];
45 if(date == NULL)exit(1);
46 }
47 }
48
49 template<class T>
50 seq_list<T>::seq_list(seq_list<T> &a)
51 {
52 T tmp;
53 max_size = a.max_size, last = a.last;
54 date = new T[max_size];
55 if(date == NULL)exit(1);
56 for(int i = 0; i < last; i++)
57 {
58 a.getDate(i, tmp);
59 date[i] = tmp;
60 }
61 }
62
63 template<class T>
64 bool seq_list<T>::Insert(int pos, T val)
65 {
66 if(last == max_size)return false;
67 if(pos<0 || pos>last)return false;
68 for(int i = last; i > pos; i--)
69 date[i] = date[i-1];
70 date[pos] = val;
71 last++;
72 return true;
73 }
74
75 template<class T>
76 bool seq_list<T>::Remove(int pos, T& val)
77 {
78 if(pos<0 || pos >= last)return false;
79 if(last == 0)return false;
80 val = date[pos];
81 for(int i = pos; i < last; i++)
82 date[i] = date[i+1];
83 last--;
84 }
85
86 template<class T>
87 bool seq_list<T>::Update(int pos, T val)
88 {
89 if(pos<0 || pos>=last)return false;
90 date[pos] = val;
91 return true;
92 }
93
94 template<class T>
95 bool seq_list<T>::Search(T x)
96 {
97 for(int i = 0; i < last; i++)
98 if(date[i] == x)
99 return true;
100 return false;
101 }
102
103 template<class T>
104 seq_list<T> seq_list<T>::operator=(seq_list<T> &a)
105 {
106 delete [] date;
107 max_size = a.max_size, last = a.last;
108 date = new T[max_size];
109 if(date == NULL)exit(1);
110 T tmp;
111 for(int i = 0; i < last; i++)
112 {
113 a.getDate(i, tmp);
114 date[i] = tmp;
115 }
116 }
117
118 void Union(seq_list<int> &a, seq_list<int> &b)//两个集合的并
119 {
120 int n = a.Length(), m = b.Length(), tmp;
121 for(int i = 0; i < m; i++)
122 {
123 b.getDate(i, tmp);
124 if(!a.Search(tmp))
125 {
126 a.Insert(n, tmp);
127 n++;
128 }
129 }
130 }
131
132 void Intersection(seq_list<int> &a, seq_list<int> &b)//两个集合的交
133 {
134 int n = a.Length(), tmp;
135 for(int i = 0; i < n; i++)
136 {
137 a.getDate(i, tmp);
138 if(!b.Search(tmp))
139 a.Remove(i, tmp);
140 }
141 }
142
143 int main()
144 {
145 int tmp;
146 seq_list<int> a;
147 for(int i = 0; i < 10; i++)
148 a.Insert(i, i);
149 a.output();
150 a.Insert(1, 100);
151 a.output();
152 a.Remove(1, tmp);
153 a.output();
154 if(a.Search(5))cout<<"YES"<<endl;
155 else cout<<"NO"<<endl;
156 seq_list<int> b;
157 b = a;
158 b.output();
159 b.Update(5, 500);
160 b.output();
161 Union(a, b);
162 a.output();
163 Intersection(a, b);
164 a.output();
165 return 0;
166 }