注意:此页面搜索的是所有试题
国家开放大学数据结构复习题
设有一个单向循环链表,头指针为head,链表中结点的指针域为next,p指向尾结点的直接前驱结点,若要删除尾结点,得到一个新的单向循环链表,可执行操作p->next=head;。
线性表用顺序方式存储可以随机访问。
设有一个长度为40的顺序表,要删除第8个元素需移动元素的个数为3
线性表用关键字的顺序方式存储,可以用二分法排序
设线性表以不带头结点的单向链表存储,链表头指针为head,以下程序的功能是输出链表中各结点中的数据域data,完成程序中空格部分。
#define NULL 0
void main( )
{ NODE *head ,*p ;
p=head; /*p为工作指针*/
do
{printf(“%d\n”,
[ 1 ];
[ 2 ];
}while
[ 3 ];
设有一个头指针为head的不带头结点单向链表,p、q是指向链表中结点类型的指针变量,p指向链表中结点a, (设链表中没有结点的数据域与结点a的数据域相同),写出相关语句
(1)使该单向链表成为单向循环链表
(2)插入结点s,使它成为a结点的直接前驱
q=p; x=p->data;
while([ 4 ])q=q->next;
q->next=head;
q=p; p=p->next;
while(p->data!=x)
{ q=p;
[ 5 ]
}
s->next=p;
[ 6 ]
设有一个不带头结点的单向链表,头指针为head,p、prep是指向结点类型的指针,该链表在输入信息时不慎把相邻两个结点的信息重复输入,以下程序段是在该单向链表中查找这相邻两个结点,把该结点的数据域data打印出来,并把其中之一从链表中删除,填写程序中的空格。
prep=head;
p=prep->next;
while(p->data!=prep->data)
{
prep=p;
[ 7 ];
}
printf(“min=%d”,
[ 8 ]);
prep->next= [ 9 ];
若让元素1,2,3依次进栈,则出栈顺序不可能为( )。
A.3,2,1 B.2,1,3
C.3,1,2 D.1,3,2
一个队列的入队序列是1,2,3,4。则队列的输出序列是( )。
A.4,3,2,1 B.1,2,3,4
C.1,4,3,2 D.3,2,4,1
一个栈的进栈序列是10,20,30,40,50,则栈的不可能输出序列是( )(进栈出栈可以交替进行)。
A.10,20,30,40,50 B.40,30,50,10,20
C.40,50,30,20,10 D.50,40,30,20,10
元素4,6,8,10按顺序依次进栈,按该栈的可能输出序列依次入队列,该队列的可能输出序列是( )(进栈出栈可以交替进行)。
A.10,8,4,6 B.10,6,4,8
C.8,4,6,10 D.10,8,6,4
向顺序栈中压入新元素时,应当( )。
A.先移动栈顶指针,再存入元素
B.先存入元素,再移动栈顶指针
C.先后次序无关紧要
D.同时进行
在一个栈顶指针为top的链栈中,将一个p指针所指的结点入栈,应执行( )。
A.top->next=p;
B.p->next=top->next; top->next=p;
C.p->next=top; top=p;
D.p->next=top->next; top=top->next;
在一个栈顶指针为top的链栈中删除一个结点时,用 x保存被删结点的值,则执行( )。
A.x=top;top=top->next;
B.x=top->data;
C.top=top->next; x=top->data;
D.x=top->data; top=top->next;
一般情况下,将递归算法转换成等价的非递归算法应该设置( )。
A.栈 B.队列
C.堆栈或队列 D.数组
线性表用顺序方式存储可以随机访问。
设有一个长度为40的顺序表,要删除第8个元素需移动元素的个数为3
线性表用关键字的顺序方式存储,可以用二分法排序
设线性表以不带头结点的单向链表存储,链表头指针为head,以下程序的功能是输出链表中各结点中的数据域data,完成程序中空格部分。
#define NULL 0
void main( )
{ NODE *head ,*p ;
p=head; /*p为工作指针*/
do
{printf(“%d\n”,
[ 1 ];
[ 2 ];
}while
[ 3 ];
设有一个头指针为head的不带头结点单向链表,p、q是指向链表中结点类型的指针变量,p指向链表中结点a, (设链表中没有结点的数据域与结点a的数据域相同),写出相关语句
(1)使该单向链表成为单向循环链表
(2)插入结点s,使它成为a结点的直接前驱
q=p; x=p->data;
while([ 4 ])q=q->next;
q->next=head;
q=p; p=p->next;
while(p->data!=x)
{ q=p;
[ 5 ]
}
s->next=p;
[ 6 ]
设有一个不带头结点的单向链表,头指针为head,p、prep是指向结点类型的指针,该链表在输入信息时不慎把相邻两个结点的信息重复输入,以下程序段是在该单向链表中查找这相邻两个结点,把该结点的数据域data打印出来,并把其中之一从链表中删除,填写程序中的空格。
prep=head;
p=prep->next;
while(p->data!=prep->data)
{
prep=p;
[ 7 ];
}
printf(“min=%d”,
[ 8 ]);
prep->next= [ 9 ];
若让元素1,2,3依次进栈,则出栈顺序不可能为( )。
A.3,2,1 B.2,1,3
C.3,1,2 D.1,3,2
一个队列的入队序列是1,2,3,4。则队列的输出序列是( )。
A.4,3,2,1 B.1,2,3,4
C.1,4,3,2 D.3,2,4,1
一个栈的进栈序列是10,20,30,40,50,则栈的不可能输出序列是( )(进栈出栈可以交替进行)。
A.10,20,30,40,50 B.40,30,50,10,20
C.40,50,30,20,10 D.50,40,30,20,10
元素4,6,8,10按顺序依次进栈,按该栈的可能输出序列依次入队列,该队列的可能输出序列是( )(进栈出栈可以交替进行)。
A.10,8,4,6 B.10,6,4,8
C.8,4,6,10 D.10,8,6,4
向顺序栈中压入新元素时,应当( )。
A.先移动栈顶指针,再存入元素
B.先存入元素,再移动栈顶指针
C.先后次序无关紧要
D.同时进行
在一个栈顶指针为top的链栈中,将一个p指针所指的结点入栈,应执行( )。
A.top->next=p;
B.p->next=top->next; top->next=p;
C.p->next=top; top=p;
D.p->next=top->next; top=top->next;
在一个栈顶指针为top的链栈中删除一个结点时,用 x保存被删结点的值,则执行( )。
A.x=top;top=top->next;
B.x=top->data;
C.top=top->next; x=top->data;
D.x=top->data; top=top->next;
一般情况下,将递归算法转换成等价的非递归算法应该设置( )。
A.栈 B.队列
C.堆栈或队列 D.数组