知识大全 数据结构考研分类复习真题 第三章 答案[26]
Posted 元素
篇首语:知识的价值不在于占有,而在于使用。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 数据结构考研分类复习真题 第三章 答案[26]相关的知识,希望对你有一定的参考价值。
[题目分析] 本题与上面 题基本相同 现用类C语言给出该双端队列的定义
#define maxsize typedef struct datatype elem[maxsize]; int end end ; //end 和end 取值范围是 maxsize deque;
[题目分析] 根据队列先进先出和栈后进先出的性质 先将非空队列中的元素出队 并压入初始为空的栈中 这时栈顶元素是队列中最后出队的元素 然后将栈中元素出栈 依次插入到初始为空的队列中 栈中第一个退栈的元素成为队列中第一个元素 最后退栈的元素(出队时第一个元素)成了最后入队的元素 从而实现了原队列的逆置
void Invert(queue Q) //Q是一个非空队列 本算法利用空栈S和已给的几个栈和队列的ADT函数 将队列Q中的元素逆置 makempty(S); //置空栈 while (!isEmpty(Q)) // 队列Q中元素出队 value=deQueue(Q); push(S value); // 将出队元素压入栈中 while(!isEmpty(S)) //栈中元素退栈 value=pop(S); enQueue(Q value); //将出栈元素入队列 Q //算法invert 结束
为运算方便 设数组下标从 开始 即数组v[ m ] 设每个循环队列长度(容量)为L 则循环队列的个数为n=ém/Lù 为了指示每个循环队列的队头和队尾 设如下结构类型 typedef struct int f r; scq; scq q[n];
( )初始化的核心语句 for(i= ;i<=n;i++) q[i] f=q[i] r=(i )*L; //q[i]是全局变量
( )入队 int addq(int i;elemtp x) //n个循环队列共享数组v[ m ]和保存各循环队列首尾指针的q[n]已经定义为全局变量 数组元素为elemtp类型 本过程将元素插入到第i个循环队列中 若入队成功 返回 否则返回队满标记 (入队失败) if (i< ||i>n) printf( 队列号错误 );exit( ); if (q[i] r+ )%L+(i )*L==q[i] f) printf( 队满\\n );exit( ); q[i] r=(q[i] r+ )%L+(i )*L; // 计算入队位置 v[q[i] r]=x; return( );//元素x入队
( )出队 int deleteq (int i)// n个循环队列共享数组v[ m ]和保存各循环队列首尾指针的q[n]已经定义为全局变量 数组元素为elemtp类型 本过程将第i个循环队列出队 若出队成功 打印出队列元素 并返回 表示成功 若该循环队列为空 返回 表示出队失败 if (< ||>n) printf( 队列号错误\\n );exit( ); if (q[i] r==q[i] f) printf( 队空\\n ); return( ); q[i] f=(q[i] f+ )%L+(i )*L; printf( 出队元素 q[i] f); return( );
( )讨论 上述算法假定最后一个循环队列的长度也是L 否则要对最后一个循环队列作特殊处理 另外 未讨论一个循环队列满而相邻循环队列不满时 需修改个循环队列首尾指针的情况(即各循环队列长度不等)
n个循环队列共享数组v[ m ]的示意图如下
第i个循环队列从下标 (i )L 开始 到iL 为止 设每个循环队列均用牺牲一个单元的办法来判断队满 即为(q[i] r+ )%L+(i )*L=q[i] f时 判定为队满
cha138/Article/program/sjjg/201311/22697相关参考
第三章 栈和队列答案 一选择题 BBABDCBDDCDBDDDCBCBDBBBDDDDCAADBBDCBCBACCFCCAAD 二判断题 √√√√×√√√√×√×××√×√×√√
见上题的解答 参见上面题 typedefstructnode elemtypeelemcq[m]; //m为队列最大可能的容量 intfrontrear;
typedefstruct elemtpq[m]; intfrontcount; //front是队首指针count是队列中元素个数 cqnode; &nbs
知识大全 数据结构考研分类复习真题 第六章 答案 (四)[26]
cha138/Article/program/sjjg/201311/22647
#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