双向链表实现与应用详解

Makefile 的使用

双向链表

typedef struct person
{
char name[32];
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)
{
}

相关推荐
paeamecium3 小时前
【PAT甲级真题】- Student List for Course (25)
数据结构·c++·算法·list·pat考试
Book思议-3 小时前
【数据结构】栈与队列全方位对比 + C 语言完整实现
c语言·数据结构·算法··队列
是苏浙5 小时前
初识集合框架
java·数据结构
如何原谅奋力过但无声5 小时前
【chap11-动态规划(上 - 基础题目&背包问题)】用Python3刷《代码随想录》
数据结构·python·算法·动态规划
小王C语言7 小时前
【基础IO】————简单设计一下libc库
前端·数据结构·算法
_日拱一卒7 小时前
LeetCode:滑动窗口的最大值
数据结构·算法·leetcode
老约家的可汗7 小时前
list 容器详解:基本介绍与常见使用
c语言·数据结构·c++·list
Book思议-7 小时前
【数据结构】字符串模式匹配:暴力算法与 KMP 算法实现与解析
数据结构·算法·kmp算法·bf算法
mifengxing8 小时前
力扣HOT100——(1)两数之和
java·数据结构·算法·leetcode·hot100
罗湖老棍子8 小时前
【 例 1】区间和(信息学奥赛一本通- P1547)(基础线段树和单点修改区间查询树状数组模版)
数据结构·算法·线段树·树状数组·单点修改 区间查询