北京旷视科技有限公司12月招聘面试题53道20201225

试题五(共 15分)

阅读以下说明和C++代码,将应填入 (n) 处的字句写在答题纸的对应栏内。

【说明】

已知类 LinkedList 表示列表类,该类具有四个方法:addElement()、lastElement()、umberOfElement()以及removeLastElement()。四个方法的含义分别为:

void addElement(Object): 在列表尾部添加一个对象;

Object lastElement(): 返回列表尾部对象;

int numberOfElement(): 返回列表中对象个数;

void removeLastElement(): 删除列表尾部的对象。

现需要借助LinkedList来实现一个Stack栈类,C++代码1和C++代码2分别采用继承和组合的方式实现。

【C++代码 1】

class Stack :public LinkedList{

public:

void push(Object o){ addElement(o); }; //压栈

Object peek(){ return (1) ; }; //获取栈顶元素

bool isEmpty(){ //判断栈是否为空

return numberOfElement() == 0;

};

Object pop(){ //弹栈

Object o = lastElement();

(2) ;

return o;

};

};

【C++代码 2】

class Stack {

private:

(3) ;

public:

void push(Object o){ //压栈

list.addElement(o);

};

Object peek(){ //获取栈顶元素

return list. (4) ;

};

bool isEmpty(){ //判断栈是否为空

return list.numberOfElement() == 0;

};

Object pop(){//弹栈

Object o = list.lastElement();

list.removeLastElement();

return o;

};

};

【问题】

若类LinkedList新增加了一个公有的方法removeElement(int index),用于删除列表中第index个元素,则在用继承和组合两种实现栈类Stack的方式中,哪种方式下Stack对象可访问方法removeElement(int index)? (5) (A. 继承 B. 组合)


正确答案:
试题五参考答案
(1)lastElement()            (3分)
(2)removeLastElement()          (3分)
(3)LinkedList list           (3分)
(4)lastElement()            (3分)
(5)A,或继承            (3分)


试题六(共 15分)

阅读以下说明和Java代码,将应填入 (n) 处的字句写在答题纸的对应栏内。

【说明】

已知类 LinkedList 表示列表类,该类具有四个方法:addElement()、lastElement()、umberOfElement()以及removeLastElement()。四个方法的含义分别为:

void addElement(Object): 在列表尾部添加一个对象;

Object lastElement(): 返回列表尾部对象;

int numberOfElement(): 返回列表中对象个数;

void removeLastElement(): 删除列表尾部的对象。

现需要借助LinkedList来实现一个Stack栈类, Java代码1和Java代码2分别采用继承和组合的方式实现。

【Java代码1】

public class Stack extends LinkedList{

public void push(Object o){ //压栈

addElement(o);

}

public Object peek(){ //获取栈顶元素

return (1) ;

}

public boolean isEmpty(){ //判断栈是否为空

return numberOfElement() == 0;

}

public Object pop(){ //弹栈

Object o = lastElement();

(2) ;

return o;

}

}

【Java代码2】

public class Stack {

private (3) ;

public Stack(){

list = new LinkedList();

}

public void push(Object o){

list.addElement(o);

}

public Object peek(){//获取栈顶元素

return list. (4) ;

}

public boolean isEmpty(){//判断栈是否为空

return list.numberOfElement() == 0;

}

public Object pop(){ //弹栈

Object o = list.lastElement();

list.removeLastElement();

return o;

}

}

【问题】

若类LinkedList新增加了一个公有的方法removeElement(int index),用于删除列表中第index个元素,则在用继承和组合两种实现栈类Stack的方式中,哪种方式下Stack对象可访问方法removeElement(int index)? (5) (A. 继承 B. 组合)


正确答案:

试题六参考答案
(1)lastElement()            (3分)
(2)removeLastElement()          (3分)
(3)LinkedList list           (3分)
(4)lastElement()            (3分)
(5)A,或继承            (3分)

 


●设将整数1、2、3、4依次进栈,只要出栈时栈非空,则可将出栈操作按任何次序夹入其中,请回答下述问题:

1.当入、出栈次序为Push (1) ,Pop (),Push (2) ,Push (3) ,Pop(),Push (4) ,Pop(),出栈的数字序列为何?(这里Push(i)表示i进栈,Pop()表示出栈) (26)

2.能否得到出栈序列1、4、2、3和1、4、3、2?答案为 (27) 。

