双向静态链表(在栈上开辟)本身基本不会用到,主要是为了理解其原理。
先看图
直接看例子:
#include <stdio.h>
//双向静态链表
typedef struct _DNode //double node
{
int data;
struct _DNode * next; //后继
struct _DNode * pre; //前驱
}DNode;
int main()
{
DNode *head;
DNode headNode; //头节点
DNode a,b,c,d,e;
a.data=1;
b.data=2;
c.data=3;
d.data=4;
e.data=5;
head=&headNode;
headNode.next=&a;
a.next=&b;
b.next=&c;
c.next=&d;
d.next=&e;
e.next=&headNode; //或者 e.next=head,是一样的,head保存了headNode的地址
e.pre=&d;
d.pre=&c;
c.pre=&b;
b.pre=&a;
a.pre=head; //跟上面同理
headNode.pre=&e;
//访问链表流程
//next
DNode* th=head; //找一个指针替身
th=th->next;
while(th != head) //同理,单向链表是到NULL停止,双向循环的话,到头节点之前就停止
{
printf("%d\n",th->data);
th=th->next;
}
//pre
th=head->pre; //这个就是头节点的pre
while(th != head)
{
printf("%d\n",th->data);
th=th->pre;
}
return 0;
}