数据结构
合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下
——老子
1
每日一练
1.阅读以下算法,填充空格,使其成为完整的算法。其功能是在一个非递减的顺序存储线性表中,删除所有值相等的多余元素。
CONST maxlen=30
TYPE sqlisttp=RECORD
elem:ARRAY[1..maxlen] OF integer;
last:0..maxlen
END;
PROC exam21(VAR L:sqlisttp);
j:=1; i:=2;
WHILE (1)______ DO
[ IF L.elem[i]<>L.elem[j] THEN [ (2)_______; (3)______];
i:=i+1 ]
(4) ________;
ENDP;
2.
对于给定的线性链表 head , 下面的程序过程实现了按结点值非降次序输出链表中的所有结点,在每次输出一个结点时,就把刚输出的结点从链表中删去。请在划线处填上适当的内容,使之成为一个完整的程序过程,每个空框只填一个语句。
TYPE nodeptr =^ nodetype;
nodetype = RECORD
data : integer;link : nodeptr
END;
VAR head : nodeptr;
PROCEDURE sort_output_delete (head : nodeptr);
VAR p,q,r,s: nodeptr;
BEGIN WHILE head <> NIL DO
BEGIN p:= NIL ;q:= head;r:= q ;s:=q^.link ;
WHILE s <> NIL DO
BEGIN IF s^.data < q^.data THEN BEGIN (1)__; (2)___ END ;
r:= s ; (3)___
END;
write(q^.data : 5) ;
IF p=NIL THEN (4)___ ELSE (5)____ ;
dispose (q) ;
END;
writeln
END;
正确答案
1.
(1)i<=L.last ∥L.last 为元素个数
(2)j:=j+1 ∥有值不相等的元素
(3)L.elem[j]:=L.elem[i] ∥元素前移
(4)L.last:=j ∥元素个数
2.
(1)p:=r;∥r指向工作指针s的前驱,p指向最小值的前驱。
(2)q:=s;∥q指向最小值结点,s是工作指针
(3)s:=s^.link∥工作指针后移
(4)head:=head^.next;∥第一个结点值最小;
(5)p^link:=q^.link;∥跨过被删结点(即删除一结点)
如果您觉得本篇文章对您有作用,请转发给更多的人,点一下好看就是对小编的最大支持!
-end-