双向链表实现与应用详解

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)
{
}

相关推荐
皓月斯语10 小时前
B3842 [GESP202306 三级] 春游 题解
数据结构·c++·算法·题解
春日见11 小时前
算法与数据结构----哈希表
数据结构·人工智能·算法·机器学习·自动驾驶·哈希算法·散列表
萌动的小火苗12 小时前
嵌入式开发中的栈与队列:任务调度为什么依赖数据结构
数据结构·c++·单片机·嵌入式硬件
叩码以求索12 小时前
统计按位或能得到最大值的子集数目(一)
数据结构·算法
tachibana212 小时前
hot100 数组中的第K个最大元素(215)
java·数据结构·算法·leetcode
星恒随风12 小时前
C++ STL 栈详解:stack 的使用、经典题目与简单模拟实现
开发语言·数据结构·c++·笔记·学习
txzrxz12 小时前
单调队列讲解
数据结构·c++·算法·单调队列
Keven_1113 小时前
算法札记:树状数组的用途
数据结构·算法
cpp_250114 小时前
P1540 [NOIP 2010 提高组] 机器翻译
数据结构·c++·算法·队列·noip·洛谷题解
星恒随风16 小时前
C++ STL 详解:list 的使用、迭代器失效、模拟实现与 vector 对比
开发语言·数据结构·c++·笔记·学习·list