知识大全 数据结构考研分类复习真题 第三章 答案[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相关参考
第三章 栈和队列答案 一选择题 BBABDCBDDCDBDDDCBCBDBBBDDDDCAADBBDCBCBACCFCCAAD 二判断题 √√√√×√√√√×√×××√×√×√√
见上题的解答 参见上面题 typedefstructnode elemtypeelemcq[m]; //m为队列最大可能的容量 intfrontrear;
typedefstruct elemtpq[m]; intfrontcount; //front是队首指针count是队列中元素个数 cqnode; &nbs
[题目分析]本题与上面题基本相同现用类C语言给出该双端队列的定义 #definemaxsize typedefstruct datatypeelem[maxsize]; int
#definemaxsize栈空间容量 voidInOutS(ints[maxsize]) //s是元素为整数的栈本算法进行入栈和退栈操作 inttop=;  
s=(LinkedList)malloc(sizeof(LNode))s>data=x;s>next=r>nextr>next=sr=s 牺牲一个存储单元 &n
既不能由输入受限的双端队列得到也不能由输出受限的双端队列得到的输出序列是dbca () () &nbs
本题与上题本质上相同现用类C语言编写入队和出队算法 ()voidEnQueue(LinkedListrearElemTypex) //rear是带头结点的循环链队列的尾指针本算法将元素x插入到
intMaxValue(inta[]intn)//设整数序列存于数组a中共有n个本算法求解其最大值 if(n==)max=a[]; elseifa[n]>MaxValue(an)max=
[题目分析]这是以读入数据的顺序为相反顺序进行累乘问题可将读入数据放入栈中到输入结束将栈中数据退出进行累乘累乘的初值为 PROC test; CONSTmaxsize=; VARs