3.请分析研究1、2、3、4的24种排列中, (28) 序列是可以通过相应的入、出栈操作得到的。

(26) A.1,3,4

B.1,4,2,3

C.1,4,3

D.3,4,1

(27) A.可以

B.不可以

C.不确定

D.随机获得

(28) A.1,3,2,4

B.4,2,3,1

C.2,4,1,3

D.3,1,4,2


正确答案:A,B,A
【解析】出栈序列为1、3、4。
序列1、4、2、3不可能得到。因为4和2之间隔了3,当4出栈后,栈顶元素是3,而2在3的下面。
根据栈的数学性质,n个元素的出栈序列数目恰好符合卡塔南数列,即

因此4个元素的出栈序列数为:


这14种出栈序列如下:
1234  1243  1324  1342  1432
2134  2143  2314  2341  2431
3214  3241  3421  4321


请使用VC6或使用【答题】菜单打开考生文件夹proj2下的工程proj2,此工程包含有一个源程序文件proj2.cpp,其中定义了Stack类和ArrayStack类。 Stack是一个用于表示数据结构“栈”的类,栈中的元素是字符型数据。Stack为抽象类,它只定义了栈的用户接口,如下所示: 公有成员函数 功能 push 入栈:在栈顶位置添加一个元素 pop 退栈:取出并返回栈顶元素 ArrayStack是Stack的派生类,它实现了Stack定义的接口。ArrayStack内部使用动态分配的字符数组作为栈元素的存储空间。数据成员maxSize表示的是栈的最大容量,top用于记录栈顶的位置。成员函数push和pop分别实现具体的入栈和退栈操作。 请在程序中的横线处填写适当的代码,然后删除横线,以实现上述功能。此程序的正确输出结果应为: a,b,C C,b,a 注意:只在指定位置编写适当代码,不要改动程序中的其他内容,也不要删除或移动“//****料found****”。 //proj2.cpp include<iostream> using namespacc std; class Stack{ public: virtual void push(char C)=0; virtual char pop=0; };

