博客
关于我
C++实现单链表基本操作
阅读量:116 次
发布时间:2019-02-26

本文共 4603 字,大约阅读时间需要 15 分钟。

C++?????????

?????????????????????????????????????????????????????????????????????????????????????????????

????????

#define OK     1#define ERROR  0typedef int Status;typedef char ElemType;

???????

typedef struct LNode {    ElemType data;    struct LNode *next;} LNode, *LinkList;LinkList L;  // ??????

?????

Status InitList(LinkList &L) {    L = new LNode;  // ?????    L->next = NULL;  // ??????????????    return OK;}

????

Status DestroyList(LinkList &L) {    while (L) {  // ???????        LinkList p = L;  // ??????        L = L->next;  // ????????        delete p;  // ?????????    }    return OK;}

????

Status ClearList(LinkList &L) {    if (!L) {  // ????        return OK;    }    LinkList p = L->next;  // ???????????    while (p) {  // ???????        LinkList q = p->next;  // ????????????        delete p;  // ??????        p = q;  // ????????    }    L->next = NULL;  // ??????????????    return OK;}

????????

int ListEmpty(LinkList L) {    return L->next ? 0 : 1;  // ??????????0?????1}

??????

int ListLength(LinkList L) {    int count = 0;    LinkList p = L->next;  // ??????????    while (p) {        count++;        p = p->next;    }    return count;}

???????i???

Status GetElem(LinkList L, int i, ElemType &e) {    if (i <= 0 || i > ListLength(L)) {        return ERROR;    }    LinkList p = L;    int j = 0;    while (p && j < i - 1) {        p = p->next;        j++;    }    if (!p || j >= i - 1) {        return ERROR;    }    e = p->data;    return OK;}

??????

Status LocateElem(LinkList L, ElemType &e) {    if (!L) {  // ????        return 0;    }    LinkList p = L;    int j = 0;    while (p && p->data != e) {        p = p->next;        j++;    }    if (p) {        return j;    } else {        return 0;    }}

?????

Status ListInsert(LinkList &L, int i, ElemType e) {    if (i <= 0 || i > ListLength(L) + 1) {        return ERROR;    }    LinkList p = L;    int j = 0;    while (p && j < i - 1) {        p = p->next;        j++;    }    if (!p || j >= i - 1) {        return ERROR;    }    LinkList s = new LNode;    s->data = e;    s->next = p->next;    p->next = s;    return OK;}

???????i???

Status ListDelete(LinkList &L, int i, ElemType &e) {    if (i <= 0 || i > ListLength(L)) {        return ERROR;    }    LinkList p = L;    int j = 0;    while (p && j < i - 1) {        p = p->next;        j++;    }    if (!p || j >= i - 1) {        return ERROR;    }    LinkList q = p->next;    e = q->data;    p->next = q->next;    delete q;    return OK;}

??????????

void CreateList_H(LinkList &L, int n) {    L = new LNode;  // ?????    L->next = NULL;  // ??????????????    for (int i = n; i > 0; --i) {        LinkList p = new LNode;  // ?????        cin >> p->data;  // ????        p->next = L->next;  // ????????        L->next = p;  // ???????????    }}

??????????

void CreateList_R(LinkList &L, int n) {    L = new LNode;  // ?????    L->next = NULL;  // ??????????????    LinkList r = L;  // ??????????    for (int i = 0; i < n; ++i) {        LinkList p = new LNode;  // ?????        cin >> p->data;  // ????        p->next = NULL;  // ??????????????        r->next = p;  // ?????????        r = p;  // ?????    }}

??????

int main() {    int ret = InitList(L);    if (ret) {        cout << "???????" << endl;    } else {        cout << "???????" << endl;    }    int i;    cout << "?????????";    cin >> i;    cout << "???" << i << "??????" << endl;    CreateList_H(L, i);  // ????    // CreateList_R(L, i);  // ????    cout << "????????" << ListLength(L) << endl;    ElemType e;    cout << "?????????????";    cin >> i;    GetElem(L, i, e);    cout << "???" << i << "??????" << e << endl;    cout << "?????????";    cin >> e;    LocateElem(L, e);    cout << "??" << e << "?????" << j << endl;    cout << "?????????????";    cin >> e >> i;    ret = ListInsert(L, i, e);    if (ret) {        cout << "????" << endl;    } else {        cout << "????" << endl;    }    cout << "???????????" << ListLength(L) << endl;    cout << "?????????????";    cin >> i;    ret = ListDelete(L, i, e);    if (ret) {        cout << "????" << endl;    } else {        cout << "????" << endl;    }    cout << "?????" << endl;    ClearList(L);    if (ListEmpty(L)) {        cout << "?????" << endl;    } else {        cout << "?????" << endl;    }    DestroyList(L);    cout << "??????" << endl;    return 0;}

????

  • ????????InitList????????????
  • ???????DestroyList??????????
  • ???????ClearList??????????????
  • ???????GetElem????????????????
  • ???????LocateElem???????????????
  • ???????ListInsert?????????????
  • ???????ListDelete????????????????
  • ????????CreateList_H?????????????CreateList_R?????????????
  • 转载地址:http://yvoy.baihongyu.com/

    你可能感兴趣的文章
    OSG学习:几何对象的绘制(四)——几何体的更新回调:旋转的线
    查看>>
    OSG学习:场景图形管理(一)——视图与相机
    查看>>
    OSG学习:场景图形管理(三)——多视图相机渲染
    查看>>
    OSG学习:场景图形管理(二)——单窗口多相机渲染
    查看>>
    OSG学习:场景图形管理(四)——多视图多窗口渲染
    查看>>
    OSG学习:新建C++/CLI工程并读取模型(C++/CLI)——根据OSG官方示例代码初步理解其方法
    查看>>
    Sql 随机更新一条数据返回更新数据的ID编号
    查看>>
    OSG学习:空间变换节点和开关节点示例
    查看>>
    OSG学习:纹理映射(一)——多重纹理映射
    查看>>
    OSG学习:纹理映射(七)——聚光灯
    查看>>
    OSG学习:纹理映射(三)——立方图纹理映射
    查看>>
    OSG学习:纹理映射(二)——一维/二维/简单立方图纹理映射
    查看>>
    OSG学习:纹理映射(五)——计算纹理坐标
    查看>>
    OSG学习:纹理映射(六)——灯光
    查看>>
    OSG学习:纹理映射(四)——三维纹理映射
    查看>>
    OSG:从源码看Viewer::run() 一
    查看>>
    osi 负载均衡
    查看>>
    OSI七层模型与TCP/IP五层模型(转)
    查看>>
    OSI七层模型与TCP/IP四层与五层模型详解
    查看>>
    OSI七层模型的TCP/IP模型都有哪几层和他们的对应关系?
    查看>>