zoukankan      html  css  js  c++  java
  • 双链表基本操作

    #include <iostream>
    using namespace std; 
    
    typedef  int ElemType;
    
    typedef struct DLnode{
        DLnode*prior;
        DLnode*next;
        ElemType data;
    } DLinkList;
    
    
    //头插法
    void CreateListF(DLinkList *&list, ElemType a[], int n) {
        DLinkList *s;
        int i;
        list = (DLinkList *)malloc(sizeof(DLinkList));
        list->prior = list->next = NULL;
        for (i = 0; i < n; i++) {
            s = (DLinkList *)malloc(sizeof(DLinkList));
            s->data = a[i];
            s->next = list->next;
            if (list->next != NULL)
                list->next->prior = s;
            list->next = s;
            s->prior = list;
        }
    }
    
    //尾插法
    void CreateListR(DLinkList *&list, ElemType a[], int n) {
        DLinkList *p, *s;
        list = (DLinkList *)malloc(sizeof(DLinkList));
        list->prior = list->next = NULL;
        p = list;
        for (int i = 0; i < n; i++) {
            s = (DLinkList *)malloc(sizeof(DLinkList));
            s->data = a[i];
    
            s->next = p->next;
            s->prior = p;
            p->next = s;
            p = s;
        }
    }
    
    // 插入数据
    bool ListInsert(DLinkList *&list, int i, ElemType e) {
        int j = 0;
        DLinkList *s, *p;
        p = list;
        while (j <i -1 && p != NULL)
        {
            j++;
            p = p->next;
        }
        if (p == NULL) {
            return false;
        }
        else {
            s = (DLinkList *)malloc(sizeof(DLinkList));
            s->data = e;
            s->next = p->next;
            if (p->next != NULL) {
                p->next->prior = s;
            }
            p->next = s;
            s->prior = p;
            return true;
        }
    }
    
    //删除数据
    bool Delnode(DLinkList *&list, int i, ElemType e) {
        int j = 0;
        DLinkList *p,*q;
        p = list;
        while (j < i - 1 && p != NULL) {
            j++;
            p = p->next;
        }
        if (p == NULL) {
            return false;
        }
        else {
            q = p->next;
            if (q == NULL)
                return false;
            e = q->data;
            p->next = q ->next;
            q->next->prior = p;
            free(q);
            return true;
        }
    
    }
    
    void DispList(DLinkList * list) {
        DLinkList *p;
        p = list->next;
        while (p != NULL) {
            cout << p->data << "  ";
            p = p->next;
        }
    }
    
    
    int main() {
        const int n = 7;
        int a[n];
        cout << "Input " << n << " numbers:";
        for (int i = 0; i < n; i++) {
            cin >> a[i];
        }
        DLinkList *lista, *listb;
        CreateListF(lista, a, n);
        CreateListR(listb, a, n);
        cout << "头(lista)";
        DispList(lista);
        cout << endl << "尾(listb)";
        DispList(listb);
    
        cout << endl << endl;
        int loca, m;
        cout << "输入要插入的数据和位置(lista):";
        cin >> m >> loca;
        if (ListInsert(lista, loca, m)) {
            DispList(lista);
            cout << endl << endl;
        }
        else cout << "插入失败" << endl;
    
        cout << "输入要删除的数据的位置(lista):";
        cin >> loca;
        if (Delnode(lista, loca, m)) {
            DispList(lista);
            cout << endl << endl;
        }
        else cout << "插入失败" << endl;
    
    }

    参考书籍《数据结构教程》李春葆版

  • 相关阅读:
    spring-tool-suite-4下载安装及报错的解决办法
    CentOS 6.5使用yum快速搭建LAMP环境
    jquery省份城市选择器
    js 将json字符串转换为json对象的方法解析
    Spring MVC添加支持Http的delete、put请求!(HiddenHttpMethodFilter)
    Filebeat工作原理
    filebeat_config
    Docker设置http代理
    转-OWASP CSRFGuard使用细节
    转-JavaWeb三大组件之Listener监听器
  • 原文地址:https://www.cnblogs.com/Arvin-JIN/p/8976820.html
Copyright © 2011-2022 走看看