线性表的顺序存储

#include
using namespace std;
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
typedef int ElemType;
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef struct {
    ElemType* elem;//存储空间的基址
    int length;//当前线性表的长度
    int listsize;//当前线性表的存储容量
}SqList;
//构造一个空的线性表
Status InitList_Sq(SqList& L) {
    L.elem= new ElemType[LIST_INIT_SIZE];//L.elem为首元素的地址
    if (!L.elem) {//如果存储空间分配失败
        cout << "存储空间分配失败" << endl;
        exit(OVERFLOW);
    }
    L.lenght = 0;//当前线性表为空表,即线性表长度为0
    L.listsize = LIST_INIT_SIZE;
    cout << "一个空的线性表已经构建成功" << endl;
    return OK;
}
//对线性表进行赋值
Status ValueList_Sq(SqList& L) {
    int i, j;
    cout << "请输入元素的个数:";
    cin >> i;
    if (i > L.listsize) {
        while (1) {
            if (i > L.listsize) {
                L.elem = (ElemType*)realloc(L.elem, ((L.listsize + LISTINCREMENT)) * sizeof(ElemType));
                L.listsize += LISTINCREMENT;
            }
            else break;
        }
    }
    for (j = 0; j < i; j++) {
        cout << "请输入第" << j + 1 << "个元素";
        cin >> L.elem[j];
    }
    L.length = i;
    cout << "赋值成功" << endl;
    return OK;
}
//对线性表进行销毁 在销毁时,首先要判断线性表是否存在,
Status DistoryList_Sq(SqList& L) {
    if (!L.elem) {
        cout << "线性表还不存在,请先建立线性表" << endl;
        return ERROR;
    }
    //删除的步骤
    delete L.elem;
    L.elem = NULL;//delete 只是删除了内存L.emem还是指向那
    L.length = 0;
    L.listsize = 0;
    cout << "线性表已经销毁" << endl;
    return OK;
}
//判断线性表是否为空
Status ListEmpty_Sq(SqList L) {
    if (L.elem) {
        if (L.length != 0) {
            cout << "线性表不是空表" << endl;
            return FALSE;
        }
        else
            cout << "线性表是空表" << endl;
            return TRUE;
    }
    else {
        cout << "线性表不存在,无法判断" << endl;
    }
    return OK;
}
//获取线性表的长度
Status ListLength_Sq(SqList L) {
    if (L.elem) {
        int k;
        k = L.length;
        cout << "线性表长度为" << k << endl;
        return OK;
    }
    else
        cout << "线性表不存在,无法判断" << endl;
    return OK;
}
//获取线性表某一位置对应的元素
Status GetElem_Sq(SqList L, int index) {
    int Num;
    if (index <= 0 || index > L.length) {
        cout << "请输入一个有效的数字" << endl;
        return ERROR;
    }
    Num = L.elem[index - 1];
    return Num;
}
//在线性表某一位置插入元素
Status ListInsert_Sq(SqList& L, int i, ElemType e) {
    ElemType* newbase;
    int* q, * p;
    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) {
            cout << "存储空间分配失败" << endl;
            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++;
    cout << "插入元素成功" << endl;
    return OK;
}
//删除线性表某一位置的元素
Status DeleteList_Sq(SqList& L, int i) {
    int* p, * q;
    if (i<1 || i>L.length)return ERROR;//删除位置不合法
    p = &(L.elem[i]);
    q = &(L.elem[L.length-1]);
    for (p; p <= q; p++) {
        *(p - 1) = *p;
    }
    L.length--;
    cout << '第' << i << "个元素删除成功" << endl;
    return OK;
}
//................
int main() {
    return 0;
}

你可能感兴趣的:(数据结构)