双向链表——c语言描述
作者:互联网
双向链表
目录1 双向链表的存储结构
每个结点有一个都有指向前面和后面指针。
代码:
#define SUCCESS 1
#define ERROR 0
#define MAXSIZE 10
typedef int ElemType;
typedef int LIST_STATUS;
typedef struct _Double_link_Node {
ElemType Data;
struct _Double_link_Node *Next;
struct _Double_link_Node *Prior;
}Double_Link_Node;
2 操作双向链表
创建,打印,双向链表,并增加,删除结点
代码:
void OperateDoubleLinkList(void) {
Double_Link_Node *DoubleHead;
LIST_STATUS Status;
int CreateNum = 5;
int AddNodeIndex = 2;
int AddNodeData = 15;
DoubleHead = (Double_Link_Node *)malloc(sizeof(Double_Link_Node));
Status = CreateDoubleLinkList(DoubleHead, CreateNum);
if (SUCCESS == Status) {
printf("CreateDoubleLinkList succeed!\n");
}
else {
printf("CreateDoubleLinkList failed!\n");
}
GetDoubleLinkListLenth(DoubleHead);
PrintDoubleLinkList(DoubleHead);
/*
Status = AddDoubleLinkList(DoubleHead, AddNodeIndex, AddNodeData);
if (SUCCESS == Status) {
printf("AddDoubleLinkList succeed!\n");
}
else {
printf("AddDoubleLinkList failed!\n");
}
GetDoubleLinkListLenth(DoubleHead);
PrintDoubleLinkList(DoubleHead);
*/
}
2 创建双向链表
创建结点数为5(不包括头结点)的双向链表。
代码:
LIST_STATUS CreateDoubleLinkList(Double_Link_Node *DoubleHead, int CreateNum) {
int i = 0;
Double_Link_Node *CreateNode;
Double_Link_Node *TraNode;
printf("CreateDoubleLinkList start!\n");
if (NULL == DoubleHead) {
return ERROR;
}
/*Creat empty double link list*/
DoubleHead->Data = CreateNum;
DoubleHead->Next = NULL;
DoubleHead->Prior = NULL;
TraNode = DoubleHead;
for (i = 1; i <= CreateNum; ++i) {
CreateNode = (Double_Link_Node *)malloc(sizeof(Double_Link_Node));
CreateNode->Data = i;
CreateNode->Next = TraNode->Next;
CreateNode->Prior = TraNode;
TraNode->Next = CreateNode;
TraNode = TraNode->Next;
}
printf("CreateDoubleLinkList end!\n");
return SUCCESS;
}
结果:
CreateDoubleLinkList start!
CreateDoubleLinkList end!
CreateDoubleLinkList succeed!
DoubleLinkListLenth = 5
CreateDoubleLinkList start!
TraNode->Data = 5
TraNode->Data = 1
TraNode->Data = 2
TraNode->Data = 3
TraNode->Data = 4
TraNode->Data = 5
CreateDoubleLinkList end!
3 打印双向链表
代码:
LIST_STATUS PrintDoubleLinkList(Double_Link_Node * const DoubleHead) {
Double_Link_Node *TraNode;
printf("CreateDoubleLinkList start!\n");
if (NULL == DoubleHead) {
return ERROR;
}
TraNode = DoubleHead;
while (TraNode != NULL) {
printf("TraNode->Data = %d\n", TraNode->Data);
TraNode = TraNode->Next;
}
printf("CreateDoubleLinkList end!\n");
}
4 获取双向链表长度
代码:
int GetDoubleLinkListLenth(Double_Link_Node * const DoubleHead) {
Double_Link_Node * TraNode;
int DoubleLinkListLenth = 0;
if (NULL == DoubleHead) {
return 0;
}
TraNode = DoubleHead->Next;
/*DoubleLinkListLenth is not incluede of DoubleHead*/
while (TraNode != NULL) {
++DoubleLinkListLenth;
TraNode = TraNode->Next;
}
printf("DoubleLinkListLenth = %d\n", DoubleLinkListLenth);
return DoubleLinkListLenth;
}
标签:Node,TraNode,CreateDoubleLinkList,Double,链表,DoubleHead,双向,描述 来源: https://www.cnblogs.com/meditatorss/p/16483091.html