EDA365电子论坛网

标题: 单链表的插入和删除 [打印本页]

作者: hasky    时间: 2016-8-11 14:13
标题: 单链表的插入和删除
在单链表中,又如何实现“插入”和“删除”操作呢?
% P) i& v4 T  C+ g$ H- Y假设我们要在线性表的两个数据元素a和b之间插入一个数据元素x,已知p为其单链表存储结构中指向结点a的指针。0 H1 p; }" Y% }& e% S2 ?3 [
为插入数据元素x,首先要生成一个数据域为x的结点,然后插入在单链表中,根据插入操作的逻辑定义,还需要修改结点a中的指针域,令其指向结点x,而结点x中的指针域应指向结点b,从而实现3个元素a、b和x之间逻辑关系的变化。插入后的单链表所示。假设s为指向结点x的指针,则上述指针修改用语句描述即为
% j' T# @7 X$ B4 g& Os->next=p->next;p->next=s;
. ~% V* T; q5 s9 O9 j反之,在线性表中删除元素b时,为在单链表中实现元素a、b和c之间逻辑关系的变化,仅修改结点a中的指针域即可。假设p为指向结点a的指针,则修改指针的语句为: `# c+ d/ l# g$ ^8 J) E
p->next= p->next->next
" V2 b2 E/ \/ W" q2 `可见,在一直链表中元素插入或删除的确切位置的情况下,在单链表中插入或删除一个结点时,仅需修改指针而不需要移动元素。& ?: C6 o4 K& K1 B
Status ListInsert_L(LinkList &L,inti,ElemType e){* O7 _% L8 u1 U! R! d
//在带头结点的单链线性表L中第i个位置之前插入元素e
3 ?3 S3 w$ V- wp=L;j=0;
$ m; r# _0 p, P7 Y- f$ j4 gwhile(p&&j<i-1){p=p->next;++j}//寻找第i-1个结点" s  T8 ?. z; l, l
if(!p||j>i-1)return ERROR;           //i小于1或者大于表长+1& j: N- f# r7 e# }  Y
s=(LinkList)malloc(sizeof(LNode));//生成新结点. R, n0 r2 K" {0 R
s->data=e;s->next=p->next;          //插入L中5 l7 O) `5 b, }% f2 O: h
p->next=s;
3 [9 v4 K6 d: Ereturn OK;0 T. I; j6 {( I
}//ListInsert_L8 \4 m/ E, {* J
void ListDelete_L(LinkList &L,inti,ElemType &e){) H+ z- S  h& B+ k* f( }2 x+ M
//在带头结点的单链线性表L中,删除第i个元素,并用e返回其值
! T: h: P7 h& l3 Y3 Jp=L;j=0;
3 n) i. }* `- J; U5 ], ]" q2 Mwhile (p->next&&j<i-1){//寻找第i个结点,并令p指向其前驱4 T5 R* C' l3 c
p=p->next;++j;
6 D) S/ t% K; [: ]}9 X9 ~4 Z( I) r3 \+ h' j. `
if(!(p->next||j>i-1)return ERROR;//删除位置不合理
9 y" B1 Q/ y- ?8 fq=p->next;p->next=q->next;  //删除并释放结点
# T% `0 E& j3 qe=q->data;free(q);
9 _1 s$ w( a/ n* Breturn OK;
% }. F1 V% v. p}//ListDelete_L
作者: Pang8343569    时间: 2016-8-11 14:38
谢谢O(∩_∩)O哈哈~谢谢O(∩_∩)O哈哈' c+ b9 i0 J: Z7 M

作者: duzy    时间: 2016-8-11 14:54
支持楼主!谢谢分享!) g- u; c0 B6 i" t4 D# L$ _

作者: Pang8343569    时间: 2016-8-12 11:42
支持楼主!谢谢分享!- l% f, G( D' l$ K/ F

作者: yhg-lee    时间: 2016-8-13 10:45
支持楼主!谢谢分享!
- f/ @2 W( J) ]; \1 b
作者: wu68aq    时间: 2016-8-15 15:57
支持一下,很不错哦!
5 e3 I2 d0 @4 E$ [4 P3 j
作者: Dedy01    时间: 2016-8-16 13:53
学习了!3Q$ X* o6 P3 Q' ?- ~6 i

作者: Gegu    时间: 2016-8-17 14:03
谢谢分享,必须赞一个~
  d; P/ U% t2 I% d) Z5 B2 U
作者: Titianyeer    时间: 2016-8-19 14:28
' P5 @3 y; r1 I! G
学习了!3Q




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2