45、Stack表示栈

45、Stack表示栈


参考答案和解析
错误

相关考题:

试题五(共 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. 组合)

试题四阅读以下说明和C代码,将应填入 (n) 处的字句写在答题纸的对应栏内。[说明]函数MultibaseOutput(long n, int B)的功能是:将一个无符号十进制整数n转换成B(2≤B≤16)进制数并输出。该函数先将转换过程中得到的各位数字入栈,转换结束后再把B进制数从栈中输出。有关栈操作的诸函数功能见相应函数中的注释。C代码中的符号常量及栈的类型定义如下:#define MAXSIZE 32typedef 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");}

请使用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 includeiostream 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(StacksRef) { char ch[]={‘a’,‘b’,‘c’}; coutch[0]”,”ch[1]”,”ch[2]endl; sRef.push(oh[0]);sRef.push(ch[1]);sRef.push(ch[2]); coutsRef.poP”,”; coutsRef.poP”,”; coutsRef.poPendl; } int main { ArrayStack as(10); f(as): return 0: }

阅读以下说明和C程序代码,将应填入______处的语句写在答题纸的对应栏内。[说明]函数MultibaseOutput(long n,int B)的功能是:将一个无符号十进制整数n转换成 B(2≤B≤16)进制数并输出。该函数先将转换过程中得到的各位数字入栈,转换结束后再把B进制数从栈中输出。有关栈操作的诸函数功能见相应函数中的注释。C代码中的符号常量及栈的类型定义如下:define MAXSIZE 32typedef 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:1the pop elem:1the 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()< <" ";}

( 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(top0) // 如果栈空 , 程序终止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;}

栈(Stack)是限定仅在(18)进入插入或删除操作的线性表。对栈来说,表尾端称为(18);表头端称为(18)。A.表头 栈顶(top),栈底(bottom)B.表头,栈底(bottom)栈顶(top)C.表尾,栈顶(top)栈底(bottom)D.表尾,栈底(bottom)栈顶(top)

阅读以下说明和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;}

下面是一个栈类的模板,其中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 Ti){if(top<size)stack[top++]=i;}T pop(){if(top==O)exit(1);//栈空时终止运行retum【 】;}};

假定栈用顺序的方式存储,栈类型stack定义如下:TYPE stack=RECORDA: ARRAY[1..M0OF datatype;t:0..M0;END;下面是栈的一种基本运算的实现:PROCEDURE xxxx(VAR s:stack)BEGINIF s.t=0THEN print('underflow')ELSE s.t:=s.t-1;END;请问这是栈的哪种基本运算?( )。A) 栈的推入B) 栈的弹出C) 读栈顶元素D) 将栈置为空栈A.B.C.D.

请将下列栈类Stack的横线处补充完整。class Stack{private:int pList[100]; ∥int数组,用于存放栈的元素int top; ∥栈顶元素(数组下标)public:Stack():top(0){}void Push(const int item); ∥新元素item

阅读以下说明和C函数,将(1)~(5)空缺处的字句填写完整。[说明]计算机在处理算术表达式时,首先将其转换为后缀表达式。例如,表达式“46+5*120-37)”的后缀表达式形式为“46 5 120 37-*+”。计算后缀表达式时,从左至右扫描后缀表达式:若遇到运算对象,则压入栈中;遇到运算符,则从栈中弹出相关运算对象进行计算,并将运算结果压入栈中。重复以上过程,直到后缀表达式扫描结束。例如,后缀表达式“46 5 120 37-*+”的计算过程如下:a.依次将46、5、120、37压入栈中;b.遇到“-”,取出37、120,计算120-37=83,将其压入栈中;c.遇到“*”,取出83、5,计算5×83=415,将其压入栈中;d.遇到“+”,取出415、46,计算46+415=461,将其压入栈中;e.表达式结束,则计算过程完成。函数computing(char expr[],int*result)的功能是基于栈计算后缀形式的表达式(以串形式存入字符数组 expr)的值,并通过参数result返回该值。函数的返回值为-1/0,分别表示表达式有/无错误。假设表达式中仅包含数字、空格和算术运算符号,其中所有项均以空格分隔,且运算符仅包含加(“+”)、减(“-”)、乘(“*”)、除(“\”)。函数computing中所用栈的基本操作的函数原型说明如下。● void InitStack(STACK*s):初始化栈。● void Push(STACK*s,int e):将一个整数压栈,栈中元素数目增1。● void Pop(STACK*s):栈顶元素出栈,栈中元素数目减1。● int Top(STACK s):返回非空栈的栈顶元素值,栈中元素数目不变。● int IsEmpty(STACKs):若s是空栈,则返回1;否则返回0。[C函数]

