线性表的顺序表示Demo示例

#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;
}
posted @ 2020-10-11 21:15  Wench  阅读(105)  评论(0)    收藏  举报