若已知一个栈的入栈顺序是1,2,3,...,n,其输出序列为P1,P2,P3,...,Pn,若P1是n,则Pi是
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了若已知一个栈的入栈顺序是1,2,3,...,n,其输出序列为P1,P2,P3,...,Pn,若P1是n,则Pi是相关的知识,希望对你有一定的参考价值。
A)i B)n-i C)n-i+1 D)不确定
C、n-i+1。
栈的排列遵循先进后(即后进先出)出的原则,因为P1是n,是出栈的第一个数字。说明在n之前进栈的数字都没有出栈,所以这个顺序是确定的,还可以知道,最后出栈的一定是数字1,也就是Pn,代入这个式子。
栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据。栈具有记忆作用,对栈的插入与删除操作中,不需要改变栈底指针。
扩展资料:
进栈(PUSH)算法
①若TOP≥n时,则给出溢出信息,作出错处理(进栈前首先检查栈是否已满,满则溢出;不满则作②);
②置TOP=TOP+1(栈指针加1,指向进栈地址);
③S(TOP)=X,结束(X为新进栈的元素);
退栈(POP)算法
①若TOP≤0,则给出下溢信息,作出错处理(退栈前先检查是否已为空栈, 空则下溢;不空则作②);
②X=S(TOP),(退栈后的元素赋给X):
③TOP=TOP-1,结束(栈指针减1,指向栈顶)。
参考技术A C)n-i+1栈的排列遵循先进后(即后进先出)出的原则
因为P1是n,是出栈的第一个数字,说明在n之前进栈的数字都没有出栈,所以这个顺序是确定的。还可以知道,最后出栈的一定是数字1,也就是Pn。代入这个式子,是正确的。追问
最后出栈的一定是数字1,也就是Pn?
追答如果中间没有其他数字进栈,只是这几个数字之间的进出栈顺序,那出栈的顺序一定是n,n-1,……
3,2,1.这个是c语言中堆栈的基础,课本上有详细介绍。
如何用函数实现入栈和出栈
已知链栈Q,编写函数判断栈空,如果栈空则进行入栈操作,否则出栈并输出。(要求判断栈空、出栈、入栈用函数实现)
参考技术A #ifndef Node_#define Node_
template <class T> class LinkedStack;
template <class T> class LinkedQueue;
template <class T>
class Node
friend LinkedStack<T>;
friend LinkedQueue<T>;
private:
T data;
Node<T> *link;
;
#endif
// file lstack.h
// linked stack
#include "node.h"
#include "xcept.h"
template<class T>
class LinkedStack
public:
LinkedStack() top = 0;
~LinkedStack();
bool IsEmpty() const return top == 0;
bool IsFull() const;
T Top() const;
LinkedStack<T>& Add(const T& x);
LinkedStack<T>& Delete(T& x);
private:
Node<T> *top; // pointer to top node
;
template<class T>
LinkedStack<T>::~LinkedStack()
// Stack destructor..
Node<T> *next;
while (top)
next = top->link;
delete top;
top = next;
template<class T>
bool LinkedStack<T>::IsFull() const
// Is the stack full?
try Node<T> *p = new Node<T>;
delete p;
return false;
catch (NoMem) return true;
template<class T>
T LinkedStack<T>::Top() const
// Return top element.
if (IsEmpty()) throw OutOfBounds();
return top->data;
template<class T>
LinkedStack<T>& LinkedStack<T>::Add(const T& x)
// Add x to stack.
Node<T> *p = new Node<T>;
p->data = x;
p->link = top;
top = p;
return *this;
template<class T>
LinkedStack<T>& LinkedStack<T>::Delete(T& x)
// Delete top element and put it in x.
if (IsEmpty()) throw OutOfBounds();
x = top->data;
Node<T> *p = top;
top = top->link;
delete p;
return *this;
本回答被提问者采纳
以上是关于若已知一个栈的入栈顺序是1,2,3,...,n,其输出序列为P1,P2,P3,...,Pn,若P1是n,则Pi是的主要内容,如果未能解决你的问题,请参考以下文章