双向链表
目录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;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。