线性表的链式存储

#include
using namespace std;
#define TRUE 1
#define FLASE 0
#define OK 1
#define ERROR 1
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
typedef int ElemType;
typedef struct LNode {
    ElemType data;
    struct LNode* next;
}LNode,*LinkList;
//构造一个空的头结点
Status InitList_L(LinkList& L) {
    L = new LNode[1];
    if (!L)return ERROR;//如果存储空间分配失败,返回ERROR
    L->next = NULL;
    cout << "空的头结点创建成功" << endl;
    return OK;
}
//对线性表进行插入元素操作
Status ValueList_L(LinkList& L, ElemType e) {
    LinkList s, p;
    p = L;
    while (p->next) {
        p = p->next;
    }
    s = new LNode[1];
    s->data = e;
    s->next = p->next;
    p->next = s;
    return OK;
}
//对线性表进行销毁
Status DistoryList_L(LinkList& L) {
    if (!L) {
        cout << "线性表不存在" << endl;
        return ERROR;
    }
    LinkList q = L->next;//q指向
    while (q) {
        free(L);
        L = q;
        q = L->next;
    }
    delete L;
    L = NULL;
    cout << "线性表已销毁" << endl;
    return OK;
}
//线性表的重置
Status ClearList_L(LinkList& L) {
    if (!L->next) {
        cout << "线性表为空表,不需要重置" << endl;
    }
    LinkList p, q;
    p = L->next;
    while (p) {
        q = p->next;
        free(p);
        p = q;
    }
    L->next = NULL;
    cout << "线性表已经重置" << endl;
    return OK;
}
//判断线性表是否为空
Status ListEmpty_L(LinkList L) {
    if (L) {
        if (L->next == NULL)cout << "线性表是空表" << endl;
        else cout << "线性表不是空表" << endl;
    }
    else
        cout << "线性表不存在" << endl;
    return OK;
}
//获取线性表的长度
Status ListLength_L(LinkList L, int count) {
    LinkList p = L->next;
    while (p) {
        p = p->next;
        count++;
    }
    return count;
}
//获取线性表某一位置对应的元素
Status GetElem_L(LinkList L, int index) {
    LinkList p;
    p = L->next;
    int count = 0;
    while (p&&count         p = p->next;
        count++;
    }
    if (!p || count>index) {
        cout << "当前元素没有元素" << endl;
        return ERROR;
    }
    cout << "第" << index << "个元素是" << p->data << endl;
    return OK;
}
//在线性表某一位置插入元素
Status ListInsert_L(LinkList& L, int index, ElemType e) {
    LinkList p, q;
    p = L;
    int count = 0;
    while (p && count < index - 1) {
        p = p->next;
        count++;
    }
    if (!p || count > index - 1) {
        cout << "当前位置无法插入元素" << endl;
        return ERROR;
    }
    q = new LNode[1];
    q->data = e;
    q->next = p->next;
    p->next = q;
    cout << "元素插入成功" << endl;
    return OK;
}
//删除线性表某一位置的元素
Status DeleteList_L(LinkList& L, int index) {
    LinkList p, q;
    p = L;
    int count = 0;
    while (!p && count < index - 1) {
        p = p->next;
        count++;
    }
    if (!(p->next) || count > index - 1) {
        cout << "当前位置无法删除元素" << endl;
        return ERROR;
    }
    q = p->next;
    p->next = q->next;
    free(q);
    q = NULL;
    cout << "当前位置元素已经删除" << endl;
    return OK;
}
int main() {
    return 0;
}

你可能感兴趣的:(c++,算法,数据结构)