【数据结构/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;
}
相关推荐
*.✧屠苏隐遥(ノ◕ヮ◕)ノ*.✧15 分钟前
C++学习:基础知识的掌握
c++·visualstudio
wuyk55535 分钟前
第2章:六步换相原理全解+STM32工程实战
c语言·开发语言·stm32·单片机·嵌入式硬件
hey_sml42 分钟前
JAVA每日一学---CompletableFuture中thenApply与thenCompose区别详解
java·开发语言
Doraemomo1 小时前
数据结构-环形链表
java·数据结构·链表
萧瑟余晖2 小时前
Java深入解析篇十七之SpringCloud
java·开发语言
ttod_qzstudio3 小时前
Java 常用语法极简通关(五):类与对象——字段、方法、构造器、this 与 static
java·开发语言·python
萧瑟余晖4 小时前
Java深入解析篇十七之Spring Security
java·开发语言·spring
爱跳舞的烤冷面4 小时前
自学嵌入式第22天(数据结构——哈希)
数据结构·算法·哈希算法
C++ 老炮儿的技术栈6 小时前
从 Qt Designer 属性编辑器的层级可以看到继承链
c语言·数据库·c++·qt·sqlite·visual studio
MC皮蛋侠客6 小时前
Redis 系列(一):全景与最小闭环——从 `SET` 命令到内存数据结构
数据结构·数据库·redis