当前位置: 代码迷 >> 综合 >> 通用双向链表(可复用)
  详细解决方案

通用双向链表(可复用)

热度:96   发布时间:2023-10-29 03:44:14.0

功能:

双向链表结构两头都有指向上一节点指针和指向下一节点指针。此结构体可实现栈,队列,链表的功能。

Que.c

#include<List.h>//初始化Que返回包含头结点和尾结点的结构体指针
QueP* initQue() {Que* top = (Que*)malloc(sizeof(Que));Que* end = (Que*)malloc(sizeof(Que));top->data = NULL;end->data = NULL;top->next = end;end->last = top;top->last = NULL;end->next = NULL;QueP* nowP = (QueP*)malloc(sizeof(QueP));nowP->top = top;nowP->end = end;nowP->len = 0;return nowP;
}//创建一个Que节点
Que* createQue(void* data) {Que* nowQue = (Que*)malloc(sizeof(Que));nowQue->data = data;nowQue->last = NULL;nowQue->next = NULL;return nowQue;
}//从头节点插入一个Que节点
void insertQue(Que* top, Que* data) {data->next = top->next;data->last = top;top->next->last = data;top->next = data;data = NULL;
}
//从头结点插入一个节点通过QueP指针
void insertQueByQue_P(QueP* nowQueP, Que* nowNode) {Que* top = nowQueP->top;insertQue(top, nowNode);nowQueP->len += 1;
}//从尾结点取出一个节点
Que* popQue(Que* end) {Que* endData = end->last;end->last = endData->last;endData->last->next = end;endData->last = NULL;endData->next = NULL;return endData;
}//从尾结点取出一个节点通过QueP指针
Que* popQueByQue_P(QueP* nowQueP) {Que* end = nowQueP->end;Que* retData = popQue(end);nowQueP->len -= 1;return retData;
}

Que.h

#include<stdio.h>
#include<stdlib.h>
#pragma once
typedef struct Que_c {void* data;struct Que_c* next;struct Que_c* last;
}Que;typedef struct Que_P {struct Que_c* top;struct Que_c* end;int len;
}QueP;QueP* initQue();Que* createQue(void* data);void insertQue(Que* top, Que* data);void insertQueByQue_P(QueP* nowQueP, Que* nowNode);Que* popQue(Que* end);Que* popQueByQue_P(QueP* nowQueP);

  相关解决方案