#include <iostream>
/**
* 线性表的顺序表表示与实现
*/
using namespace std;
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define MAXSIZE 100
typedef int Status;
typedef char ElemType;
typedef struct {
ElemType *elem;
int length;
} SqList;
// 线性表的初始化
Status InitList_Sq(SqList &L) { //构造一个空的顺序表
L.elem = new ElemType[MAXSIZE]; //为顺序表分配空间
if (!L.elem)
exit(OVERFLOW); //存储空间分配失败
L.length = 0; //空表长度为0
return OK;
}
// 销毁线性表
void DestroyList(SqList &L) {
if (L.elem)
delete L.elem; //释放存储空间
}
// 清空线性表
void ClearList(SqList &L) {
L.length = 0; //将线性表的长度置为0
}
// 求线性表长度
int GetLength(SqList L) {
return L.length;
}
// 判断线性表是否为空
int isEmpty(SqList L) {
if (L.length == 0)
return 1;
else
return 0;
}
// 顺序表的取值(根据位置 i 获取相应位置数据元素的内容)
int GetElem(SqList L, int i, ElemType &e) {
if (i < 1 || i > L.length)
return ERROR;
e = L.elem[i - 1];
return OK;
}
// 顺序表的查找 —— 在线性表L中查找与指定值e相同的数据元素的位置
int LocateElem(SqList L, ElemType e) {
for (int i = 0; i < L.length; ++i) {
if (L.elem[i] == e)
return i + 1;
}
return 0;
}
// 顺序表的插入 —— O(n)
Status ListInsert_Sq(SqList &L, int i, ElemType e) {
if (i < 1 || i > L.length + 1) {
printf("您输入的 i 值不合法\n");
return ERROR;
}
if (L.length == MAXSIZE) {
printf("该顺序表的存储空间已满\n");
return ERROR;
}
for (int j = 0; j >= i - 1; ++j) {
L.elem[j + 1] = L.elem[j]; //插入位置及之后的元素后移
}
L.elem[i - 1] = e;
L.length++;
return OK;
}
// 顺序表的删除 —— O(n)
Status ListDelete_Sq(SqList &L, int i) {
if (i < 1 || i > L.length) {
printf(" i 值不合法\n");
return ERROR;
}
for (int j = i; j <= L.length - 1; ++j) {
L.elem[j - 1] = L.elem[j];
}
L.length--;
return OK;
}
// 有序表的合并——顺序表的实现
void MergeList_Sq(SqList LA, SqList LB, SqList &LC) {
ElemType *pa = LA.elem;
ElemType *pb = LB.elem;
LC.length = LA.length + LB.length;
LC.elem = new ElemType[LC.length];
ElemType *pc = LC.elem;
ElemType *pa_last = LA.elem + LA.length - 1;
ElemType *pb_last = LB.elem + LB.length - 1;
while (pa <= pa_last && pb <= pb_last) {
if (*pa <= *pb)
*pc++ = *pa++;
else
*pc++ = *pb++;
}
while (pa <= pa_last) {
*pc++ = *pa++;
}
while (pb <= pb_last) {
*pc++ = *pb++;
}
}
int main() {
return 0;
}