仅以此博客记录学习经历
#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define ERROR 0
#define OK 1
#define OVERFLOW -1
class Sqlist{
public:
int* elem;
int length;
int listsize;
};
int init_Sqlist(Sqlist& L);
int insert_Sqlist(Sqlist& L, int i, int e);
int locate(Sqlist L, int e);
void unionmerge(Sqlist& la, Sqlist lb);
int ListDelete_Sq(Sqlist& L, int i, int& e);
int main() {
int i = -1, m = -1, n = -1, e = -1;
Sqlist la = { 0 }, lb = { 0 };
cout << "请输入第一个集合la中的元素个数:";
cin >> m;
cout << "请输入第二个集合lb中的元素个数:";
cin >> n;
init_Sqlist(la);
cout << "请输入第一个集合la中的各个元素:";
for (int i = 1; i <= m; ++i) {
cin >> e;
insert_Sqlist(la, i, e);
}
printf("第一个集合la中的 %d 个元素依次是:", la.length);
for (int i = 0; i < la.length; i++) {
printf("%d ", *(la.elem + i));
}
cout << endl;
init_Sqlist(lb);
cout << "请输入第二个集合lb中的各个元素:";
for (int i = 1; i <= n; i++) {
cin >> e;
insert_Sqlist(lb, i, e);
}
printf(" 第二个集合lb中的 %d 个元素依次是:",lb.length);
for (int i = 0; i < lb.length; i++) {
printf("%d ", *(lb.elem + i));
}
cout << endl;
unionmerge(la, lb);
cout << endl;
printf("合并后集合la中的 %d 个元素依次是:",la.length);
for (int i = 0; i < la.length; i++) {
printf("%d ", *(la.elem + i));
}
cout << endl;
cout << "请输入要删除第几个元素:";
cin >> i;
if (ListDelete_Sq(la, i, e)) {
printf("被删除的元素是:%d \n", e);
}
printf("删除后集合la中的 %d 个元素依次是:", la.length);
for (int i = 0; i < la.length; i++) {
printf("%d ", *(la.elem + i));
}
cout << endl;
return 0;
}
int init_Sqlist(Sqlist& L) {
L.elem = new int[LIST_INIT_SIZE];
if (!L.elem) { exit(OVERFLOW); }
L.length = 0;
L.listsize = LIST_INIT_SIZE;
return OK;
}
int insert_Sqlist(Sqlist& L, int i, int e) {
int* newbase = NULL;
int* p = nullptr;
int* q = NULL;
if (i < 1 || i > L.length + 1) { return ERROR; }
if (L.length >= L.listsize) {
newbase = (int* )realloc(L.elem,(L.listsize + LISTINCREMENT) * sizeof(int));
if (!newbase) { return OVERFLOW; }
L.elem = newbase;
L.listsize += LISTINCREMENT;
}
q = L.elem + i - 1;
for (p = L.elem + L.length - 1; p >= q; --p ) {
*(p + 1) = *p;
}
*q = e;
++L.length;
return OK;
}
int locate(Sqlist L, int e) {
int i = -1;
int* p = NULL;
p = L.elem;
while (i <= L.length && e != *p) {
++i;
++p;
}
if (i <= L.length){ return i; }
else { return 0; }
}
void unionmerge(Sqlist& la, Sqlist lb) {
int i = -1;
int e = -1;
for (int i = 0; i < lb.length; i++) {
e = *(lb.elem + i);
if (!locate(la, e)) {
insert_Sqlist(la, la.length + 1, e);
}
}
}
int ListDelete_Sq(Sqlist& L, int i, int& e) {
//在顺序表L中删除第i个元素,并用e返回其值
//i的合法值为 1 <= i <= ListLength_Sq(L)
int* p = NULL;
int* q = NULL;
if (i < 1 || i > L.length) { return ERROR; }
p = &(L.elem[i - 1]);
e = *p;
q = L.elem + L.length - 1;
for(++p; p <= q; ++p) {
*(p - 1) = *p;
}
--L.length;
return OK;
}