试题五(共 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. 组合)
试题六(共 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分)
试题四
阅读以下说明和C代码,将应填入 (n) 处的字句写在答题纸的对应栏内。
[说明]
函数MultibaseOutput(long n, int B)的功能是:将一个无符号十进制整数n转换成B(2≤B≤16)进制数并输出。该函数先将转换过程中得到的各位数字入栈,转换结束后再把B进制数从栈中输出。有关栈操作的诸函数功能见相应函数中的注释。C代码中的符号常量及栈的类型定义如下:
#define MAXSIZE 32
typedef struct {
int *elem; /* 栈的存储区 */
int max; /* 栈的容量,即栈中最多能存放的元素个数 */
int top; /* 栈顶指针 */
}Stack;
[C代码]
int InitStack(Stack *S, int n) /* 创建容量为n的空栈 */
{ S->elem = (int *)malloc(n * sizeof(int));
if(S->elem == NULL) return -1;
S->max = n; (1) = 0 ; return 0;
}
int Push(Stack *S, int item) /* 将整数item压入栈顶 */
{ if(S->top == S->max){ printf("Stack is full!\n"); return -1;}
(2) = item ; return 0;
}
int StackEmpty(Stack S) { return (!S.top) ? 1 : 0; } /* 判断栈是否为空 */
int Pop(Stack *S) /* 栈顶元素出栈 */
{ if(!S->top) { printf("Pop an empty stack!\n"); return -1;}
return (3) ;
}
void MultibaseOutput(long n, int B)
{ int m; Stack S;
if (InitStack(&S, MAXSIZE)) {printf("Failure!\n"); return;}
do {
if (Push(&S, (4) )) {printf("Failure!\n"); return;}
n = (5) ;
}while(n != 0);
while(!StackEmpty(S)) { /* 输出B进制的数 */
m = Pop(&S);
if(m < 10) printf("%d", m); /* 小于10,输出数字 */
else printf("%c", m + 55); /* 大于或等于10,输出相应的字符 */
}
printf("\n");
}
【C程序】
#include<stdio.h>
/*此处为栈类型及其基本操作的定义,省略*/
int main(){
STACK station;
int state[1000];
int n; /*车厢数*/
int begin, i, j, maxNo; /*maxNo为A端正待入栈的车厢编号*/
printf("请输入车厢数:");
scanf("%d",&n);
printf(“请输入需要判断的车厢编号序列(以空格分隔):”);
if(n<1)return-1;
for (i=0; i<n; i++) /*读入需要驶出的车厢编号序列,存入数组state[]*/
scanf("%d",&state[i]);
(1) ; /*初始化栈*/
maxNo=1;
for(i=0; i<n; ){ /*检查输出序列中的每个车厢号state[i]是否能从栈中获取*/
if( (2) ){ /*当栈不为空时*/
if (state[i]=Top(station)) { /*栈顶车厢号等于被检查车厢号*/
printf("%d",Top(station));
Pop(&station);i++;
}
else
if ( (3) ) {
printf(“error\n”);
return 1;
}
else{
begin= (4) ;
for(j=begin+l;j <=state [i];j++){
Push(&station, j);
}
}
}
else{ /*当栈为空时*/
begin=maxNo;
for(j=begin; j<=state[i];j++) {
Push(&station, j);
}
maxNo= (5) ;
}
}
printf("OK");
return 0;
}
●试题七
阅读以下说明和C++程序,将应填入(n)处的字句写在答题纸的对应栏内。
【说明】
以下程序的功能是设计一个栈类stack<T>,并建立一个整数栈。
【程序】
#include<iostream.h>
#include<stdli
B.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) )
cout<< (5) <<" ";
cout<<endl;
}
●试题七
【答案】(1)Max-1(2)-1(3)st.push(a[i])(4)!st.stackempty()(5)st.pop()
【解析】本题用类模板方式定义一个栈类,其中有两个私有数据成员:s[](存放栈元素)和top(栈顶元素下标),以及3个公有成员函数:push(元素入栈)、pop(元素出栈)和stackempty(判断栈是否为空)。
在函数push()中,首先要判断是否栈满。栈的大小为Max,数组的下标从0开始,所以栈满的条件是栈顶元素下标为Max-1,所以(1)空应填入"Max-1"。同样,在函数pop()中,首先要判断是否为空栈,由于栈顶初始化为-1,所以(2)空应填入"-1"。
在主函数中,先进行入栈操作,所以(3)空应填入"st.push(a[i])"。然后进行出栈操作,判断栈是否为空,调用对象的函数stackempty(),所以(4)空应填入"! st.stackempty()"。(5)空处调用出栈函数,所以应填入"st.pop()"。
京东数字科技控股股份有限公司2月招聘面试题面试题面试官常问到的一些题目整理如下:问题 Q1:请用代码简答实现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 问题 Q2:Django 和 Flask 之间有什么区别?可用的回答 :Flask是一个“微框架”,主要用于具有更简单要求的小型应用程序。在Flask中,必须使用外部库。Django也可以用于更大的应用程序。它包括一个ORM。问题 Q3:跨域请求问题django怎么解决的(原理)?可用的回答 : 1. 启用中间件 2. post请求 3. 验证码 4. 表单中添加%csrf_token%标签 问题 Q4:Python中的self是什么?可用的回答 :self是类的实例或对象。在Python中,self包含在第一个参数中。init方法中的self变量引用新创建的对象,而在其他方法中,它引用其方法被调用的对象。问题 Q5:如何在python中使用三元运算符?可用的回答 :三元运算符是用于显示条件语句的运算符。这包含true或false值,并且必须为其评估语句。其基本语法为:三元运算符是用于显示条件语句的运算符。这包含true或false值,并且必须为其评估语句。其基本语法为:on_true if expression else on_false问题 Q6:如果对方网站反爬取,封IP了怎么办?可用的回答 : 放慢抓取熟速度,减小对目标网站造成的压力,但是这样会减少单位时间内的数据抓取量 使用代理IP(免费的可能不稳定,收费的可能不划算) 问题 Q7:什么是C/S和B/S架构?可用的回答 : 1. C/S架构及其背景 C/S架构是一种比较早的软件架构,主要应用于局域网内。在这之前经历了集中计算模式,随着计算机网络的进步与发展,尤其是可视化工具的应用,出现过两层C/S和三层C/S架构, 不过一直很流行也比较经典的是我们所要研究的两层C/S架构。 C/S架构软件(即客户机/服务器模式)分为客户机和服务器两层: 第一层是在客户机系统上结合了表示与业务逻辑, 第二层是通过网络结合了数据库服务器。 简单的说就是第一层是用户表示层,第二层是数据库层。 客户端和服务器直接相连,这两个组成部分都承担着重要的角色。 2. C/S架构的优点 1. 客户端和服务器直接相连。点对点的连接方式更安全,可以直接操作本地文本,比较方便。 2. 客户端可以处理一些逻辑事务。可以进行数据处理和数据存储,提供一定的帮助。 3. 客户端直接操作界面。 3. C/S架构的缺点 1. C/S架构适用于局域网,对网速的要求比较高。 2. 客户端界面缺乏通用性,且当业务更改时就需要更改界面,重新编写。 3. 随着用户数量的增多,会出现通信拥堵、服务器响应速度慢等情况。 4. 系统的维护也比较麻烦。 4. C/S架构的应用 C/S架构的软件是在是数不胜数,从办公的OFFICE,WPS,WINRAR到杀毒软件如金山,瑞金再到我们的娱乐 软件,如播放器,QQ,微信等,无处不见C/S架构。 5. B/S架构及其背景 随着Internet和WWW的流行,以往的主机/终端和C/S都无法满足当前的全球网络开放、互连、信息随处可见和信息共享的新要求, 于是就出现了B/S型模式,即浏览器/服务器结构。它是C/S架构的一种改进,可以说属于三层C/S架构。 主要是利用了不断成熟的WWW浏览器技术,用通用浏览器就实现了原来需要复杂专用软件才能实现的强大功能,并节约了开发成本,是一种全新的软件系统构造技术。 第一层是浏览器(即客户端)只有简单的输入输出功能,处理极少部分的事务逻辑。 由于客户不需要安装客户端,只要有浏览器就能上网浏览,所以它面向的是大范围的用户,所以界面设计得比较简单,通用。 第二层是WEB服务器,扮演着信息传送的角色。 当用户想要访问数据库时,就会首先向WEB服务器发送请求,WEB服务器统一请求后会向数据库服务器发送访问数据库的请求,这个请求是以SQL语句实现的。 第三层是数据库服务器,它存放着大量的数据。 当数据库服务器收到了WEB服务器的请求后,会对SQL语句进行处理,并将返回的结果发送给WEB服务器, 接下来,WEB服务器将收到的数据结果转换为HTML文本形式发送给浏览器。 6. B/S架构的优点 1. 浏览器和数据库服务器采用多对多的方式连接。因此适合在广域网里实现巨大的互联网,甚至是全球网,有着很强大的信息共享性。 2. 浏览器只处理一些简单的逻辑事务,负担小。 3. 数据都集中存放在数据库服务器,所以不存在数据不一致现象。 4. 随着服务器负载的增加,可以平滑地增加服务器的个数并建立集群服务器系统,然后在各个服务器之间做 负载均衡。 5. B/S建立在广域网上,所以需要的网速要求不高。
请使用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程序代码,将应填入______处的语句写在答题纸的对应栏内。
[说明]
函数MultibaseOutput(long n,int B)的功能是:将一个无符号十进制整数n转换成 B(2≤B≤16)进制数并输出。该函数先将转换过程中得到的各位数字入栈,转换结束后再把B进制数从栈中输出。有关栈操作的诸函数功能见相应函数中的注释。C代码中的符号常量及栈的类型定义如下:
define MAXSIZE 32
typedef struct{
int * elem; /* 栈的存储区 */
int max; /* 栈的容量,即栈中最多能存放的元素个数 */
int top; /* 栈顶指针 */
}Stack;
[C代码]
int InitStack(Stack * S,int n) / * 创建容量为n的空栈 */
{ S->elem=(int *)malloc(n * sizeof(int));
if(S->elem==NULL)return-1;
S->max=n; (1)=O;return 0;
}
int Push(Stack * S,int item) / * 将整数item压入栈顶 * /
{ if(S->top==S->max){ printf(“Stack is full! \n”);return-1;}
(2)=item;return 0;
}
int StackEmpty(StackS) {return (! S.top)? 1:0;} / * 判断栈是否为空 * /
int Pop(Stack *S ) / * 栈顶元素出栈 * /
{ if(! S->top){printf(“Pop an empty stack! \n”);return-1;}
return (3);
}
void MultibaseOutput(long n,int B)
{ int m;StackS;
if (InitStack(&S,MAXSIZE)){printf(“Failure! \n”);return;}
do {
if(Push(&S, (4) )){printf(“Failure! \n”);return;}
n=(5);
}while(n!=0);
while(! StackEmpty(S)){ / * 输出B进制的数 * /
m=Pop(&S);
if(m<10)printf(“%d”,m); / * 小于10,输出数字 * /
else printf(“%c”,m+55); / * 大于或等于10,输出相应的字符 * /
}
printf(“\n”);
}
使用VC6打开考生文件夹下的工程test34_3。此工程包含一个test34_3.cpp,其中定义了表示栈的类stack。源程序中stack类的定义并不完整,请按要求完成下列操作,将程序补充完整。
(1)定义类stack的私有数据成员sp和size,它们分别为整型的指针和变量,其中sP指向存放栈的数据元素的数组,size为栈中存放最后一个元素的下标值。请在注释“//**1**”之后添加适当的语句。
(2)完成类stack的构造函数,该函数首先从动态存储空间分配含有100个元素的int型数组,并把该数组的首元素地址赋给指针sp,然后将该数组的所有元素赋值为0,并将size赋值为-1(size等于-1表示栈为空)。请在注释“//**2**”之后添加适当的语句。
(3)完成类stack的成员函数push的定义。该函数将传入的整型参数x压入栈中,即在size小于数组的最大下标情况下, size自加1,再给x赋值。请在注释“//**3**”之后添加适当的语句。
(4)完成类stack的成员函数pop的定义,该函数返回栈顶元素的值,即在size不等于-1的情况下,返回数组中下标为size的元素的值,并将size减1。请在注释“//**4**”之后添加适当的语句。
程序输出结果如下:
the top elem:1
the pop elem:1
the stack is empty
注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。
源程序文件test34_3.cpp清单如下:
include<iostream.h>
class stack
{
//** 1 **
public:
stack ( );
bool empty(){return size==-1;}
bool full() {return size==99;}
void push(int x);
void pop();
void top();
};
stack::stack()
{
//** 2 **
for(int i=0; i<100; i++)
*(sp+i)=0;
size=-1;
}
void stack::push(int x)
{
//** 3 **
cout<<"the stack is full"<<end1;
else
{
size++;
*(sp+size) = x;
}
}
void stack::pop()
{
//** 4 **
cout<<"the stack is empty"<<end1;
else
{
cout<<"the pop elem:"<<*(sp+size)<<end1;
size--;
}
}
void stack::top()
{
if iempty() )
cout<<"the stack is empty"<<end1;
else
{
cout<<"the top elem:"<<*(sp+size)<<end1;
}
}
void main ( )
{
stack s;
s.push(1);
s.top();
s.pop();
s.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()< <" ";
}
有如下程序: #nclude<iostremn> using namespace std; class Stack{ public: Stack(unsigned n=10:size(n){rep_=new int[size];top=O;} Stack(Stack&s):size(s.size) { rep_=new int[size]; for(int i=0;i<size;i++)rep_[i]=s.rep_[i]; top=s.top; } ~Stack(){delete[]rep_;} void push(int a){rep_[top]=a; top++;} int opo(){--top;return rep_[top];} bool is Empty()const{return top==O;} pavate: int*rep_; unsigned size,top; }; int main() { Stack s1; for(int i=1;i<5;i++) s1.push(i); Stack s2(s1); for(i=1;i<3;i++) cout<<s2.pop()<<','; s2.push(6); s1.push(7); while(!s2.isEmpty()) cout<<s2.pop()<<','; return 0; } 执行上面程序的输出是
A.4,3,2,1
B.4,3,6,7,2,1
C.4,3,6,2,1
D.1,2,3,4