【数据结构/C++】线性表_双链表基本操作

cpp 复制代码
#include <iostream>
using namespace std;
typedef int ElemType;
// 3. 双链表
typedef struct DNode
{
  ElemType data;
  struct DNode *prior, *next;
} DNode, *DLinkList;
// 初始化带头结点
bool InitDNodeList(DLinkList &L)
{
  L = (DNode *)malloc(sizeof(DNode));
  if (L == NULL)
  {
    return false;
  }
  L->prior = NULL;
  L->next = NULL;
  return true;
}
// 在第 i 个位置插入元素 e
bool InsertDNodeList(DLinkList &L, int i, ElemType e)
{
  DNode *p = L, *s;
  int j = 0;
  while (p != NULL && j < i - 1)
  {
    p = p->next;
    j++;
  }
  if (p == NULL)
  {
    cout << "插入位置不合法" << endl;
    return false;
  }
  s = (DNode *)malloc(sizeof(DNode));
  s->data = e;
  // 判断是否在空表中插入
  if (p->next == NULL)
  {
    s->next = NULL;
    s->prior = p;
    p->next = s;
    return true;
  }
  else
  {
    s->next = p->next;
    s->prior = p;
    p->next->prior = s;
    p->next = s;
    return true;
  }
}
// 删除第 i 个元素,并返回元素 e
bool DeleteDNodeList(DLinkList &L, int i, ElemType &e)
{
  DNode *p = L, *q;
  int j = 0;
  while (p != NULL && j < i - 1)
  {
    p = p->next;
    j++;
  }
  if (p == NULL)
  {
    cout << "删除位置不合法" << endl;
    return false;
  }
  q = p->next;
  e = q->data;
  p->next = q->next;
  q->next->prior = p;
  free(q);
  return true;
}
// 遍历双链表
void TraverseDNodeList(DLinkList L)
{
  DNode *p = L->next;
  while (p != NULL)
  {
    cout << p->data << " ";
    p = p->next;
  }
  cout << endl;
}
int main()
{
  DLinkList L;
  ElemType e;
  InitDNodeList(L);
  InsertDNodeList(L, 1, 1);
  InsertDNodeList(L, 2, 2);
  InsertDNodeList(L, 3, 3);
  TraverseDNodeList(L);
  DeleteDNodeList(L, 2, e);
  cout << "删除元素为:" << e << endl;
  TraverseDNodeList(L);
  return 0;
}
相关推荐
老胖闲聊11 分钟前
Python Copilot【代码辅助工具】 简介
开发语言·python·copilot
Blossom.11815 分钟前
使用Python和Scikit-Learn实现机器学习模型调优
开发语言·人工智能·python·深度学习·目标检测·机器学习·scikit-learn
曹勖之1 小时前
基于ROS2,撰写python脚本,根据给定的舵-桨动力学模型实现动力学更新
开发语言·python·机器人·ros2
豆沙沙包?1 小时前
2025年- H77-Lc185--45.跳跃游戏II(贪心)--Java版
java·开发语言·游戏
军训猫猫头1 小时前
96.如何使用C#实现串口发送? C#例子
开发语言·c#
liuyang-neu2 小时前
java内存模型JMM
java·开发语言
int型码农2 小时前
数据结构第八章(一) 插入排序
c语言·数据结构·算法·排序算法·希尔排序
利刃大大2 小时前
【在线五子棋对战】二、websocket && 服务器搭建
服务器·c++·websocket·网络协议·项目
喜欢吃燃面2 小时前
C++刷题:日期模拟(1)
c++·学习·算法
SHERlocked932 小时前
CPP 从 0 到 1 完成一个支持 future/promise 的 Windows 异步串口通信库
c++·算法·promise