知识大全 出栈序列的研究[7]
Posted 序列
篇首语:时间仿似一条直线,没有起点,亦无终点。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 出栈序列的研究[7]相关的知识,希望对你有一定的参考价值。
判断一个序列是否为出栈序列
随着n的变大 出栈序列总数越来越多 由文献[ ]和[ ]可知 出栈序列的求解问题是一个NP问题 所以判断一个序列是否为一个出栈序列更为重要 在文献[ ]的传统算法中 根据栈的定理[ ]判断某一序列是否为出栈序列 该定理是 对于集合N= … n 如果依次序 … n入栈 设ala
由上述推论可设计出判断某个序列是否为合法的出栈序列 该算法的源代码如下
flag=l; // 没标志为l 假设序列a为合法的出栈序列
for(u= ;u<=n ;u++)
for(v=u+ ;v<=n ;v++)
for(w=v+l;w<=n;w++)
if((a[v]<a[w])&&(a[w]<a[u]))flag= ; //若出栈次序为rpq则为不合法的出栈序列
该算法的时间复杂度为O(n ) 算法采用了该方法判断某一序列是否为出栈序列 其效率太低 为此文中借助于栈实现复杂度为O(n)的算法 其基本思想描述如下
( ) 初始化栈stack 设置flag为
( ) v=w= v指要判断的序列 w指入栈的序列
( ) 如果v > n或flag= 则转( )
( ) 如果栈stack是空栈 则将第w个入栈序列符号人栈 w++
( ) 如果stack栈顶元素值等于序列的第v个元素 或者w ≤ n 则转( )
( ) 第w个入栈元素压入stack栈中 w ++ 转( )
( ) 如果stack栈顶元素值等于序列的第v个元素 则匹配 stack栈顶元素出栈 v++ 否则 说明所判断的序列不是出栈序列 赋flag为零
( ) 转( )
( ) 结束 若此时flag为 则序列为出栈序列 否则不是
将该算法替代算法中的相应部分 称为改进后的算法 从表可以看出改进后的算法 在运行时间上比原算法大大缩短 甚至比算法还要好
cha138/Article/program/sjjg/201311/22742相关参考
该算法虽然直观有效但没有给出具体的实现为了比较三种算法的优劣文中基于该算法思想给出了具体的实现源程序如下charsz[][];//存储出栈序列intused;//出栈序列总数voidstack_out
结束语由前置O栈序列可构造出其对应的二又树用该二叉树表示人栈和出栈操作比较直观易于理解文中给出三种算法实现对n个元素依次入栈求其全部的出栈序列并对这三种算法进行了分析和研究由于当n很大时求出所有出栈序
出栈序列的求解算法文献[]给出两种算法第一种是传统的解法简称算法其实现思想描述如下 )求…n的一个全排列alaa…an )判断alaa…an是否为出栈序列若是则输出 )若
摘要栈是一种非常重要的数据结构递归函数调用都离不开栈对n个元素入栈和出栈的研究是栈的一个主要研究内容利用二叉树给出了入栈和出栈序列的表示给出了由前置栈序列构造出二叉树的算法证明了对于按次序入栈的n个元
为了真实比较这三种算法的优劣设置一个数组sz[][]用来存放所有出栈序列的结果每求出一种结果不立即输出而是保存在数组sz中要求n≤l当入栈元素个数为 n时求出所有出栈序列所用时间如表所示(实
性质按照人栈与出栈的次序建立的二叉树入栈操作所代表的结点是左孩子出栈所代表的结点是右孩子 性质除叶子结点外其他结点均有左右孩子 且任一结点的左右孩子的标识互反即表示某一符号的入栈与
知识大全 数据结构考研分类复习真题 第六章 答案 (四)[10]
.由于二叉树前序遍历序列和中序遍历序列可唯一确定一棵二叉树因此若入栈序列为…n相当于前序遍历序列是…n出栈序列就是该前序遍历对应的二叉树的中序序列的数目因为中序遍历的实质就是一个结点进栈和出栈的过
()能得到在依次进栈后和出栈得部分输出序列然后入栈出栈得部分出栈序列入栈并出栈得部分输出序列最后退栈直到栈空得输出序列其操作序列为AAADDAADADDD ()不能得到输出顺序为的序列部分合法操
输入序列为不能得出其理由是输出序列最后两元素是前面个元素()得到后栈中元素剩且在栈顶不可能栈底元素在栈顶元素之前出栈 得到的过程如下入栈并出栈得到部分输出序列然后和入栈出栈部分输出序列变为接着和
知识大全 数据结构考研分类复习真题 第三章 栈和队列[16]
设一数列的输入顺序为若采用堆栈结构并以A和D分别表示入栈和出栈操作试问通过入出栈操作的合法序列【北方交通大学 一(分)】 ()能否得到输出顺序为的序列(分) ()能否得到输出顺序为的