class ArrayStack:public Stack{ char*P; int maxSizc; int top; public: ArravStack(int s) { top=0; maxSize=s: //*********found********* P=______; } ~ArrayStack { //*********found********* _______; } void push(char c) } if(top==maxSize){ cerr<<”Overflow! \n”: return; } //*********found********* _______; top++: } char pop { if(top==0){ cerr<<”Underflow!、n”; return‘\0’; } Top--; //*********found********* ______; } }; void f(Stack&sRef) { char ch[]={‘a’,‘b’,‘c’}; cout<<ch[0]<<”,”<<ch[1]<<”,”<<ch[2]<<endl; sRef.push(oh[0]);sRef.push(ch[1]);sRef.push(ch[2]); cout<<sRef.poP<<”,”; cout<<sRef.poP<<”,”; cout<<sRef.poP<<endl; } int main { ArrayStack as(10); f(as): return 0: }


正确答案:

(1)Ilew char[s]
(2)delete[]P
(3)P[top]=e
(4)return P[top]
【考点分析】
本题主要考查的是表示栈的抽象类Stack类及它的派生类ArrayStaek类、纯虚函数和成员函数。栈的节点一般使用指针表示,定义构造函数时要给指针分配空间,使用New语句来完成。~ArrayStack是析构函数,因为前面已经使用new来分配空间了,因此在这里要用delete语句来释放指针。
【解题思路】
(1)主要考查的是ArrayStack类的构造函数,在函数中要为P申请S个char型空间,应使用语句P=flew char[s];。
(2)主要考查析构函数,使用delete语句释放指针,即delete[]P;。
(3)主要考查push函数,top表示栈顶元素下标,添加的数据放到栈顶,因此使用语句P[top]=c;。
(4)主要考查pop函数,输出栈顶数据,top表示栈顶元素下标,因此使用语句return P[top];。


阅读以下说明C++代码,将应填入(n)处的字句写在对应栏内。

[说明]

以下程序的功能是实现堆栈的一些基本操作。堆栈类stack共有三个成员函数:empty判断堆栈是否为空;push进行人栈操作;pop进行出栈操作。

[C++程序]

include "stdafx. h"

include <iostream, h>

eonst int maxsize = 6;

class stack {

float data[ maxsize];

int top;

public:

stuck(void);

~ stack(void);

bool empty(void);

void push(float a);

float pop(void);

};

stack: :stack(void)

{ top =0;

cout < < "stack initialized." < < endl;

}

stack:: ~stack(void) {

cout < <" stack destoryed." < < endl;

bool stack:: empty (void) {

return (1);

void stack: :push(float a)

if(top= =maxsize) {

cout < < "Stack is full!" < < endl;

return;

data[top] =a;

(2);

}

float stack:: pop (void)

{ if((3)){

cout< < "Stack is undcrflow !" < < endl;

return 0;

(4);

return (5);

}

void main( )

{ stack s;

coat < < "now push the data:";

for(inti=l;i< =maxsize;i+ +) {

cout< <i< <" ";

s. push(i);

}

coat < < endl;

cout< < "now pop the data:";

for(i = 1 ;i < = maxsize ;i + + )

cout< <s. pop()< <" ";

}


正确答案:(1)top==0? true:false (2)top++(或者top =top+1)(3)top==0 (4)top--(或者top =top-1) (5)data[top]
(1)top==0? true:false (2)top++(或者top =top+1)(3)top==0 (4)top--(或者top =top-1) (5)data[top] 解析:(1)判断堆栈是否为空的条件是top为0,而且本函数的返回值为布尔类型,故此处应该填写top==0? true:false;
(2)数据入栈后,栈顶指针要向上移动一个单元;
(3)top为0说明堆栈已经空了,此处if语句返回堆栈为空的提示;
(4)先将栈顶指针往下移动一个单元,才可以指向要出栈的数据;
(5)本行代码的功能是返回要出栈的数据。


北京旷视科技有限公司12月招聘面试题面试题面试官常问到的一些题目整理如下:问题 Q1:什么是Python?使用Python有什么好处?可用的回答 :Python是一种编程语言,包含对象,模块,线程,异常和自动内存管理。Python的好处在于它简单易用,可移植,可扩展,内置数据结构,并且它是一个开源的。问题 Q2:请用代码简答实现stack?可用的回答 : stack的实现代码(使用python内置的list),实现起来是非常的简单,就是list的一些常用操作 class Stack(object): def _init_(self): self.stack = def push(self, value): # 进栈 self.stack.append(value) def pop(self): #出栈 if self.stack: self.stack.pop() else: raise LookupError(stack is empty!) def is_empty(self): # 如果栈为空 return bool(self.stack) def top(self): #取出目前stack中最新的元素 return self.stack-1 问题 Q3:分布式爬虫主要解决什么问题?可用的回答 : 面对海量待抓取网页,只有采用分布式架构,才有可能在较短时间内完成一轮抓取工作。它的开发效率是比较快而且简单的。 问题 Q4:什么是Python?使用Python有什么好处?可用的回答 :Python是一种编程语言,包含对象,模块,线程,异常和自动内存管理。Python的好处在于它简单易用,可移植,可扩展,内置数据结构,并且它是一个开源的。问题 Q5:简述 OSI 七层协议?可用的回答 : OSI是Open System Interconnection的缩写,意为开放式系统互联。 OSI七层协议模型主要是: 1. 应用层(Application) 应用层 是最靠近用户的OSI层。这一层为用户的应用程序(例如电子邮件、文件传输和终端仿真)提供网络服务。 2. 表示层(Presentation) 表示层 可确保一个系统的应用层所发送的信息可以被另一个系统的应用层读取。 例如,PC程序与另一台计算机进行通信,其中一台计算机使用扩展二一十进制交换码(EBCDIC),而另一台则使用美国信息交换标准码(ASCII)来表示相同的字符。 如有必要,表示层会通过使用一种通格式来实现多种数据格式之间的转换。 3. 会话层(Session) 会话层 通过运输层(端口号:传输端口与接收端口)建立数据传输的通路。 主要在你的系统之间发起会话或者接受会话请求(设备之间需要互相认识可以是IP也可以是MAC或者是主机名) 4. 传输层(Transport) 运输层 定义了一些传输数据的协议和端口号(WWW端口80等),如: TCP(transmission control protocol 传输控制协议,传输效率低,可靠性强,用于传输可靠性要求 高,数据量大的数据) UDP(user datagram protocol用户数据报协议,与TCP特性恰恰相反,用于传输可靠性要求不高,数据 量小的数据,如QQ聊天数据就是通过这种方式传输的) 主要是将从下层接收的数据进行分段和传输,到达 目的地址后再进行重组。常常把这一层数据叫做段。 5. 网络层(Network) 网络层 在位于不同地理位置的网络中的两个主机系统之间提供连接和路径选择。 Internet的发展使得从世界各站点 访问信息的用户数大大增加,而网络层正是管理这种连接的层。 6. 数据链路层(Data Link) 数据链路层 定义了如何让格式化数据以进行传输,以及如何让控制对物理介质的访问。 这一层通常还提供错误检测和纠正,以确保数据的可靠传输。 7. 物理层(Physical) 物理层 主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。 它的主要作用是 传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后在转化为1、0,也就是我们常说的数模转 换与模数转换)。 这一层的数据叫做比特。 问题 Q6:scrapy和requests的使用情况?可用的回答 : requests 是 polling 方式的,会被网络阻塞,不适合爬取大量数据 scapy 底层是异步框架 twisted ,并发是最大优势 问题 Q7:什么是arp协议?可用的回答 : ARP(Address Resolution Protocol)即地址解析协议, 用于实现从 IP 地址到 MAC 地址的映射,即询问目标IP对应的MAC地址。 问题 Q8:TCP和UDP的区别?可用的回答 : TCP与UDP基本区别 1. 基于连接与无连接 2. TCP要求系统资源较多,UDP较少 3. UDP程序结构较简单 4. 字节流模式(TCP)与数据报模式(UDP); 5. TCP保证数据正确性,UDP可能丢包 6. TCP保证数据顺序,UDP不保证 具体编程时的区别 1.socket()的参数不同 2.UDP Server不需要调用listen和accept 3.UDP收发数据用sendto/recvfrom函数 4.TCP:地址信息在connect/accept时确定 5

( 15 )请将下列栈类 Stack 补充完整

class Stack{

private:

int pList[100]; // int 数组 , 用于存放栈的元素

int top; // 栈顶元素 ( 数组下标 )

public:

Stack():top(0){}

void Push(const int &item); // 新元素 item 压入栈

int Pop(void); // 将栈顶元素弹出栈

};

void Stack::Push(const int &item){

if(top == 99) // 如果栈满 , 程序终止

exit(1);

top++; // 栈顶指针增 1

___________;

}

int Stack::Pop(){

if(top<0) // 如果栈空 , 程序终止

exit(1);

return pList[top--];

}


正确答案:


以下程序实现栈的入栈和出栈的操作。其中有两个类:一个是节点类node,它包含点值和指向上一个节点的指针 prev;另一个类是栈类 stack, 它包含栈的头指针 top。

生成的链式栈如下图所示。

〈IMG nClick=over(this) title=放大 src="tp/jsj/2jc++j28.1.gif"〉

下面是实现程序,请填空完成此程序。

include 〈iostream〉

using namespace std;

class stack;

class node

{

int data;

node *prev;

public:

node(int d, node *n)

{

data=d;

prev=n;

}

friend class stack;

};

class stack

{

node *top; //栈头

public:

stack()

{

top=0;

}

void push(int i)

{

node *n=【 】;

top=n;

}

int pop()

{

node *t=top;

if (top)

{

top=top-〉prev;

int c= t-〉data;

delete t;

return c;

}

return 0;

}

int main ()

{

stack s;

s.push(6);

s.push(3);

s.push (1);

return 0;

}


正确答案:new node(itop)
new node(i,top) 解析:本题考核友元类以及对象成员的应用,属于综合考题。本程序中定义了两个类node和stack,用于实现堆栈的压入和弹出操作。其中,类 stack是类node的友元类,这样类stack中的成员可以访问类node中的所有成员。在类node中,定义两个私有变量:整型变量data和对象指针prev。变量data用于保存节点的数值,而对象指针prey用于指向上一节点。在类node的构造函数中,形参是数据d和对象指针n。在类stack中,定义了一个私有变量,栈顶指针top,并在构造函数中赋值0(即指针为空)。
函数push()实现入栈操作,即把形参i压入栈中,那么此时应该创建一个新的节点,并让这个节点的prev指针指向栈顶,即top。然后让top指针指向新的节点。所以在push()函数中应填入“node*n=new node(i,top)”。类stack中的pop()函数实现数据的弹出功能。先定义了一个对象指针t指向栈顶节点。然后判断堆栈是否为空,如果为空,则返回0,否则就弹出栈顶节点的值。那么应该先将栈顶指针后退一个节点,然后把对象t指针指向的节点值弹出,并删除节点t。


阅读以下说明和C++程序,将应填入(n)处的字句写在对应栏内。

【说明】

以下程序的功能是设计一个栈类stack<T>,并建立一个整数栈。

【程序】

include < iostream. h >

include < stdlib. h >

const int Max =20; //栈大小

template < class T >

class stack{ //栈元素数组

T s[Max]; //栈顶下标

int top;

public:

stack( )

{

top =-1; //栈顶初始化为-1

}

void push( const T &item); //item入栈

T pop( ); //出栈

int stackempty( ) const; //判断栈是否为

};

template < class T >

void stack <T >::push(const T &item)

{

if(top==(1))

{

cout <<"栈满溢出" <<endl;

exit(1);

}

top ++

s[top] = item;

}

template < class T >

T stack<T> ::pop()

{

T temp;

if(top==(2))

{

cout <<"栈为空,不能出栈操作" < < endl;

exit(1);

}

temp =s[top];

top --;

return temp;

}

template < class T >

int stack < T >:: stackempty( ) const

{ return top == -1;

{

void main( )

{

stack <int> st;

int a[] ={1,2,3,4,5};

cout <<"整数栈" <<endl;

cout <<"入栈序列:" <<endl;

for(int i=0;i<4;i ++)

{

cout <<a[i] <<" ";

(3);

}

cout << endl <<"出栈序列";

while((4))

tout<<(5)<<" ";

cout< < endl;

}


正确答案:(1)Max-1 (2)-1 (3)st.push(a[i]) (4)!st.stackempty() (5)st.pop()
(1)Max-1 (2)-1 (3)st.push(a[i]) (4)!st.stackempty() (5)st.pop() 解析:本题用类模板方式定义一个栈类,其中有两个私有数据成员:s[](存放栈元素)和top(栈顶元素下标),以及3个公有成员函数: push(元素入栈)、Pop(元素出栈)和stackempty(判断栈是否为空)。
在函数push()中,首先要判断是否栈满。栈的大小为Max,数组的下标从。开始,所以栈满的条件是栈顶元素下标为Max-1,所以(1)空应填入“Max-1”。同样,在函数pop()中,首先要判断是否为空栈,由于栈顶初始化为-1,所以(2)空应填入“-1”。
在主函数中,先进行入栈操作,所以(3)空应填入“st.push(a [i])”。然后进行出栈操作,判断栈是否为空,调用对象的函数stackempty(),所以(4)空应填入“!st.stackempty()”。(5)空处调用出栈函数,所以应填入“st.pop()”。


下面是一个栈类的模板,其中push函数将元素i压入栈顶,pop函数弹出栈顶元素。栈初始为空,top值为0,栈顶元素在stack[top-1]中,在下面横线处填上适当的语句,完成栈类模板的定义。

template<class t>

class Tstack

{

enum{size=1000};

T stack[size]

int top;

public:

Tsack():top(0){}

void push(const T&i){

if(top<size)

stack[top++]=i;

}

T pop()

{

if(top==O)exit(1);//栈空时终止运行

retum【 】;

}

};


正确答案:stack[--top]
stack[--top] 解析:++/--运算符;注意栈顶元素在stack[top-1]中。


请将下列栈类Stack的横线处补充完整。

class Stack{

private:

int pList[100]; ∥int数组,用于存放栈的元素

int top; ∥栈顶元素(数组下标)

public:

Stack():top(0){}

void Push(const int &item); ∥新元素item


正确答案:pList[top]=item
pList[top]=item 解析: 此题考查的是堆栈数据结构。堆栈是一种先进后出的队列,每次入栈在栈顶,出栈也在栈顶。当栈顶指针所指位置是最后一个有效数据时,下次出栈直接取出栈顶指针所指数据,然后栈顶指针再减1;入栈时需要将栈顶指针先增1,然后将数据存入栈顶指针所指位置。本题中,从Pop()数中可以看出,是先取数然后top才会减1,Push()函数应先增1再取数。所以应填入pList[top]=item。

更多 “北京旷视科技有限公司12月招聘面试题53道20201225” 相关考题
考题 有一个初始为空的栈和输入序列A,B,C,D,E,F,G,现经过如下操作:push,push, pop,push,push,pop,push,pop,pop。所有操作结束后栈中的元素列表(从底到顶)是 ( )。A.ACB.AC.ABCED.ABCDE正确答案:A解析:栈是一种特殊的线性表,栈是限定在表的一端进行插入和删除运算的线性裹。栈的操作原则是“后进先出”。根据栈的后进先出组织数据的特点结合题中的操作,栈的操作过程如下:[*]进栈的元素有ABCDE,而删除的元素有BDE,所以操作结束后栈中的元素只有AC。

考题 若push、pop分别表示入栈、出栈操作,初始栈为空且元素1、2、3依次进栈,则经过操作序列push、push、pop、pop、push、pop之后,得到的出栈序列为 ( ) A.321 B.213 C.231 D.123 答案:B解析:栈的运算特点为在同一端插入和删除元素,即先入后出,总是栈顶元素先出栈,新元素总是压在栈顶元素之上并成为栈顶元素。初始栈为空,如下图(a)所示。对于元素 1、2、3,依照操作序列push、push、pop、pop、push、pop,可以得到出栈序列213,其过程为:第一个push操作将元素1压入栈中,如下图(b)所示:第二个push操作将元素2压入栈中,如下图(c)所示:第一个pop将栈顶元素2弹出栈,新栈顶元素为1,如下图(d)所示;第二个pop将栈顶元素1弹出栈,导致栈空,如下图(e)所示:其后的push和pop分别将元素3压入和弹出栈,操作结果如下图(f)和(g)所示。

考题 设栈S的初始状态为空,现有五个元素组成的序列1,2,3,4,5,对该序列在栈S上依次进行PUSH,PUSH,POP,PUSH,POP,PUSH,PUSH操作,出栈的元素序列是()。A、5,4,3,2,1B、2,1C、2,3D、3,4正确答案:C

考题 问答题某堆栈初始为空,符号PUSH和POP分别表示1次进栈操作和1次出栈操作。对于进栈序列a,b,c,d,e,经过PUSH, PUSH, POP, PUSH, POP, PUSH, PUSH时,得到的出栈序列是什么?正确答案:得到的出栈序列是b,c解析:暂无解析

考题 阅读下列说明和C代码,将应填入(n)处的字句写在对应栏内。【说明】栈(Stack)结构是计算机语言实现中的一种重要数据结构。对于任意栈,进行插入和删除操作的一端称为栈顶(Stock Top),而另一端称为栈底(Stock Bottom)。栈的基本操作包括:创建栈(NewStack)、判断栈是否为空(IsEmpty)、判断栈是否已满(IsFull)、获取栈顶数据(Top)、压栈/入栈(Push)、弹栈/出栈(Pop)。当设计栈的存储结构时,可以采取多种方式。其中,采用链式存储结构实现的栈中各数据项不必连续存储(如下图所示)。以下C代码采用链式存储结构实现一个整数栈操作。【C代码】typedef struct List {int data; //栈数据struct List* next; //上次入栈的数据地址}List;typedef struct Stack{List* pTop; //当前栈顶指针}Stack;Stack* NewStack() {return (Stack*) calloc(1/sizeof(Stack));}int IsEmpty(Stack* S){//判断栈S是否为空栈if((1))return 1;return 0;}int Top(Stack* s){//获取栈顶数据。若栈为空,则返回机器可表示的最小整数if(IsEmpty(S))return INT_ MIN;return (2);}void Push(Stack* S,int theData) {//将数据theData压栈List* newNode;newNode=(List*)calloc(1/sizeof (List));newNode->data=theData;newNode->next=S->pTop;S->pTop=(3);}void Pop(Stack* S) {//弹栈List* lastTop;if(IsEmpty(S) ) return;lastTop=S->pTop;S->pTop=(4);free(lastTop);}define MD(a) a<<2int main(){int i;Stack* myStack;myStack= NewStack();Push(myStack,MD(1));Push(myStack,MD(2));Pop(myStack);Push(myStack,MD(3)+1);while( !IsEmpty(myStack) ){printf("%d",Top(myStack));Pop(myStack);}return 0;}以上程序运行时的输出结果为:(5)正确答案:(1)S==NULL||S->pTop==NULL (2)S->pTop->data (3)newNode(4)S->pTop->next或lastTop->next (5)244(1)S==NULL||S->pTop==NULL (2)S->pTop->data (3)newNode(4)S->pTop->next,或lastTop->next (5)244 解析:本题考查基本程序设计能力。 堆栈是软件设计中常使用的一种经典数据结构,题目给出的操作都是任何堆栈都具有的基本操作。堆栈的存储结构通常采用数组或链表形式,但无论采用哪种存储结构,整体上呈现的是后进先出的特点,即后进入堆栈的元素先出栈。题目中给出的结构体 Stack仅包含一个指向栈顶元素的指针(栈顶指针),当且仅当堆栈中没有元素时,该指针应为NULL。当向堆栈中增加元素时,首先需要动态创建该元素的存储区,并且栈顶指针指向该元素。当元素出栈时,栈顶指针则指向出栈元素的紧前一个元素。结构体List表示栈中元素,包含对应的数据和指向紧上次入栈的元素指针next,对于第1个入栈的元素,指针next为NULL,而其他元素中的指针next一定不为NULL。 C语言中,如果用一个整数型表达式表示条件判定语句的话,该表达式的值为。则表示假,非0表示真。从给定程序代码可以看出,对于函数IsEmpty,若其返回值为0则表示堆栈非空,否则表示堆栈为空。因此,对于空(1),必须填写可表示堆栈为空的判定语句:S=NULL||S->p)Top==NULL,这2个条件中只要有1个条件满足,则表明堆栈S为空。对于空(2),此时需要返回栈顶元素中的数据,而栈顶元素为S->pTop,所以对应的数据应该为S->pTop->data。 对于压栈操作Push,在为新元素获取存储空间后,必须调整堆栈的栈顶指针S->pTop指向新元素的存储区,即S->pTop=newNode。对于弹栈操作Pop,弹出栈顶元素lastTop后,需要调整栈顶指针,使其指向被弹出元素的下一个元素,即S->pTop=S->pTop->next,或S->pTop=lastTop->next。 对于main函数中宏MD(x),在程序预编译时会按字符替换为“x2”。所以在main函数中,首先入栈的元素为“12”,即整数4,第2个入栈的元素为“22”,即整数8,其次将8弹出,然后再将“32+1”入栈,C语言中“+”优先级高于“”,所以此时入栈者为整数24,而此时堆栈中有2个元素,其中栈顶元素为24,下一元素为4。最后,若堆栈非空,则循环完成显示栈顶元素的值、弹出栈顶元素的操作,直至堆栈为空。所以程序执行时的输出内容为“244”。

考题 若pllsh、pop分别表示入栈、出栈操作,初始栈为空且元素1、2、3依次进栈,则经过操作序列push、push、pop、pop、push、pop之后,得到的出栈序列为 ______。A.321B.213C.231D.123A.B.C.D.正确答案:B

考题 问答题设将整数1,2,3,4依次进栈,但只要出栈时栈非空,则可将出栈操作按任何次序夹入其中,请回答下述问题: (1)若入、出栈次序为Push(1),Pop(),Push(2),Push(3),Pop(),Pop(),Push(4),Pop(),则出栈的数字序列为何?(这里Push(i)表示i进栈,Pop()表示出栈) (2)能否得到出栈序列1423和1432?并说明为什么不能得到或者如何得到。 (3)请分析1,2,3,4的24种排列中,哪些序列是可以通过相应的入出栈操作得到的。正确答案:(1)出栈序列为:1324(2)不能得到1423序列。因为要得到14的出栈序列,则应做Push(1),Pop(),Push(2),Push(3),Push(4),Pop()。这样,3在栈顶,2在栈底,所以不能得到23的出栈序列。能得到1432的出栈序列。具体操作为:Push(1),Pop(),Push(2),Push(3),Push(4),Pop(),Pop(),Pop()。(3)在1,2,3,4的24种排列中,可通过相应入出栈操作得到的序列是:1234,1243,1324,1342,1432,2134,2143,2314,2341,2431,3214,3241,3421,4321不能得到的序列是:1423,2413,3124,3142,3412,4123,4132,4213,4231,4312解析:暂无解析

考题 某堆栈初始为空,符号PUSH和POP分别表示1次进栈操作和1次出栈操作。对于进栈序列a,b,c,d,e,经过PUSH, PUSH, POP, PUSH, POP, PUSH, PUSH时,得到的出栈序列是什么?正确答案:得到的出栈序列是b,c

考题 进栈/出栈指令PUSH/POP的内存操作数的段地址只能是()。A、CSB、ESC、DSD、SS正确答案:D

考题 试说明入栈指令PUSH OPRD和出栈指令POP OPRD的操作过程。OPRD是16位操作数。正确答案:P.USH  OPRD       POP  OPRDS.PßSP-2          OPRDß[SP][SP]ßOPRD