博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构 : 链表
阅读量:7154 次
发布时间:2019-06-29

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

双链表操作(不带头结点)

struct Node {    int val;    struct Node* prior, *next;    Node(int v) : val(v) { prior = NULL; next = NULL; }};

构建双链表

struct Node* build() {    struct Node* head = NULL;    struct Node* ptr = NULL;    int val;     while (cin >> val) {        if (head == NULL) {            head = new Node(val);            head->next = head;            ptr = head;        }        else {            ptr->next = new Node(val);            ptr->next->prior = ptr;            ptr = ptr->next;        }    }    if (head != NULL) {        head->prior = ptr;        ptr->next = head;    }    return head; }

遍历

//升序遍历void ascendingTraverse(struct Node* head) {    if (head == NULL)        return;    auto ptr = head;    do {        cout << ptr->val;        ptr = ptr->next;        if (ptr == head) {            cout << endl;        }        else {            cout << " ";        }    } while (ptr != head);}// 逆序遍历void descendingTraverse(struct Node* head) {    if (head == NULL)        return;    auto ptr = head->prior;    do {        cout << ptr->val;        ptr = ptr->prior;        if (ptr == head->prior) {            cout << endl;        }        else {            cout << " ";        }    } while (ptr != head->prior);}

插入排序 重点

/*移动结点内的元素,而不是结点本身*//*注意head会发生变化*/void sort(struct Node*& head) {     if (!head)        return;    for (auto ptr = head->next; ptr != head; ptr = ptr->next) {        int tmp = ptr->val;         struct Node* pri;        /* 注意该条件:pri != head->prior */        for (pri = ptr->prior; pri != head->prior && pri->val > tmp ; pri = pri->prior){            pri->next->val = pri->val;         }        pri->next->val = tmp;     }    int minNum = head->val;    auto newHead = head;     for (auto ptr = head->next; ptr != head; ptr = ptr->next) {        if (minNum > ptr->val) {            newHead = ptr;            minNum = ptr->val;        }    }    head = newHead; }

删除

void destroy(struct Node* head) {    if (!head)        return;    for (auto ptr = head->next; ptr != head; ) {        auto tmp = ptr->next;        delete ptr;        ptr = tmp;     }    delete head;}

转载地址:http://dzrgl.baihongyu.com/

你可能感兴趣的文章
审计工具lynis介绍
查看>>
保卫智能手机安全,让 SSL 数字证书给你多一层安全保护
查看>>
MySQL 起停脚本
查看>>
大数据:一场改变未来的信息革命
查看>>
MAC OS X 安装、配置、启动 rabbitMQ
查看>>
解决webuploader 在chrome 浏览器反应迟钝问题
查看>>
让EditPlus支持javac,java命令[图解]
查看>>
Python初学者的一些技巧
查看>>
centos安装epel源
查看>>
想不到的异或操作。。
查看>>
理解UIApplication
查看>>
例子 /maven-service-factory-api
查看>>
iOS运行回路(RunLoop)总结
查看>>
链表crud
查看>>
GitHub Pages上写完简历后报404
查看>>
硬盘的读写原理
查看>>
eclipse svn时忽略target .project .classpath等目录文件
查看>>
告警系统主脚本、主配置文件、监控项脚本
查看>>
CSS层叠样式表之CSS解析机制的优先级及样式覆盖问题探讨
查看>>
angularjs关于controller之间如何通讯
查看>>