1. SeqList.h
#pragma once
#include <iostream>
using namespace std;
#include <stdlib.h>
//#include "LinearList.h"
int const defaultSize = 100;
template <class T>
class SeqList {
protected:
T* data;
int maxSize;
int last;
void reSize(int newSize);
public:
SeqList(int sz = defaultSize);
SeqList(SeqList<T>& L);
SeqList() { delete[] data; }
int Size() const { return maxSize; }
int Length() const { return last + 1; }
int Search(T& x) const;
int Locate(int i) const;
bool getData(int i, T& x)const {
if (i > 0 && i <= last + 1) {
x = data[i - 1];
return true;
}
else {
return false;
}
}
bool setData(int i, T& x) {
if (i > 0 && i <= last + 1)
data[i - 1] = x;
}
bool Insert(int i, T& x);
bool Remove(int i, T& x);
bool IsEmpty() {
return (last == -1) ? true : false;
}
void input();
void output();
SeqList<T> operator= (SeqList<T>& L);
};
2.SeqList.cpp
#include <iostream>
using namespace std;
#include "seqList.h"
template <class T>
SeqList<T>::SeqList(int sz) {
if (sz > 0) {
maxSize = sz; last = -1;
data = new T[maxSize];
if (data == NULL) {
{cerr << "存储分配错误!" << endl; exit(1); }
}
}
}
template <class T>
SeqList<T>::SeqList(SeqList<T>& L) {
maxSize = L.Size(); last = L.Length() - 1; T value;
data = new T[maxSize];
if (data == NULL) {
cerr << "存储分配错误!" << endl; exit(1);
}
for (int i = 1; i <= last + 1; i++) {
L.getData(i, value);
data[i - 1] = value;
}
}
template <class T>
void SeqList<T>::reSize(int newSize) {
if (newSize <= 0) {
cerr << "无效的数组大小!" << endl; return;
}
if (newSize = maxSize) {
T* newarray = new T[maxSize];
if (newarray == NULL) {
cerr << "存储分配错误!" << endl; exit(1);
}
int n = last + 1;
T* srcptr = data;
T* destptr = newarray;
while (n--) {
*destptr++ = *srcptr++;
delete[] data;
data = newarray;
maxSize = newSize;
}
}
}
template <class T>
int SeqList<T>::Search(T& x) const {
for (int i = 0; i <= last; i++) {
if (data[i] == x) {
return i + 1;
}
}
return 0;
}
template <class T>
int SeqList<T>::Locate(int i) const {
if (i >= 1 && i <= last + 1) {
return i;
}
else {
return 0;
}
}
template <class T>
bool SeqList<T>::Insert(int i, T& x) {
if (last = maxSize - 1) {
return false;
}
if (i < 0 || i > last + 1) {
return false;
}
for (int j = last; j >= i; j--) {
data[j + 1] = data[j];
data[i] = x;
last++;
return true;
}
}
template <class T>
bool SeqList<T>::Remove(int i, T& x) {
if (last == -1) return false;
if (i<1 || i> last + 1) return false;
x = data[i - 1];
for (int j = i; j <= last; j++) {
data[j - 1] = data[j];
}
last--;
return true;
}
template <class T>
void SeqList<T>::input() {
cout << "开始建立顺序表,请输入表中元素最后一个下标:";
while (1) {
cin >> last;
if (last <= maxSize-1) break;
cout << "表中元素下标输入有误,下标范围不能超过" << maxSize-1 << ": ";
}
for (int i = 0; i <= last; i++) {
cout << i + 1 << endl;
cin >> data[i];
}
}
template <class T>
void SeqList<T>::output() {
cout << "顺序表当前元素最后位置为:" << last << endl;
for (int i = 0; i <= last; i++) {
cout << "#" << i + 1 << ":" << data[i] << endl;
}
}
template <class T>
SeqList<T> SeqList<T>::operator=(SeqList<T>& L) {
maxSize = L.Size(); last = L.Length() - 1; T value;
data = new T[maxSize];
if (data == NULL) {
cerr << "存储分配错误!" << endl; exit(1);
}
for (int i = 1; i <= last + 1; i++) {
L.getData(i, value);
data[i - 1] = value;
}
}
void nuion(SeqList<int>& LA, SeqList<int>& LB) {
int n = LA.Length(), m = LB.Length(), i, k, x;
for (i = 0; i < m; i++) {
LB.getData(i, x);
k = LA.Search(x);
if (k == 0) {
LA.Insert(n, x);
n++;
}
}
}
void Intersection(SeqList<int>& LA, SeqList<int>& LB) {
int n = LA.Length(), m = LB.Length(), i = 1, k, x;
while (i <= n) {
LA.getData(i, x);
k = LB.Search(x);
if (k == 0) {
LA.Remove(i, x);
n--;
}
else i++;
}
}
int main() {
SeqList<int> A(5);
A.input();
A.output();
SeqList<int> B(8);
B.input();
B.output();
SeqList<int> C = B;
C.output();
nuion(A, B);
A.output();
B.output();
Intersection(B, A);
}