实现先进先出的对象栈的类是()。A.Thread类B.Stack类C.abstract类D.Vector类

使用VC6打开考生文件夹下的工程MyProj8。此工程包含一个源程序文件MyMain8.cpp,该程序实现栈的入栈和出栈的操作。其中有两个类:一个是节点类node,它包含节点值和指向上一个节点的指针prey;另一个类是栈类stack,它包含栈的头指针top。但类的定义并不完整。请按要求完成下列操作,将类Sample的定义补充完成:①定义私有节点值data,它是血型的数据,以及定义一个指向上一个节点的指针prev。请在注释“//* *1* *”之后添加适当的语句。②完成构造函数node(int d,node*n)的定义,使得私有成员data和prev分别初始化为d和n。请在注释“//* *2* *”之后添加适当的语句。③完成类stack的成员函数push(int i)的类体内的定义。函数push()实现入栈这个操作,即把形参i压入栈中,那么此时应该创建一个新的节点,并让这个节点的prev指针指向栈顶。请在注释“//* *3 * *”之后添加适当的语句。注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。源程序文件MyMain8.cpp清单如下://MyMain 8.cppinclude <iostream>using namespace std;class stack;class node{private://* * 1 * *public:node(int d, node *n){//* * 2 * *}friend class stack;};class stack{node *top; //栈头public:stack(){top=0;}void push(int i){//* * 3 * *}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;}

阅读下列说明和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)

试题七(共 15 分)阅读以下说明和C程序,将应填入 (n) 处的字句写在答题纸的对应栏内。【说明】现有 n(n 1000)节火车车厢,顺序编号为 1,2,3,...,n,按编号连续依次从 A方向的铁轨驶入,从 B 方向铁轨驶出,一旦车厢进入车站(Station)就不能再回到 A方向的铁轨上;一旦车厢驶入 B 方向铁轨就不能再回到车站,如图 7-1所示,其中 Station 为栈结构,初始为空且最多能停放 1000 节车厢。下面的 C 程序判断能否从 B 方向驶出预先指定的车厢序列,程序中使用了栈类STACK,关于栈基本操作的函数原型说明如下:void InitStack(STACK *s):初始化栈。void Push(STACK *s,int e): 将一个整数压栈,栈中元素数目增 1。void Pop(STACK *s):栈顶元素出栈,栈中元素数目减 1。int Top(STACK s):返回非空栈的栈顶元素值,栈中元素数目不变。int IsEmpty(STACK s):若是空栈则返回 1,否则返回 0。【C 程序】includestdio.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; in; 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++;}elseif ( (3) ){printf("error\n");return 1;}else {begin = (4) ;for(j = begin+1; 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;}

(12)假定栈用顺序的方式存储,栈类型 stack定义如下:TYPE stack=RECORDA:ARRAY[l..m0] OF datatype;t:O..m0;END;下面是栈的一种基本运算的实现:PROCEDURE xxxx(VAR s:satack);BEGINIF s.t=0THEN print(‘underflow’)ELSE s.t:=s.t-1;END;请问这是栈的哪一种基本运算?A) 栈的推入B)栈的弹出C)读栈顶元素D)将栈置为空栈

下列各种窗口对象中,对象最好在栈(Stack)中分配MFC窗口类是()。A、CToolBarB、CViewC、CWndD、CFrameWnd

Stack栈

向一个顺序栈S(栈顶指针为top)中插入元素x时,首先要()。A、S-stack[S-top]=xB、S-top++C、S-top--D、x=S-stack[S-top]

Stack类表示对象的先()后()集合。

单选题若程序中对堆栈设置如下,则下列说法错误的是()。 size   .set    120 stack  .usect  “STACK”,size                STM     # stack + size,SPA此堆栈段的段名为STACKB此堆栈段共120个单元C此堆栈段第一个变量的名称为sizeD堆栈设置好后,堆栈指针SP指向栈底

名词解释题Stack栈

单选题向一个顺序栈S(栈顶指针为top)中插入元素x时,首先要()。AS-stack[S-top]=xBS-top++CS-top--Dx=S-stack[S-top]

单选题下列各种窗口对象中,对象最好在栈(Stack)中分配MFC窗口类是()。ACToolBarBCViewCCWndDCFrameWnd