博客
关于我
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 工具v简介
    查看>>
    Python编程入门指南:从零开始探索编程的奇妙世界
    查看>>
    python 常见内置函数setattr、getattr、delattr、setitem、getitem、delitem
    查看>>
    Python 常见的错误类型和继承关系
    查看>>
    python 常量_零基础学Python系列之一:Python的变量与常量
    查看>>
    Python 并发编程
    查看>>
    Python编程入门基础及高级技能、Web开发、数据分析和机器学习与人工智能
    查看>>
    python 序列化操作
    查看>>
    Python 开发者,这 7 个 VS Code 插件极力推荐
    查看>>
    python手把手视频_硬货 | 手把手带你构建视频分类模型(附Python演练))
    查看>>
    python 录音左右声道_Python分离立体声wav压缩文件的左右声道
    查看>>
    Python 循环异或对文件进行加解密
    查看>>
    Python开发环境搭建(附VMware安装包及虚拟机环境)
    查看>>
    python 微信扫码登录_python实现微信第三方网站扫码登录(Django)
    查看>>
    Python 快速下载依赖
    查看>>
    python实现非参数统计的Cochran检验 (附完整源码)
    查看>>
    python 怎么验证是否安装成功 scrapy
    查看>>
    Python 手写数字识别-1
    查看>>