最新数据结构期中试卷及答案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、选择题(每小题2分,共30分)

1. 数据结构是( D )。

A.一种数据类型 B.数据的存储结构

C.一组性质相同的数据元素的集合

D.相互之间存在一种或多种特定关系的数据元素的集合

2.以下与数据的存储结构无关的术语是( D )。

A.链队列 B. 链表 C. 顺序表 D. 栈

3.以下数据结构中,( A )是非线性数据结构

A.树 B.字符串 C.队 D.栈

4.一个顺序存储线性表的第一个元素的存储地址是90,每个元素的长度是2,则第6个元素的存储地址是(B)。

A.98 B.100 C.102 D.106

5.在线性表的下列运算中,不改变数据元素之间结构关系的运算是(D )。

A.插入 B.删除 C.排序 D.查找

6.线性表采用链式存储时,其地址(D )。

A.必须是连续的 B.一定是不连续的

C.部分地址必须连续 D.连续与否均可以

7.线性表是(A )。

A.一个有限序列,可以为空 B.一个有限序列,不可以为空

C.一个无限序列,可以为空 D.一个无限序列,不可以为空

8.若进栈序列为1,2,3,4,5,6,且进栈和出栈可以穿插进行,则可能出现的出栈序列为( B )。

A.3,2,6,1,4,5 B.3,4,2,1,6,5

C.1,2,5,3,4,6 D.5,6,4,2,3,1

9. 若一个栈的输人序列是1,2,3,…,n,输出序列的第一个元素是n,则第k个输出元素是(C )。

A.k B.n-k-1 C.n-k+1 D.不确定

10.对于队列操作数据的原则是( A )。

A. 先进先出

B. 后进先出

C. 先进后出

D. 不分顺序

11. 栈和队列的共同点是( C )。

A. 都是先进先出

B. 都是先进后出

C. 只允许在端点处插入和删除元素

D. 没有共同点

12.在一个链队列中,假定front和rear分别为头指针和尾指针,删除一个结点的操作是( A )。

A.front=front->next B.rear=rear->next

C.rear->next=front D.front->next=rear

13. 空串与空格串( B )。

A.相同 B.不相同 C.可能相同 D.无法确定

14. 串与普通的线性表相比较,它的特殊性体现在(C )。

A.顺序的存储结构 B.链接的存储结构

C.数据元素是一个字符 D.数据元素可以任意

15. 串的长度是指( B )。

A.串中所含不同字母的个数

B.串中所含字符的个数

C.串中所含不同字符的个数

D.串中所含非空格字符的个数

二、填空题(每空2分,共20分)

1.线性表、栈和队列,串都是__线性_____结构。

2.数据的基本单位是__数据元素_______________。

3.当线性表的元素总数基本稳定,且很少进行插入和删除操作,但要求以最快的速度存取线性表中的元素时,应采用_顺序______存储结构。

4.已知具有n个元素的一维数组采用顺序存储结构,每个元素占k个存储单元,第一个元素的地址为Loc(a1),那么,第i个元素的存储地址Loc(a i)= Loc(a1)+(i-1)*k 。

5.栈(stack)是限定在表尾进行插人或删除操作的线性表。在栈中,允许插人和删除操作的一端称为__栈顶________,而另一端称为_栈底________。

6.一个循环队列Q中,头指针和尾指针分别为Q.front和Q.rear,且最大队列长度为MaxQSize,则判断队空的条件为 Q.rear==Q.front,判断队满的条件为(Q.rear+1)%MaxQSize==Q.front。队列的长度为 (.rear-Q.front+MaxQSize )%MaxQSize

7.两个串相等的充分必要条件是两个串的长度相等,且各个对应位置的字符都相等。

三、程序填空题(每空3分,共30分)

1. 在带头结点的单链表L中第i个数据元素之前插入数据元素e的C语言描述算法如下,其中L为链表头结点指针。请填充算法中标出的空白处,完成其功能。

typedef struct node

{int data;

struct node *next;

}linknode,*link;

int ListInsert_L(link &L, int i, int e) {

Linknode *p;int j;

p = L; j = 0;

while (p && j < i-1)

{ p=p->next ; ++j; } // 寻找第i-1个结点

if (!p || j > i-1) return 0;

s=(link)malloc(sizeof(linknode)) ;// 生成新结点s

s->data = e;

s->next=p->next ; p->next = s; // 插入L中

return 1;

} \

2. 对顺序栈的C语言描述算法如下,其中top为栈顶指针,请填充算法中标出的空白处,插入元素e为新的栈顶元素。

#define STACK_INIT_SIZE 100

#define STACKINCREMENT 10

typedef struct{

char *base;

char *top;

int stacksize;

}SqStack;

int Push( SqStack &S, char e)

{ //

if ( (s.top-s.base)>=s.stacksize ) //栈满,追加存储空间

{

S.base=(SElemType *)realloc(S.base,S.stacksize+STACKINCREMENT) *sizeof(SElemType));

if (! S.base) return 0;

S.top = s.base+s.stacksize ; //修改栈顶指针

S.stacksize += STACKINCREMENT;

}

*s.top++=e ;//插入元素

return 1;

}

3. 对链队列的C语言描述算法如下,请填充算法中标出的空白处,删除队列Q 的队头元素并用e返回其值。

typedef struct QNode{

QElemType data;

struct QNode *next;

}QNode, *QueuePtr;

typedef struct {

QueuePtr front;

QueuePtr rear;

}LinkQueue;

int DeQueue(LinkQueue &Q, QElemType &e)

{ Linknode *p;

if( Q.front==Q.rear ) retrun 0;//队列空,返回

p = Q.front -> next;

e = p->data;

Q.front -> next=p->next;//修改指针

if(Q.rear==p) Q.rear= Q.front ; //队列只有一个元素的情况

free(p) ;//释放结点空间

return 1;

}

相关文档
最新文档