出自:国家开放大学数据结构复习题

用非递归方法实现递归算法时一定要使用递归工作栈。
栈是限定在表的一端进行插入和删除操作的线性表,又称为先进后出表。
队列的特性是先进后出。
往栈中插入元素的操作方式是:先写入元素,后移动栈顶指针。
循环队列队头指针在队尾指针前一个位置,队列是“满”状态。
在队列的顺序存储结构中,当插入一个新的队列元素时,尾指针后移,当删除一个元素队列时,头指针后移。
向一个栈顶指针为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.串中所含非空格字符的个数
若串S==“English”,其子串的个数是( )。+++
A.9 B.16 C. 36 D.28
下面关于串的叙述中,不正确的是( )。
A.串是字符的有限序列
B.空串是由空格构成的串
C.模式匹配是串的一种重要运算
D.串即可以采用顺序存储,也可以采用链式存储
串与普通的线性表相比较,它的特殊性体现在( )。
A.顺序的存储结构 B.链接的存储结构
C.数据元素是一个字符 D.数据元素可以任意
空串与空格串( )。B
A.相同 B.不相同 C.可能相同 D.无法确定
两个字符串相等的条件是( )。
A.两串的长度相等
B.两串包含的字符相同
C.两串的长度相等,并且两串包含的字符相同
D.两串的长度相等,并且对应位置上的字符相同
串函数Strcat(a,b)的功能是进行串( )。
A.比较 B.复制 C.赋值 D.连接
串函数StrCmp(“ABCd”,“ABCD”)的值为( )。
A.0 B.-1 C.1 D.3
设主串为“FABcCDABcdEFaBc”,以下模式串能与主串成功匹配的是( )。
A. EFaBc B. ABCdE
C. DABCC D .FAbcC
以下四个串中最小的是( )。
A.”ABADF” B.”ABAFD”
C.”ABADFA” D.”ABAF”
在实际应用中,要输入多个字符串,且长度无法预定。则应该采用( )存储比较合适。
A.链式 B. 顺序 C.堆结构 D.无法确定
用字符数组存储长度为n的字符串,数组长度至少为n+1。
串是一种特殊的线性表,其特殊性表现在组成串的数据元素都是字符。
串的两种最基本的存储方式是顺序和链接。
两个串相等的充分必要条件是每一个对应位置的字符相同。
空串的长度是1。
一个空格的串的长度是0。
字符串a1=〝heijing〞, a2 =〝hen〞 , a3= 〝heifang〞, a4=“heni〞最小的是a2。
串函数StrCmp(“ABCd”,“ABCD”)的值为-1。
一下程序段的结果是:c的值为( )
char *a[5]={“12378”,”1237”,”1236789”,”1237”,”123708”}
int i,c=0
for(i=0;i<5;i++)
if (strcmp(a[i],”1237”)==0) c++;
A.2 B.5 C.0 D.1237
2.以下程序段的结果是:c的值为( )+++
char a[5]=”1236789”;
int *p=a,c=0;
While (*p++) c++;
A.8 B.7 C.10 D.12
一维数组A采用顺序存储结构,每个元素占用6个字节,第6个元素的存储地址为100,则该数组的首地址是( )。+++
A.64 B.28
C.70 D.90
稀疏矩阵采用压缩存储的目的主要是( )。
A.表达变得简单 B.对矩阵元素的存取变得简单
C.去掉矩阵中的多余元素 D.减少不必要的存储空间的开销
一个非空广义表的表头( )。
A.不可能是原子 B.只能是子表
C.只能是原子 D.可以是子表或原子
常对数组进行的两种基本操作是( )。
A.建立与删除 B.索引与修改
C.查找和修改 D.查找与索引
设二维数组A[5][6]按行优先顺序存储在内存中,已知A[0][0] 起始地址为1000,每个数组元素占用5个存储单元,则元素A[4][4]的地址为( )。
A.1140 B.1145 C. 1120 D.1125
设有一个20阶的对称矩阵A,采用压缩存储的方式,将其下三角部分以行序为主序存储到一维数组B中(数组下标从1开始),则矩阵中元素a9,2在一维数组B中的下标是( )。
A.41 B.32 C.18 D.38
广义表的( a , (d,a ,b) , h , (e ,( (i ,j ) ,k )) )深度是( )。
A.6 B.10
C.8 D.4
广义表( f , h , (a ,b, d, c) , d , e ,( (i ,j ) ,k ) )的长度是( )。
A.6 B.10
C.8 D.4
设有一个广义表A (a),其表尾为( )。
A.a B.( ( ) ) C.() D.(a)
下列广义表中的线性表是( )。
A.E(a,(b,c)) B.E(a,E) C.E(a,b) D.E(a,L( ))