首页 > 其他 > 详细

线性表总结

时间:2019-03-26 00:11:23      阅读:152      评论:0      收藏:0      [点我收藏+]

#1.代码段1简介:删除一个单链表L中元素最大的结点(假设这样的结点唯一)

##1.1代码1

 1  void delmaxnode(LinkNode* &L)
 2  {
 3    LinkNode* p = L->next, *pre = L, *maxp = p, *maxpre = pre;
 4    while(p != NULL)                        //用p扫描整个单链表,pre始终指向其前驱结点   
 5   {  
 6      if(maxp->data < p->data)              //若找到一个更大的结点
 7     {
 8        maxp = p;                           //更新maxp
 9        maxpre = pre;                       //更新maxpre
10    }
11        pre = p;                            //p、pre同步后移一个结点
12        p = p->next;
13  }
14    maxpre->next = maxp->next;              //删除maxp结点
15    free(maxp);                             //释放maxp结点
16 }

 




##1.2不懂的地方



在单链表中删除一个结点先要找到它的前驱结点,用指针p扫描整个单链表,pre指向结点p的前驱结点,在扫描时用maxp指向data域值最大的结点,maxpre指向maxp所指结点的前驱结点。当单链表扫描完毕后,通过maxpre所指结点删除其后的结点,即删除了结点值最大的结点。

但是第11行中,为什么令pre = p,而不是p = pre



#2.代码段2简介:

##2.1代码2
 1 void ListInsert(SqList* &L, ElemType e)
 2  3   int i=0,j;
 4   while(i<L -> length && L-> data[i]<e)
 5     i++ ;                                  //查找值为e的元素
 6   for (j= ListLength(L);j>i;j-- )          //将data[i及后面的元素后移一个位置
 7     L-> data[j]=L-> data[j-1];
 8   L-> data[i]=e;
 9   L -> length++ ;                          //有序顺序表的长度增1
10 }

 



##2.2不懂的地方

从头开始扫描有序顺序表L,通过比较找到插人位置i,将data[i]及后面的元素后移一个位置,在该位置插人元素e。

线性表总结

原文:https://www.cnblogs.com/bestfairy/p/10597540.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!