收藏 分销(赏)

数据结构链表.doc

上传人:仙人****88 文档编号:8558962 上传时间:2025-02-18 格式:DOC 页数:2 大小:31KB 下载积分:10 金币
下载 相关 举报
数据结构链表.doc_第1页
第1页 / 共2页
数据结构链表.doc_第2页
第2页 / 共2页
本文档共2页,全文阅读请下载到手机保存,查看更方便
资源描述
1.双链表的定义:我们熟悉一个新的事物,往往都会从自己已经熟悉且有固定经验的事物出发,去寻找相似点, 0 V2 V6 z8 F% g                           发现不同点,所以我们完全可以用这种思路去认识双向链表。双向链表和单链表的唯一区别就是 8 m" A* o9 }: Y1 S6 m                           双链表多了一个指针域,指向前驱结点。( o# [) U1 J. O8 I                            typedef struct DNode3 D; M: P( R7 D3 p( ^                            { 3 I( z* f5 i  `! U; q0 U1 `                                  int data;( N& d4 a/ y' T1 F! K, B7 @                                   struct DNode *next;5 w# Y; m# l5 ^. R                                   struct DNode *prior;    // 指向前驱结点+ D8 D" h% O$ ^: U                            } DLinkList; 3 [1 ?( ]+ ?5 v  b; K) q                           我想这个真的是没甚麽(这货不是台湾人,这货不是台湾人……)好说的了* y) L1 U1 D& P) [# h" x2 Z5 l1 K * J) E+ n+ T5 U" U3 r 2.头插法建立双链表:注意和头插法建单链表比较 ( m" p: u# x# V8 J+ M0 b                                  void CreateListF (DLinkList *&L,int a [  ],int n)0 J" ]8 x8 @- F3 g: H9 \* y                                    {6 {. }3 A. B/ {, j0 _7 c                                           DLinkList *s; ; c" _% W+ v% z                                          L=(DLinkList *)malloc(sizeof(DLinkList)); ; K* Z4 P3 N  S                                          L->prior=L->next=NULL;             // 双链表的情形下建立头结点 # \4 y% G1 b+ l  H% e                                          for (int i=0;i<n;i++)# r* b+ I; j4 T( h: o5 ?" ]+ }                                           { $ y( o8 z0 r9 y: f4 H9 M( N                                               s=(DLinkList *)malloc(sizeof(DLinkList));2 z- w: t, w4 ]6 }. L. n                                                s->data=a [ i ];8 Q8 D) o; {( _9 T5 ]                                                s->next=L->next;     // 将*s插在原开始结点之前,头结点之后- R) Y- e; n: M4 `4 ~3 v                                                if (L->next != NULL); i- s9 [' J/ Z* `+ n                                                    L->next->prior=s;: P- h/ V- M' S2 y+ w9 S                                                L->next=s; 2 s% E  ?/ d- D3 W) R                                               s->prior=L;- x4 a3 |4 h0 X. i7 A5 x) v                                           }0 t' e" B+ v, E! ~2 P                                     }                                    . @) Q/ s7 Z" ^2 r0 p                                     双链表的每个结点(包括头结点)都有三个域,两个指针域和一个数据域,所以,建立头结点的思路和单链表是8 }! m$ x- l5 q+ J+ }2 k                                     和单链表完全一样的。OK,那我们再来回顾一下当年(前天……)是怎么用头插法建立单链表的头结点的, 6 w! f7 ?( Q+ p: ^4 g; U/ V                                    L->next=NULL;这句话的意思就是让头结点的指针域为空,那么同样的,到了双链表,也是要让头结点变空,这样 7 }% C8 J, [8 t3 M9 x4 a# \                                    自然就写出了L->prior=L->next=NULL;  怎么样,不难吧  So…………easy…………   9 @, f6 j% |( ?4 [9 n9 j# ` 2 R: l. P7 B6 B2 }, a5 J( Z                                    好嘞,咱们再往下走着…………这时我们再来温习一下头插法的思路:*s是要吸收进来的新结点,7 U9 f* t) z6 ^9 b                                     *L是头结点,头插法是要每次新吸收的结点都要成为当时链表的开始结点。7 _5 d" z+ _2 N4 `, s- R4 Z                                     if (L->next != NULL)3 }# C: A! ^3 ~1 }9 r& e                                          L->next->prior=s; / p$ B1 X3 s2 u) F: }" ?) Q! ?                                    L->next=s;   U  k: e0 g- T! c                                    s->prior=L;                                     所以,这几句就很容易啦,这几句的作用就是将*s放到*L的后面去,然后,两端连上就OK。这里3 f1 t9 u  J' n% n                                     我要多说两句,大家看看它是怎么连上的?我为了说明方便,将*L称为第一个结点,*s为第二个结点,- w$ A) c5 @- W& P; f1 @7 Z" h                                     *s后面的那个结点是第三个结点。5 i# J* T# O7 f% Y7 ?$ r& Q                                     第一步:将第三个结点的->prior 指向第二个结点 $ T" N6 W( C2 u$ e; N6 k% @& W0 L: m: A                                    第二步:第一个结点的->next 指向第二个结点 - t* i+ P( a8 N5 P& @4 o                                    第三步:将第二个结点的->prior 指向第一个结点 ' p. Q. y9 x) ]5 J/ C; n, d3 ^" t
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 小学其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服