#include<iostream>
using namespace std;
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define LIST_INIT_SIZE 10
#define LISTINCREMENT 5
typedef int ElemType;
typedef int Status;
typedef struct {
ElemType* elem;
int length;
int listsize;
}SqList;
Status InitList_Sq(SqList& L) {
L.elem = (ElemType*)malloc(LIST_INIT_SIZE * sizeof(ElemType));
if (!L.elem) exit(OVERFLOW);
L.length = 0;
L.listsize = LIST_INIT_SIZE;
return OK;
}
Status ListInsert_Sq(SqList& L, int i, ElemType e) {
ElemType* newbase, * p, * q;
if (i<1 || i>L.length + 1) return ERROR;
if (L.length >= L.listsize) {
newbase = (ElemType*)realloc(L.elem, (L.listsize + LISTINCREMENT) * sizeof(ElemType));
if (!newbase) exit(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;
}
void showList(SqList L) {
for (int i = 0; i < L.length; i++) {
printf("&d\t", L.elem[i]);
}
}
Status GetElem(SqList L, int i, ElemType& e) {
if (i<1 || i> L.length) return ERROR;
//e=*(L.elem+i-1);
e = L.elem[i - 1];
return OK;
}
int LocateElem_Sq(SqList L, ElemType& e, Status(*compare) (ElemType x, ElemType y)) {
int i = 1;
ElemType* p;
p = L.elem;
while (i <= L.length && !(*compare)(*p++, e)) ++i;
if (i <= L.length) return i;
else return 0;
}//LocateElem_Sq
void MergeList(SqList& L1, SqList L2) {
ElemType e;
int L1_len = L1.length;
int L2_len = L2.length;
for (int i = 1; i <= L2_len; i++) {
GetElem(L2, i, e);
if (!LocateElem_Sq(L1, e , equals ))
ListInsert_Sq(L1, ++L1_len, e);
}
}
void main() {
SqList L1, L2;
InitList_Sq(L1);
InitList_Sq(L2);
int i = 1;
while (i) {
cout << "输入插入L1线性表元素的位置,输入0结束" << endl;
cin >> i;
if (i == 0) { break; }
cout << "输入插入L1线性表元素" << endl;
ElemType e;
cin >> e;
ListInsert_Sq(L1, i, e);
}
showList(L1);
cout << "\n";
i = 1;
while (i) {
cout << "输入插入L2线性表元素的位置,输入0结束" << endl;
cin >> i;
if (i == 0) { break; }
cout << "输入插入L2线性表元素" << endl;
ElemType e;
cin >> e;
ListInsert_Sq(L2, i, e);
}
showList(L2);
cout << "\n";
MergeList(L1, L2);
showList(L1);
}
equals确实没定义呀