【数据结构/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;
}
相关推荐
端平入洛16 小时前
delete又未完全delete
c++
端平入洛2 天前
auto有时不auto
c++
郑州光合科技余经理3 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
feifeigo1233 天前
matlab画图工具
开发语言·matlab
dustcell.3 天前
haproxy七层代理
java·开发语言·前端
norlan_jame3 天前
C-PHY与D-PHY差异
c语言·开发语言
琢磨先生David3 天前
Day1:基础入门·两数之和(LeetCode 1)
数据结构·算法·leetcode
哇哈哈20213 天前
信号量和信号
linux·c++
多恩Stone3 天前
【C++入门扫盲1】C++ 与 Python:类型、编译器/解释器与 CPU 的关系
开发语言·c++·人工智能·python·算法·3d·aigc
QQ4022054963 天前
Python+django+vue3预制菜半成品配菜平台
开发语言·python·django