若已知一个栈的入栈顺序是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语言中堆栈的基础,课本上有详细介绍。

本回答被提问者采纳
参考技术B 当然不确定啦,又没规律的 参考技术C 答安是D

如何用函数实现入栈和出栈

已知链栈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是的主要内容,如果未能解决你的问题,请参考以下文章

JAVA 方法的入栈出栈问题

两个遗留

一个栈的入栈序列为ABCDEF,则不可能的出栈序列是

如何用函数实现入栈和出栈

如何理解“入栈、读栈、出栈”

栈的操作实验(数据结构)