数据结构(双链表

简介: 数据结构(双链表

1. 讲解:

2. C++代码实现:

#include <stdlib.h>
#include <iostream>
#include <stdio.h>

using namespace std;

#define ElemType int

typedef struct DLNode {
  ElemType data;
  struct DLNode *prior, *next;
}DLNode, * DLinkList;

// 判断空
bool Empty(DLinkList L) {
  if (L->next == NULL) return true;
  else return false;
}

// 给定节点后插入节点
bool InsertNextDLNode(DLNode* p, DLNode* s) {
  if (p == NULL || s == NULL) return false;

  s->next = p->next;
  if (p->next != NULL) {
    p->next->prior = s;
  }
  p->next = s;
  s->prior = p;
  return true;
}

// 给定节点前插入节点
bool InsertPriorDLNode(DLNode* p, DLNode* s) {
  return InsertNextDLNode(p->prior, s);
}

// 删除给定节点的后继节点
bool DeleteNextDLNode(DLNode* p) {
  if (p == NULL) return false;
  DLNode* q = p->next;
  if (q == NULL) return false;

  p->next = q->next;
  if (q->next != NULL) {
    q->next->prior = p;
  }
  free(q);
  
  return true;
}

// 销毁
void DestoryList(DLinkList& L) {
  while (L->next != NULL) {
    DeleteNextDLNode(L);
  }
  free(L);
  L = NULL;
}

int main() {
    DLinkList L;

    // 初始化双向链表
    L = (DLNode*)malloc(sizeof(DLNode));
    L->next = NULL;
    L->prior = NULL;

    // 插入节点示例
    DLNode* node1 = (DLNode*)malloc(sizeof(DLNode));
    node1->data = 1;
    InsertNextDLNode(L, node1); // 在头节点后插入node1

    DLNode* node2 = (DLNode*)malloc(sizeof(DLNode));
    node2->data = 2;
    InsertNextDLNode(node1, node2); // 在node1后插入node2

    DLNode* node3 = (DLNode*)malloc(sizeof(DLNode));
    node3->data = 3;
    InsertNextDLNode(node2, node3); // 在node2后插入node3

    // 打印双向链表内容
    DLNode* temp = L->next; // 跳过头节点
    while (temp != NULL) {
        cout << temp->data << " ";
        temp = temp->next;
    }
    cout << endl;

    // 删除节点示例
    DeleteNextDLNode(node1); // 删除node1后的节点

    // 再次打印双向链表内容
    temp = L->next; // 重新跳过头节点
    while (temp != NULL) {
        cout << temp->data << " ";
        temp = temp->next;
    }
    cout << endl;

    // 销毁双向链表
    DestoryList(L);

    return 0;
}
目录
相关文章
|
3天前
|
存储
数据结构链表详解(不仅顺序表可以,我链表也可以)
数据结构链表详解(不仅顺序表可以,我链表也可以)
12 0
|
5天前
|
存储
数据结构第二课 -----线性表之单向链表
数据结构第二课 -----线性表之单向链表
|
5天前
|
存储 算法 Java
数据结构与算法 数组和链表
数据结构与算法 数组和链表
12 0
|
5天前
|
存储 Java
深入浅出数据结构之链表
深入浅出数据结构之链表
|
5天前
|
存储 缓存
[数据结构]~双向+循环链表从(0~1)
[数据结构]~双向+循环链表从(0~1)
|
5天前
|
存储
数据结构第三课 -----线性表之双向链表
数据结构第三课 -----线性表之双向链表
|
5天前
|
存储 Java
数据结构奇妙旅程之顺序表和链表
数据结构奇妙旅程之顺序表和链表
|
5天前
|
存储 C语言
数据结构基础:双链表结构、实现
数据结构基础:双链表结构、实现
|
5天前
|
存储
数据结构基础:一篇文章教你单链表(头插,尾插,查找,头删等的解析和代码)
数据结构基础:一篇文章教你单链表(头插,尾插,查找,头删等的解析和代码)
|
5天前
|
C语言
数据结构:5、链表之双向链表
数据结构:5、链表之双向链表
25 0