栈和队列的共同点是( ):
A.都是先进后出
B.都是先进先出
C.只允许在端点处插入和删除元素
D.没有共同点
一个队列的入队序列是5,6,7,8,则队列的输出序列是:
A.8,7,6,5
B.5,6,7,8
C.5,8,7,6
D.7,6,8,5
一个栈的输入序列为1, 2, ..., n,若输出序列的第一个元素是n,输出第i(1<=i<=n)个元素是( )。
(A)不确定 (B)n-i+1 (C)i (D)n-i
栈和队列的共同点是()。
(A)都是先进后出
(B)都是后进先出
(C)只允许在端点插入和删除元素
(D)没有共同点
用链接方式存储的队列,在进行删除运算时( )。
A. 仅修改头指针
B. 仅修改尾指针
C. 头、尾指针都要修改
D. 头、尾指针可能都要修改
若已知一个栈的入栈序列是1,2,3,, , n,其输出序列为p1,p2,p3,, , pn,若p1=n ,则pi 为
A. i B. n-i C. n-i+1 D.不确定
判定一个顺序栈S(栈空间大小为n)为空的条件是()。
A. S->top==0
B. S->top!=0
C. S->top==n
D. S->top!=n
和顺序栈相比,链栈有一个比较明显的优势是()。
A.通常不会出现栈满的情况
B.通常不会出现栈空的情况
C.插入操作更容易实现
D.删除操作更容易实现
设栈S和队列Q的初始状态为空,元素e1、e2、e3、e4、e5和e6依次进入栈S,一个元素出栈后即进入Q,若6个元素出队的序列是e2、e4、e3、e6、e5和e1,则栈S的容量至少应该是( )。
A.2 B.3 C.4 D. 6
队列的插入操作是在()。
A. 队尾B. 队头C. 队列任意位置D. 队头元素后
C 语言中定义的一维数组 a[50]和二维数组 b[10][5]具有相同的首元素地址,即 &(a[0]) == &(b[0][0])为真。在以列为主序时,a[18]的地址和( )地址相同。
A.b[1][7] B.b[1][8] C.b[8][1] D.b[7][1]
依次在初始为空的队列中插入元素a,b,c,d以后,紧接着做了两次删除操作,此时的队头元素是()。
A. a
B. b
C. c
D. d
若用一个循环队列空间大小为6,且当前rear和front的值为0和3,当从队列中删除一个元素,再加入两个元素后,rear和front的值分别为():
A.1和5
B.2和4
C.4和2
D.5和1
顺序循环队列的类型定义如下:typedef int ET;typedef struct{ET *base;int Front;int Rear;int Size}Queue;Queue Q;队列 Q 是否空的条件判断为____________________________(A) Q.Front==Q.Rear+1(B) Q.Rear==Q.Front(C) Q.Rear==(Q.Front+1) % Q.Size(D) Q.Rear==Q.Front and Q.Front==0
对于栈操作数据的原则是( )。
(A)先进先出 (B)后进先出
(C)后进后出 (D)不分顺序
设栈的输入序列为1,2,3,4,则()不可能是其输出的栈序列
(A) 1,2,4,3 (B) 2,1,3,4
(C) 1,4,3,2 (D) 4,3,1,2
数组Q[n]用来表示一个循环队列,f为当前队列头元素的前一位置,r为队尾元素的位置,假定队列中元素的个数小于n,计算队列中元素的公式为
(A) r- f; (B)(n+ f- r) % n; (C) n+ r- f; (D)(n+ r- f) % n
向一个栈顶指针为h的带头结点的链栈中插入指针s所指的结点时,应执行( )。
(A)h->next=s; (B)s->next=h; (C)s->next=h; h->next=s; (D)s->next=h->next;h->next=s;
某堆栈的输入序列为a, b, c, d,下面的四个序列中,不可能是它的输出序列的是( )。
(A)a,c,b,d (B)b,c,d,a (C)c,d,b,a (D)d,c,a,b
设输入序列为1、2、3、4、5、6,则通过栈的作用后可以得到的输出序列为()。
(A) 5,3,4,6,1,2
(B) 3,2,5,6,4,1
(C) 3,1,2,5,4,6
(D) 1,5,4,6,2,3
如入栈序列为1, 2, 3, 4, 5,则可能得到的出栈序列为( )。
(A)1, 2, 5, 3, 4 (B)3, 1, 2, 5, 4 (C)3, 2, 5, 4, 1 (D)以上都不可能
循环队列存储在数组A[0..m]中,则入队时的操作为()。
A.rear = rear + 1
B.rear = (rear + 1) mod (m – 1)
C.rear = (rear + 1) mod m
D.rear = (rear + 1) mod (m + 1)
将递归算法转换成对应的非递归算法时,通常需要使用()来保存中间结果。
A.队列
B.栈
C.链表
D.树
五节车厢以编号1,2,3,4,5顺序进入铁路调度站(栈),可以得到()的编组。
A. 3,4,5,1,2
B. 2,4,1,3,5
C. 3,5,4,2,1
D. 1,3,5,2,4
在栈的操作中,输入序列为A,B,C,D,不可能得到的输出数列是( )。
(A) ABCD (B) DCBA
(C) ACDB (D) CABD
顺序循环队列的类型定义如下:#define MAXQSIZE 100typedef struct{QElemtype *base;int front;int rear;}SqQueue;SqQueue Q;队列 Q 是否为空的条件判断为____________________________(A) Q.front==Q.rear+1(B) Q.rear==Q.front(C) Q.rear==(Q.front+1) % MAXQSIZE(D) Q.Rear==Q.Front and Q.Front==0
设计一个判别表达式中括号是否配对的算法,采用()数据结构最佳。
A. 顺序表
B. 链表
C. 队列
D. 栈
有六个元素6,5,4,3,2,1顺序入栈,问下列哪一个不是合法的出栈序列?()
A.5 4 3 6 1 2 B.3 4 6 5 2 1
C.4 5 3 1 2 6 D.2 3 4 1 5 6
具有线性结构的数据结构是()。
A.图
B.树
C.广义表
D.栈
栈和队列的存储方式既可是顺序方式,也可是链接方式。
队是一种插入与删除操作分别在表的两端进行的线性表,是一种先进后出型结构。
对于不同的使用者,一个表结构既可以是栈,也可以是队列,也可以是线性表。
栈和队列是一种非线性数据结构。
简述下述算法中各语句的主要作用,并写出算法的功能(栈和队列的元素类型均为int)。
voidalgo(Queue &Q){
Stack S; int d;
InitStack(S);
while(!QueueEmpty(Q)){
DeQueue (Q,d); Push(S,d);
};
while(!StackEmpty(S)){
Pop(S,d); EnQueue (Q,d);
}
简述以下算法的功能(栈和队列的元素类型均为int)。
void algo3(Queue &Q){Stack S; int d;InitStack(S);while(!QueueEmpty(Q)){DeQueue (Q,d); Push(S,d);};while(!StackEmpty(S)){Pop(S,d); EnQueue (Q,d);}}
以下运算实现在链栈上的进栈,请在处用请适当句子予以填充。
Void Push (LStackTp *ls,DataType x ) {
LstackTp *p;p=malloc(sizeof(LstackTp));
________1________;
p->next=ls;
_______2_________; }
以下运算实现在链队上的入队列,请在 ________________处用适当句子予以填充。
Void EnQueue(QueptrTp *lq,DataType x)
{
LqueueTp *p;
p=(LqueueTp *)malloc(sizeof(LqueueTp));
_______1_________=x;
p->next=NULL;
(lq->rear)->next=______2__________;
_______3_________;
说明线性表、栈与队的异同点。
给出下列算法段的功能
void Demo3( CirQueue *Q)
{//循环队列,设DataType 为int 型
int x; SeqStack S;InitStack( &S);while (! QueueEmpty( Q )){x=DeQueue( Q); Push( &S,x);}while (! StackEmpty( &s)){ x=Pop(&S); EnQueue( Q,x );}}// Demo3
设有编号为1,2,3,4的四辆列车,顺序进入一个栈式结构的车站,具体写出这四辆列车开出车站的所有可能的顺序。