有不懂的可以问我,把自己练习编写的代码在这里和大家分享下。如有错误欢迎指正。
编写不易,喜欢的话,点个赞吧😄!
#include <stdio.h>
#include <stdlib.h>
#define HeadNodeFlag 1
#define N 5
//双向链表节点单元
typedef struct DoublyLink{
struct DoublyLink *prior;//指针域
int value;//数据域
struct DoublyLink *next;//指针域
}DoublyLink;
/********************
函数 DisplayDoublyLink:依次输出双向链表成员信息
参数1 int HeadNode:0表示传入双向链表是含头节点的双向链表,1表示传入双向链表是不含头节点的双向链表
参数2 DoublyLink *L:双向链表L
********************/
void DisplayDoublyLink(int HeadNode,DoublyLink *L){
DoublyLink *p=NULL;
if(!HeadNode)L=L->next;//如果存在头节点,头指针向后移动一位指向首元节点
//只要L指针指向的节点非Null,则打印双向链表成员。
while(L->next){
printf("%d<->",L->value);
L=L->next;
}
printf("%d 反向打印:",L->value);
while(L->prior->prior){
printf("%d<->",L->value);
L=L->prior;
}
if(HeadNode){
printf("<->%d<->",L->value);
L=L->prior;
}
printf("%d\n\n",L->value);
}
/********************
函数 InitDoublyLink:初始化长度为len的双向链表
参数1 int HeadNode:0表示建立有头节点双向链表,1表示建立无头节点双向链表
参数2 DoublyLink **L:双向链表L
参数3 int len:双向链表容量
********************/
int InitDoublyLink(int HeadNode,DoublyLink **L,int len){
DoublyLink *p=NULL;//头指针
DoublyLink *temp=(DoublyLink *)malloc(sizeof(DoublyLink));//临时指针,总是指向双向链表的最后一个节点
if(!temp){
//如果节点申请失败
printf("双向链表初始化失败!\n\n");
exit(1);//退出程序
}
temp->prior=NULL;
temp->value=HeadNode;