自考数据结构历年试题及答案 联系客服

发布时间 : 星期三 文章自考数据结构历年试题及答案更新完毕开始阅读7e7bb987e53a580216fcfe68

阅读下列算法,并回答问题:

(1)写出执行函数调用f(p)的输出结果; (2)简述函数f的功能。 void f(BinThrTree t) {

while(t) {

printf(t->data); if(t->lchild) t=t->lchild; else

t=t->rchild; } }

答案(1)ABDFCEGH (2) 先根遍历

32.下列函数FindCycle(G,i)的功能是,对一个采用邻接表作存储结构的有向图G,利用深度优先搜索策略寻找一条经过顶点vi的简单回路。数组cycle_path用于保存搜索过程中形成的回路,cycle_path[k]=j(j≥0)表示在回路中顶点vk的下一个顶点是vj。 请在空缺处填入合适的内容,使其成为一个完整的算法。 vertex firstedge

已知邻接表的顶点表结点结构为: adjvex next

边表结点EdgeNode结构为: int cycle_path[MaxNum];

int FindCycle(ALGraph*G,int i)

{//若回路存在,则返回1,否则返回0 int j;

for(j=0;j<G->n;j++)cycle_path[j]=-1; return DFSPath(G,i,i); }

int DFSPath(ALGraph*G,int j,int i) {

EdgeNode *p; int cycled=0;

for(p=G->adjlist[j].firstedge;p&&!cycled;p=p->next) {

cycle_path[j]=p->adjvex;

if( (1 ) )cycled=1;//已找到回路 else

if(cycle_path[p->adjvex]==-1)cycled= (2) ; }

return (3) } (1) (2) (3)

32题答案: (1)p->adjvex==i

(2)DFSpath(G,p->adjvex,i) (3)cycled

33.阅读下列函数algo,并回答问题。

(1)假设整型数组A[1..8]中的元素依次为(3,8,9,1,7,4,2,6)。执行函数调用algo(A,8)时,外层while的循环体执行多少次?函数的返回值是多少? (2)简述函数algo(L,n)的功能。 int algo(int L[],intn) {

int i=0,j,s=1,t=n; while (i!=(n+1)/2) {

int x=L[s]; i=s;j=t;

while(i<j) {

while(i<j && L[j]>=x)j--; L[i]=L[j];

while(i<j && L[i]<=x)i++; L[j]=L[i]; }

L[i]=x;

if(i<(n+1)/2)s=i+1; else t=i-1; }

if(i==0)return 0; else return L[i]; } (1) (2) (3) 33题答案:

(1)外循环执行4次,函数返回值为3。 (2)将A[1]至A[8]中不小于A[1]的元素进行递增排序,如调用algo(A,8)时最终排序结果为2 1 3 4 6 7 8 9

五、算法设计题(本大题共10分)

34.假设以带头结点的单循环链表作非递减有序线性表的存储结构。请设计一个时间复杂度为O(n)的算法,删除表中所有数值相同的多余元素,并释放结点空间。例如: (7,10,10,21,30,42,42,42,51,70) 经算法操作后变为 (7,10,21,30,42,51,70) 34题答案:

Exam4(Linklist,L) {listnode *p,*q; p=L->next; while(p!=L)

{q=p->next;

while(q&&q->data==p->data) {p->next=q->next; free(q);

q=p->next; }

p->next; } }

2003年10月全国数据结构试题 (2006-7-25 2:07:00)

1.计算机识别、存储和加工处理的对象被统称为( b ) A.数据 B.数据元素 C.数据结构 D.数据类型

2.在具有n个结点的有序单链表中插入一个新结点并使链表仍然有序的时间复杂度是( b ) A.O(1) B.O(n) C.O(nlogn) D.O(n2) 3.队和栈的主要区别是( d )

A.逻辑结构不同 B.存储结构不同

C.所包含的运算个数不同 D.限定插入和删除的位置不同 4.链栈与顺序栈相比,比较明显的优点是( d )

A.插入操作更加方便 B.删除操作更加方便 C.不会出现下溢的情况 D.不会出现上溢的情况 5.采用两类不同存储结构的字符串可分别简称为( b ) A.主串和子串 B.顺序串和链串 C.目标串和模式串 D.变量串和常量串

6.在目标串T[0..n-1]=″xwxxyxy″中,对模式串P[0..m-1]=″xy″进行子串定位操作的结果是( c )

A.0 B.2 C.3 D.5

7.已知广义表的表头为a,表尾为(b,c),则此广义表为( b ) A.(a,(b,c)) B.(a,b,c) C.((a),b,c) D.((a,b,c))

8.二维数组A按行优先顺序存储,其中每个元素占1个存储单元。若A[1][1]的存储地址为420,A[3][3]的存储地址为446,则A[5][5]的存储地址为( c ) A.470 B.471 C.472 D.473

9.二叉树中第5层上的结点个数最多为( d ) A.8 B.15 C.16 D.32 10.下列编码中属前缀码的是( a )

A.{1,01,000,001} B.{1,01,011,010} C.{0,10,110,11} D.{0,1,00,11}

11.如果某图的邻接矩阵是对角线元素均为零的上三角矩阵,则此图是( d ) A.有向完全图 B.连通图

C.强连通图 D.有向无环图

12.对n个关键字的序列进行快速排序,平均情况下的空间复杂度为( d ) A.O(1) B.O(logn) C.O(n) D.O(n logn)

13.对表长为n的顺序表进行顺序查找,在查找概率相等的情况下,查找成功的平均查找长度为( n/2 )

A. B. C. D.n

14.对于哈希函数H(key)=key,被称为同义词的关键字是( d ) A.35和41 B.23和39 C.15和44 D.25和51 15.稠密索引是在索引表中( )

A.为每个记录建立一个索引项 B.为每个页块建立一个索引项 C.为每组记录建立一个索引项 D.为每个字段建立一个索引项 二、填空题(每小题2分,若有两个空格,每个空格1分,共20分)

16.当问题的规模n趋向无穷大时,算法执行时间T(n)的数量级被称为算法的__(_时间复杂度_)____。

17.在链表的结点中,数据元素所占的存储量和整个结点所占的存储量之比称作_(存储密度)_______。 date next

18.已知链栈的结点结构为 栈顶指针为top,则实现将指针p所指结点插入栈顶的语句依次为________和________。

19.空串的长度是___0_____;空格串的长度是____(空格的数目_)___。

20.假设一个6阶的下三角矩阵B按列优先顺序压缩存储在一维数组A中,其中A[0]存储矩阵的第一个元素b11,则A[14]存储的元素是______b63__。

21.在一棵度为3的树中,度为2的结点个数是1,度为0的结点个数是6,则度为3的结点个数是____2____。

22.如图所示的有向无环图可以排出________种不同的拓扑序列。

23.利用筛选法将关键字序列(37,66,48,29,31,75)建成的大根堆为(___75,66,48,29,31,37_____)。

24.对长度为20的有序表进行二分查找的判定树的高度为___5_____。

25.在多重表文件中,次关键字索引的组织方式是将________的记录链接成一个链表。 26.对于单链表、单循环链表和双向链表,如果仅仅知道一个指向链表中某结点的指针p,能否将p所指结点的数据元素与其确实存在的直接前驱交换?请对每一种链表作出判断,若可以,写出程序段;否则说明理由。

date next

单链表和单循环链表的结点结构为 prior date next 双向链表的结点结构为

(1)单链表: (不可以,无法找到前驱接点)

(2)单循环链表(可以:q=p->next;while(q->next!=p)q=q->next;q->data<->p->data;