循环双链表的简单操作

来源:互联网 发布:互联港湾 知乎 编辑:程序博客网 时间:2024/05/21 15:25
<span style="font-size:18px;">下面是循环双链表的简单操作,其中很多细节没有考虑到,比如没有判断空链表,目的提供思想,如有出现错误,请大家指正!</span>
#include<iostream>//#include<stdlib.h>using namespace std;struct List {    int data;    struct List *last, *next;};List *CreateList() {    List *first;    first = new List; //first = (List *)malloc(sizeof(List));    first->next = first;    first->last = first;    return first;}List *InitialList(List *first) {    List *p, *head;    head = first;     for (int i = 0; i < 5; i++) {        p = new List;        p->data = i;        p->last = head;     head->next = p;                head = p;    }    first->last = head;    head->next = first;    return first;}    void PrintList(List *first){        List *q = first;        first = first->next;        cout << "正序打印:";        for (; first != q; first = first->next) {            cout << first->data << " ";        }                cout << endl;        List *p = first;        first = first->last;        cout << "逆序打印:";        for (; first != p; first = first->last) {            cout << first->data << " ";        }    }    void InsertList(List *first,int i,int x) {        List *head, *p;        head = first;        for (int j = 0; j < i - 1; j++) {            head = head->next;         }                p = new List;        p->data = x;        p->last = head;        p->next = head->next; //P        head->next->last = p;          head->next = p;  //该过程操作有顺序,该步一定要在P之后,否则会覆盖head ->next    }    void DeleteList(List *first, int i) {        List *head, *p;        head = first;        for (int j = 0; j < i; j++) {            head = head->next;        }        p = head;        head->last->next = head->next;   //由于是循环双链表,可以直接以删除点为中心操作        head->next->last = head->last;        delete p;        p = NULL;        first = first->next;        for (; !first; first = first->next) {            cout << first->data << " ";        }    }        void DestoryList(List *first){            List *p, *head;            head = first;            while(head !=first){                p = head;                head = head ->next;                delete p;                            }            delete first; //一定要销毁头指针            first = NULL; //为了防止出现迷途指针,将头结点置空            cout << "链表已经销毁" << endl;            exit(0);        }        int main() {        List *s,*t;        s = CreateList();        t = InitialList(s);        DestoryList(t);        //InsertList(t, 3, 11);        //DeleteList(t,4);        PrintList(t);    }


0 0
原创粉丝点击