数据结构与算法学习系列(4)-双向链表

1 定义:

   双向链表在单链表的每个结点里增加一个指向其前驱的指针域prior,这样形成的链表中就有两条方向不同的链,称之为双向链表;

示意图:

双向链表可以很容易找到某一个元素的前驱结点;

2 结构定义:

typedef struct DNode
{
    ElemType data;
    struct DNode *prior, *next;
}DNode, *DoubleList;

3 双向链表前插操作:

  (1)设指针p指向需要插入位置的后一个结点;s指向新结点;

  (2)p->pre->next = s; s->pre=p->pre;

           p->pre=s;s->next=p;

          其中每一行的两个表达式可以反过来,但是第一行和第二行不能交换,不然会断链;

   (3) 具体算法实现如下图所示:

4 双向链表的删除操作:

p->pre->next = p->next;

p->next->pre=p->pre;

free(p);

5 顺序存储的优缺点:

 (1) 优点:用数组存储数据元素,操作方法简单,容易实现;

                 无需为表示结点间的逻辑关系而增加额外的存储开销;

                 存储密度高;

                 顺序表可按元素位序随机存取结点;

(2)缺点: 做插入、删除操作时,需大量地移动数据元素,效率比较低;

                     要占用连续的存储空间,存储分配只能预先进行,如果估量过大,可能导致后部大量空间闲置,如果预先分配过                           小,又会造成数据溢出。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值