今天我学习了双向循环链表,不过与以往的不同,这次的双向循环链表 有坑,是巨坑… 我以为写的会很顺利 没想到 我竟然踩了“雷”…
好尴尬哦,下面我们来学习这个 双向循环链表把~
对了,说一下为什么需要双向循环链表把,如果一个链表是单向的,那么,如果在读取过程中,要读取已读取数据的前一个 或者前面几个数据怎么办呢? 比如 1–>2–>3–>4–>5 如果是循环链表的话,我读到了4 然后要我读3 ,怎么办呢?那么如果是单向的话,我还要走–>5
–>1–>2–>3 如果这个链表很长很长呢? 是不是要花费很多的时间呢……? 但是,如果我这个链表是双向的话,我只要做一步,就可以找到3 ,就是 直接用4的前驱结点找到3 的节点位置,这就省下了不少时间,但同时也会花费空间对吧,这就是我们的 空间换取时间啦~
废话不多说,我们代码里一探究竟
#include<stdio.h>
#include<stdlib.h>
#define len sizeof(list)
struct list
{
int data ;
struct list *prior;//前驱结点
struct list *next; //后驱结点
};
list *head,*s,*p,*end; int n=0;
void create( int n)
{
head=s=(list *)malloc(len);
int i =0;
while(i<n)
{
p=(list *)malloc(len);
s->data=i+1; //用递增的数字给data赋值,方便后面验证 双向表是否 创建成功
s->next=p;
p->prior=