博客
关于我
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/

    你可能感兴趣的文章
    python 多进程-基础
    查看>>
    python 多进程-进阶-进程池
    查看>>
    python 多进程-进阶-进程间通信之Pipe
    查看>>
    python 多进程-进阶-进程间通信之Queue
    查看>>
    python 如何“否定“value : 如果为真则返回假,如果为假则返回真
    查看>>
    Python 如何在 Web 环境中使用 Matplotlib 进行数据可视化
    查看>>
    python 字符串中特定字符替换,截取
    查看>>
    Python 字符串总结
    查看>>
    python 字符串显示中文_Python字符串开头的b"、u"、r"与中文乱码
    查看>>
    Python 字符串的几种拼装方式
    查看>>
    python 存入数据库bigint_python基础_MySQL的bigint类型
    查看>>
    python 学习 面向对象编程
    查看>>
    Python 学习日记第三篇 -- 字典
    查看>>
    Python 学习笔记(一)Data type
    查看>>
    python 安装echarts
    查看>>
    python 安装opencv及问题解决
    查看>>
    Python 安装程序:“写入文件 C:\Python27\pythonw.exe 时出错“
    查看>>
    Python 安装避坑指南:从入门到进阶
    查看>>
    Python 安装配置详解
    查看>>
    python 实现儿童算术游戏
    查看>>