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

    你可能感兴趣的文章
    PHP 统计数据功能 有感
    查看>>
    SpringBoot处理JSON数据
    查看>>
    PHP 输入输出流合集
    查看>>
    php--防止sql注入的方法
    查看>>
    php-cgi(fpm-cgi) 进程 CPU 100% 与 file_get_content...
    查看>>
    php-兔子问题,斐波那契数列
    查看>>
    php-有序数组合并后仍有序
    查看>>
    php-约瑟夫问题
    查看>>
    php.ini中常见的配置信息选项
    查看>>
    php.ini配置中有10处设置不当,会使网站存在安全问题
    查看>>
    PHP7 新特性
    查看>>
    PHP7+MySQL5.7+Nginx1.9. on Ubuntu 14.0
    查看>>
    php7.1.6 + redis
    查看>>
    php7中使用php_memcache扩展
    查看>>
    PHP7中十个需要避免的坑
    查看>>
    php7和PHP5对比的新特性和性能优化
    查看>>
    PHP7安装pdo_mysql扩展
    查看>>
    PHP7实战开发简单CMS内容管理系统(7) 后台登录架构 用户登录校验
    查看>>
    php7,从phpExcel升级到PhpSpreadsheet
    查看>>
    PHP8中match新语句的操作方法
    查看>>