线性表总结
#1.代码段1简介:删除一个单链表L中元素最大的结点(假设这样的结点唯一)
##1.1代码1
##1.2不懂的地方
在单链表中删除一个结点先要找到它的前驱结点,用指针p扫描整个单链表,pre指向结点p的前驱结点,在扫描时用maxp指向data域值最大的结点,maxpre指向maxp所指结点的前驱结点。当单链表扫描完毕后,通过maxpre所指结点删除其后的结点,即删除了结点值最大的结点。
但是第11行中,为什么令pre = p,而不是p = pre
#2.代码段2简介:
##2.1代码2
##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。
浙公网安备 33010602011771号