Burkeo

导航

线性表总结

#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。

posted on 2019-03-25 23:17  Burkeo  阅读(128)  评论(0)    收藏  举报