双向链表实现与应用详解

Makefile 的使用

双向链表

typedef struct person
{
char name32;
int age;
char sex;
int score;
} DATATYPE;

typedef struct dounode
{
DATATYPE data;
struct dounode *prev;
struct dounode *next; // 多了一个向前的指针
} DouLinkNode;

typedef struct list
{
DouLinkNode *head;
int clen;
} DouLinkList;

typedef enum
{
DIR_FORWARD,
DIR_BACKWARD
} DIRECT;

概念图:

函数基本类型:

DouLinkList *CreateDouLinkList()
{
}

头插函数

int InsertHeadDouLinkList(DouLinkList *dl, DATATYPE *data)

bash 复制代码
int InsertHeadDouLinkList(DouLinkList *dl, DATATYPE *data)
{
  DouLinkNode *newnode = malloc(sizeof(DouLinkNode));
  if (NULL == newnode)
  {
    printf("error");
    DouLinkNode *next = NULL;
    DouLinkNode *prev = NULL;
    if (!IsEmptyDouLinkList(dl))
    {
      newnode->next = dl->head;   // 新的指向头节点 
      dl->head->prev = newnode;   // 头节点的前一个指向新节点的本身。
    }
    dl->head = newnode;   // 如果为空的时候,头节点指向新的节点,也就实现了插入头节点的概念。
    dl->clen++;
    return 0;
  }
}

int ShowDouLinkList(DouLinkList *dl, DIRECT dir)

cpp 复制代码
int ShowDouLinkList(DouLinkList *dl, DIRECT dir)
{
  DouLinkNode *tmp = dl->head;
  if (DIR_FORWARD == dir)   // 判断遍历方向是否为正向
  {
    while (tmp)  // 
    {
      printf("%s %d %c %d", tmp->data.name, tmp->data.age, tmp->data.sex, tmp->data.score);
      tmp = tmp->next;  // 向后移动一个节点,(最终的顺序和插入的顺序是相反的)
    }
  }
  else
  {
    while (tmp->next)
    {
      tmp = tmp->next;   // 循环到这里之后 ,tmp 已经指向最后一个节点。
    }
    while (tmp)  //
    {
      printf("%s %d %c %d", tmp->data.name, tmp->data.age, tmp->data.sex, tmp->data.score);
      tmp = tmp->prev; //开始到推,从末尾到头进行输出。
    }
  }
  return 0;
}

int InserTailDouLinkList(DouLinkList *dl, DATATYPE *data)
{
}
DouLinkNode *FindDouLinkList(DouLinkList *dl, char *name)
{
}
int ModifyDouLinkList(DouLinkList *dl, char *name, DATATYPE *newdata)
{
}

int DeleteDouLinkList(DouLinkList *dl, char *name)
{


}
int IsEmptyDouLinkList(DouLinkList *dl)
{
}
int GetSizeDouLinkList(DouLinkList *dl)
{
}
int DestroyDouLinkList(DouLinkList *dl)
{
}

相关推荐
青山木1 小时前
Hot 100 --- 最小栈
java·数据结构·算法·leetcode
疯狂打码的少年1 小时前
【数据结构】栈的应用:表达式求值(后缀表达式)
java·数据结构·笔记·算法
wabs6662 小时前
关于图论【最短路径之Bellman_ford 算法(判断负权回路)|卡码网95.城市间货物运输II的思考】
数据结构·算法·图论·bellman_ford算法·卡码网·判断负权回路
wabs6663 小时前
关于哈希表【力扣15.三数之和的思考】
数据结构·算法·leetcode·散列表·哈希表·三数之和
(Charon)4 小时前
【C++】线程安全队列(三):MPSC无锁队列、atomic与链表节点实现
c++·安全·链表
疯狂打码的少年5 小时前
【数据结构】队列的应用:循环队列
数据结构·笔记·算法
Doraemomo14 小时前
数据结构-环形链表
java·数据结构·链表
爱跳舞的烤冷面18 小时前
自学嵌入式第22天(数据结构——哈希)
数据结构·算法·哈希算法
MC皮蛋侠客20 小时前
Redis 系列(一):全景与最小闭环——从 `SET` 命令到内存数据结构
数据结构·数据库·redis
疯狂打码的少年20 小时前
【数据结构】队列:定义、顺序队列与链式队列
数据结构·笔记