链表学习内容二

#include<cstdio>
#include <iostream>
using namespace std;
typedef struct DNode {
    int data;
    struct DNode* next, * prior;
}DNode,*DLinklist;
/*********双向链表的初始化************/
bool InitDlist(DLinklist& L) {
    L = new DNode;
    if (L == NULL) return false;
    L->next = NULL;
    L->prior = NULL;
    return true;
}
/*******双向链表的尾插法创建(头插法和单链表头插相同道理,不做赘述)*********/
 DLinklist RearInsert_Creat(DLinklist& L) {
     DNode *p, *rear;
     rear = L;
     int Data;
     cin >> Data;
     while (Data != 222)
     {
         p = new DNode;
         if (p ==NULL) perror("Error exists!");
         p->data = Data;
         rear->next = p;
         p->prior = rear;
         rear = p;
         cin >> Data;
     }
     rear->next = NULL;
     return rear;
}
 /*******插入*********/
 bool DLinklist_Insert(DNode *p,DNode* s){
     if (p == NULL || s == NULL) return false;
     p->next = s->next;
     p->prior = s;
     if (s->next != NULL) s->next->prior = p;//插入到链尾时;
     s->next = p;
     return true;
 }
int main()
{
    DLinklist L;
    InitDlist(L);
    DNode* s = L;
    RearInsert_Creat(L);
    while (s->next!=NULL)
    {
        s = s->next;
        cout << s->data << endl;
    }
}
/*****************循环链表的创建:
* 1.循环单链表就是让尾部的next指针指头指针,有利于单链表的前向操作及尾部操作
* 2.循环双链表就是让头指针的prior指针指向尾指针,尾指针指向头,有利于头尾的双向操作。
* 原理于操作都简单,不做赘述,注意判空条件(循环单链表,循环双链表判空条件都是是否指向自己,初始化也是都指向自己)
************************/

 

posted @ 2021-07-30 09:34  Mexcellent  阅读(31)  评论(0)    收藏  举报