知识大全 数据结构考研分类复习真题 第三章 答案[25]
Posted 元素
篇首语:人无常识,百事难成。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 数据结构考研分类复习真题 第三章 答案[25]相关的知识,希望对你有一定的参考价值。
[题目分析] 双端队列示意图如下(设maxsize = )
用上述一维数组作存储结构 把它看作首尾相接的循环队列 可以在任一端(end 或end )进行插入或删除 初始状态end + =end 被认为是队空状态 end =end 被认为是队满状态 (左端队列)end 指向队尾元素的前一位置 end 指向(右端队列)队尾元素的后一位置 入队时判队满 出队(删除)时判队空 删除一个元素时 首先查找该元素 然后 从队尾将该元素前的元素依次向后或向前(视end 端或end 端而异)移动
FUNC add (Qu:deque; var x:datatype;tag ):integer; //在双端队列Qu中插入元素x 若插入成功 返回插入元素在Qu中的下标 插入失败返回 tag= 表示在end 端插入 tag= 表示在end 端插入 IF Qu end =Qu end THEN [writeln( 队满 );return( );] CASE tag OF : //在end 端插入 [Qu end :=x; //插入x Qu end :=(Qu end ) MOD maxsize; //修改end RETURN(Qu end + ) MOD maxsize); //返回插入元素的下标 : //在end 端插入 [Qu end :=x; Qu end :=(Qu end + ) MOD maxsize; RETURN(Qu end ) MOD maxsize); ] ENDC; //结束CASE语句 ENDF; //结束算法add FUNC delete (Qu: deque; VAR x:datatype; tag: ):integer; //本算法在双端队列Qu中删除元素x tag= 时从end 端删除 tag= 时从end 端删除 删除成功返回 否则返回 IF (Qu end + ) MOD maxsize=Qu end THEN [writeln( 队空 );return( );] CASE tag OF : //从end 端删除 [i:=(Qu end + ) MOD maxsize; //i是end 端最后插入的元素下标 WHILE(i<>Qu end ) AND (Qu elem[i]<>x) DO i=(i+ ) MOD maxsize;//查找被删除元素x的位置 IF (Qu elem[i]=x) AND (i<>Qu end ) THEN [ j:=i; WHILE((j +maxsize) MOD maxsize <>Qu end ) DO [Qu elem[j]:=Qu elem[(j +maxsize) MOD maxsize]; j:=(j +maxsize) MOD maxsize; ]//移动元素 覆蓋达到删除 Qu end :=(Qu end + ) MOD maxsize; //修改end 指针 RETURN( ); ] ELSE RETURN( ); ]//结束从end 端删除 : //从end 端删除 [i:=(Qu end +maxsize) MOD maxsize; //i是end 端最后插入的元素下标 WHILE(i<>Qu end ) AND (Qu elem[i]<>x) DO i=(i +maxsize) MOD maxsize;//查找被删除元素x的下标 IF (Qu elem[i]=x) AND (i<>Qu end ) THEN //被删除元素找到 [ j:=i; WHILE((j+ ) MOD maxsize <>Qu end ) DO [Qu elem[j]:=Qu elem[(j+ ) MOD maxsize]; j:=(j+ ) MOD maxsize; ]//移动元素 覆蓋达到删除 Qu end :=(Qu end +maxsize) MOD maxsize; //修改end 指针 RETURN( );//返回删除成功的信息 ] ELSE RETURN( );//删除失败 ]//结束在end 端删除 ENDC;//结束CASE语句 ENDF;//结束delete
[算法讨论]请注意下标运算 (i+ ) MOD maxsize容易理解 考虑到i 可能为负的情况 所以求下个i时用了(i +maxsize) MOD maxsize
cha138/Article/program/sjjg/201311/22696相关参考