双向链表实现与应用详解

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

相关推荐
2013编程爱好者6 小时前
【C++】树的基础
数据结构·二叉树··二叉树的遍历
NEXT066 小时前
二叉搜索树(BST)
前端·数据结构·面试
化学在逃硬闯CS6 小时前
Leetcode1382. 将二叉搜索树变平衡
数据结构·算法
季明洵9 小时前
Java实现单链表
java·开发语言·数据结构·算法·单链表
elseif12310 小时前
【C++】ST表求RMQ问题--代码+分析
数据结构·c++·算法
tju新生代魔迷11 小时前
数据结构:栈和队列
数据结构
Bear on Toilet11 小时前
树_构建多叉树_41 . 实现Trie(前缀树)
开发语言·数据结构·c++·算法·leetcode
he___H13 小时前
数组的全排列
java·数据结构·算法
小飞学编程...14 小时前
【阻塞队列 ——Java 】
java·开发语言·数据结构