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;
    
    }

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

  • 相关阅读:
    pku2992 Divisors
    pku3090 Visible Lattice Points
    pku3615 Cow Hurdles
    禁止 verifier.dll 监控程序
    运行ogreSDK的samples
    #pragma pack(n) 啥时候可以不再忘记?
    游戏开发流程图。
    希望可以尽快的写篇自己的成果。
    windows与OS X下的std::string
    VS2008鼠标右键不灵敏,TFS的Local Path无法打开对应文件夹
  • 原文地址:https://www.cnblogs.com/Arvin-JIN/p/8976820.html
Copyright © 2011-2022 走看看