数据结构栈和队列测验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《数据结构》栈和队列测试题
一、填空题(12*1=12分)
1.栈是操作受限的线性表,是固定的,插入和删除只能在进行;
2.栈的工作原理:; 队列的工作原理:。
3.队列是操作受限的线性表:可以在插入,在进行删除;
4.能够从任意一个结点出发直接访问到所有结点的是:链表;
5.设有栈S和队列Q,初始状态均为空。首先依次将A,B,C,D,E,F入栈,然后从栈中退出三个元素依次入队,再将X,Y,Z入栈后,将栈中所有元素退出并依次入队,最后将队列中所有元素退出,则退队元素的顺序为:;
6.循环队列判断队空的条件:队满的条件是:
7.顺序队列判断队空的条件:顺序队列判断队满的条件:
二.选择题(2*5=10分)
1.下列数据结构中,属于非线性结构的是( )
A.双向链表
B.循环链表
C.二叉链表
D.循环队列
2.下列与栈结构有关联的是( )
A.数组的定义与使用
B.操作系统的进程调度
C.函数的递归调用
D.选择结构的执行
3.下列关于算法复杂度叙述正确的是( )
A.最坏情况下的时间复杂度一定高于平均情况的时间复杂度
B.时间复杂度与所用的计算工具无关
C.时间复杂度与采用的算法描述语言有关
D.对同一问题,采用不同的算法,则它们的时间复杂度是相同的
4.下列叙述正确的是( )
A.有两个指针域的链表称为二叉链表;
B.循环链表是循环队列的链式存储结构;
C.带链的栈有栈顶指针和栈底指针,因此又称为双重链表
D.节点中具有多个指针域的链表称为多重链表
5.下列叙述中正确的是( )
A.节点中具有两个指针域的链表一定是二叉链表
B.节点中具有两个指针域的链表可以是线性结构,也可以是非线性结构
C.二叉树只能采用链式存储结构
D.循环链表是非线性结构
三、程序填空:(10*2=20分)
1.已知顺序栈定义如下,请将元素d入栈的代码补充完整
/*定义栈的数据类型*/
typedef struct{
int *base;//栈底指针
int *top;//栈顶指针
int stack_size;//栈的大小
}SqStack;
/*功能:将元素d入栈返回值:1:成功0:失败*/
int push( ,int d){
//判断栈是否已满,如果满,入栈失败
if( >=s->stack_size) {
printf("栈已满,入栈失败!\n");
return 0;
}
//把d放入top指针所指的位置
*( )=d;
//top指针上移(++)
;
return ;
}
2.已知顺序队列定义如下,请将下列代码补充完整:
typedef struct{
int queue[MAX_QUEUE_SIZE];
int front;//队头
int rear;//队尾
}SqQueue;
/*功能:出队(把队首元素删除)参数:sq指向一个顺序队列,d:保存删除元素返回值:1:成功0:失败*/
int deQueue(SqQueue *sq,int *d){
//如果sq为NULL,输出“队列未创建,出队失败!”,返回0
if( ) {
printf("队列未创建,出队失败!\n");
;
}
//如果队列为空(没有元素),输出“队列为空,出队失败!”,返回0
if(sq->front sq->rear){
printf("队列为空,出队失败!\n");
return 0;
}
*d= ; //否则,把front所指的元素放到d里
sq->front= ; //front+1
//返回1
return 1;
}
参考答案:
一.填空题
1. 栈底栈顶
2.先进后出FILO (后进先出) 先进先出(FIFO)
3.队尾队首(队头)
4. 循环链表
5.FEDZYXCBA
6.队首指针==队尾指针(rear==front)(rear+1)%MAX_QUEUE_SIZE==front
7. 队首指针==队尾指针(rear==front)rear>MAX_QUEUE_SIZE-1
二.选择题
CCBBB
三.填空题
1. SqStack *s s->top s->top (s->top)++ 1
2.sq==NULL return 0; == sq->queue[sq->front] sq->front+1