注意:此页面搜索的是所有试题
国家开放大学数据结构复习题
在队列的顺序存储结构中,当插入一个新的队列元素时,尾指针后移,当删除一个元素队列时,头指针后移。
向一个栈顶指针为h的链栈(结点的指针域为next)中插入一个s所指结点时,先执行s->next=h,再执行h=s操作。
一个递归算法不必包括递归终止条件。
在一个链式队列中,若队头指针与队尾指针的值相同,则表示该队列至多有1个结点。
在用循环单链表表示的链式队列中,可以不设队头指针,仅在链尾设置队尾指针。
在下面空格处填写一条语句,以使下面的链式队列全部元素出队的算法完整。
int write(LinkQueue *q)
{QueueNode *p;
if (q->front==q->rear) /*队空*/
{printf(“队空!无元素可取”);
exit(0);
}
while (q->front->next != NULL)
{p=q->front->next;
q->front->next=p->next; /*出队*/
printf(“%4d”,p->data);
free(p); /*释放已出队结点*/
}
_______________ /*队空时,头尾指针指向头结点*/
}
A.q->front=q->rear;
B.q=q->next;
C.q->rear=q->front;
D.p=p->next;
在下面空格处填写适当的语句,以使下面的循环队列的入队和出队算法完整。
define MAXSIZE 100;
typedef char Elemtype;
typedef struct
{
Elemtype queue [MAXSIZE];
int front,rear;
}sequeuetype;
Sequeuetype Q;
int encqueue(sequeuetype*Q,elemtype x)
if ((Q->rear+1)%MAXSIZE==Q->front)
printf(“队列已满!\n”);
return 1;
else
Q->rear=(Q->rear+1)%MAXSIZE;
(1)
return 0;
} /*入队算法*/
Elemtype del_cqueue(sequeuetype *Q)
if ( (2) )
printf(“队列为空!\n”);
return 1;
else
Q->front=(Q->front+1)%MAXSIZE;
return(Q-queue[Q->front]);
/*出队算法*/
A.(1) (Q->rear+1)%MAXSIZE==Q->front (2) Q->front=(Q->front+1)%MAXSIZE;
B.(1) (Q->front+1)%MAXSIZE==Q->rear (2) Q->rear=(Q->rear+1)%MAXSIZE;
C.(1) Q->front==Q->rear (2) Q->queue[Q->rear]=x;
D.(1) Q->queue[Q->rear]=x; (2) Q->front==Q->rear
写出下列程序执行后的结果
SeqQueue Q;
InitQueue(Q);
int a[4]={5,8,12,15};
for(int i=0;i<4;i++) InQueue(Q,a[i]);
InQueue(Q,OutQueue(Q));
InQueue(Q,30);
InQueue(Q,OutQueue(Q)+10);
while(!QueueEmpty(Q)) printf(“%d ”,OutQueue(Q));
执行后的输出结果为:__________________。
A.5 8 12 15 30
B.12 15 5 30 18
C.8 12 15 30 18
D.12 15 5 18 30
写出下列程序执行后的结果
SeqStack S;
InitStack(S);
Push(S,3);
Push(S,4);
Push(S,5);
int x=Pop(S)+2*Pop(S);
Push(S,x);
int i,a[4]={5,8,12,15};
for (i=0;i<4;i++) Push(S,a[i]);
while(!StackEmpty(S)) Printf(“%d “,Pop(S));
执行后的输出结果为:__________________。
A.15 12 8 5 13 3
B.3 5 8 12 13 15
C.15 13 12 8 5 3
D.15 12 13 3 8 5
在下面空格处填写一条语句,以使下面的进栈算法完整。
void Push(struct SeqStack*s,ElemType x)
{
If (s->top==MaxSize-1){
printf(“栈满溢出错误!\n”);
exit(1);
}
________
s->data[s->top]=x;
}
A.s->top=s->data;
B.s->data++;
C.s->top++;
D.s->data=s->top;
在下面空格处填写一条语句,以使下面的出栈算法完整。
ElemType Pop(struct SeqStack*s,ElemType x)
{
If (StackEmpty(s)){
printf(“栈下溢出错误!\n”);
exit(1);
}
x=s->data[s->top];
_________
return x;
}
A.s->top--;
B.s->data--;
C.s->top=s->data;
D.s->data=s->top;
以下陈述中正确的是( )。
A.串是一种特殊的线性表 B.串的长度必须大于零
C.串中元素只能是字母 D.空串就是空白串
设有两个串p和q,其中q是p的子串,q在p中首次出现的位置的算法称为( )。
A.求子串 B.连接
C.匹配 D.求串长
串是( )。
A.不少于一个字母的序列 B.任意个字母的序列
C.不少于一个字符的序列 D.有限个字符的序列
串的长度是指( )。
A.串中所含不同字母的个数 B.串中所含字符的个数
C.串中所含不同字符的个数 D.串中所含非空格字符的个数
向一个栈顶指针为h的链栈(结点的指针域为next)中插入一个s所指结点时,先执行s->next=h,再执行h=s操作。
一个递归算法不必包括递归终止条件。
在一个链式队列中,若队头指针与队尾指针的值相同,则表示该队列至多有1个结点。
在用循环单链表表示的链式队列中,可以不设队头指针,仅在链尾设置队尾指针。
在下面空格处填写一条语句,以使下面的链式队列全部元素出队的算法完整。
int write(LinkQueue *q)
{QueueNode *p;
if (q->front==q->rear) /*队空*/
{printf(“队空!无元素可取”);
exit(0);
}
while (q->front->next != NULL)
{p=q->front->next;
q->front->next=p->next; /*出队*/
printf(“%4d”,p->data);
free(p); /*释放已出队结点*/
}
_______________ /*队空时,头尾指针指向头结点*/
}
A.q->front=q->rear;
B.q=q->next;
C.q->rear=q->front;
D.p=p->next;
在下面空格处填写适当的语句,以使下面的循环队列的入队和出队算法完整。
define MAXSIZE 100;
typedef char Elemtype;
typedef struct
{
Elemtype queue [MAXSIZE];
int front,rear;
}sequeuetype;
Sequeuetype Q;
int encqueue(sequeuetype*Q,elemtype x)
if ((Q->rear+1)%MAXSIZE==Q->front)
printf(“队列已满!\n”);
return 1;
else
Q->rear=(Q->rear+1)%MAXSIZE;
(1)
return 0;
} /*入队算法*/
Elemtype del_cqueue(sequeuetype *Q)
if ( (2) )
printf(“队列为空!\n”);
return 1;
else
Q->front=(Q->front+1)%MAXSIZE;
return(Q-queue[Q->front]);
/*出队算法*/
A.(1) (Q->rear+1)%MAXSIZE==Q->front (2) Q->front=(Q->front+1)%MAXSIZE;
B.(1) (Q->front+1)%MAXSIZE==Q->rear (2) Q->rear=(Q->rear+1)%MAXSIZE;
C.(1) Q->front==Q->rear (2) Q->queue[Q->rear]=x;
D.(1) Q->queue[Q->rear]=x; (2) Q->front==Q->rear
写出下列程序执行后的结果
SeqQueue Q;
InitQueue(Q);
int a[4]={5,8,12,15};
for(int i=0;i<4;i++) InQueue(Q,a[i]);
InQueue(Q,OutQueue(Q));
InQueue(Q,30);
InQueue(Q,OutQueue(Q)+10);
while(!QueueEmpty(Q)) printf(“%d ”,OutQueue(Q));
执行后的输出结果为:__________________。
A.5 8 12 15 30
B.12 15 5 30 18
C.8 12 15 30 18
D.12 15 5 18 30
写出下列程序执行后的结果
SeqStack S;
InitStack(S);
Push(S,3);
Push(S,4);
Push(S,5);
int x=Pop(S)+2*Pop(S);
Push(S,x);
int i,a[4]={5,8,12,15};
for (i=0;i<4;i++) Push(S,a[i]);
while(!StackEmpty(S)) Printf(“%d “,Pop(S));
执行后的输出结果为:__________________。
A.15 12 8 5 13 3
B.3 5 8 12 13 15
C.15 13 12 8 5 3
D.15 12 13 3 8 5
在下面空格处填写一条语句,以使下面的进栈算法完整。
void Push(struct SeqStack*s,ElemType x)
{
If (s->top==MaxSize-1){
printf(“栈满溢出错误!\n”);
exit(1);
}
________
s->data[s->top]=x;
}
A.s->top=s->data;
B.s->data++;
C.s->top++;
D.s->data=s->top;
在下面空格处填写一条语句,以使下面的出栈算法完整。
ElemType Pop(struct SeqStack*s,ElemType x)
{
If (StackEmpty(s)){
printf(“栈下溢出错误!\n”);
exit(1);
}
x=s->data[s->top];
_________
return x;
}
A.s->top--;
B.s->data--;
C.s->top=s->data;
D.s->data=s->top;
以下陈述中正确的是( )。
A.串是一种特殊的线性表 B.串的长度必须大于零
C.串中元素只能是字母 D.空串就是空白串
设有两个串p和q,其中q是p的子串,q在p中首次出现的位置的算法称为( )。
A.求子串 B.连接
C.匹配 D.求串长
串是( )。
A.不少于一个字母的序列 B.任意个字母的序列
C.不少于一个字符的序列 D.有限个字符的序列
串的长度是指( )。
A.串中所含不同字母的个数 B.串中所含字符的个数
C.串中所含不同字符的个数 D.串中所含非空格字符的个数