文档库 最新最全的文档下载
当前位置:文档库 › 北京理工大学数据结构编程练习答案

北京理工大学数据结构编程练习答案

北京理工大学数据结构编程练习答案
北京理工大学数据结构编程练习答案

1.一元多项式相加(10分)

成绩: 10 / 折扣: 0.8

题目说明:

编写一元多项式加法运算程序。要求用线性链表存储一元多项式(参照

课本)。该程序有以下几个功能:

1. 多项式求和

输入:输入三个多项式,建立三个多项式链表Pa、Pb、Pc

(提示:调用CreatePolyn(polynomial &P,int m)。

输出:显示三个输入多项式Pa、Pb、Pc、和多项式Pa+Pb、多项式Pa+Pb+Pc (提示:调用AddPolyn(polynomial &Pa, polynomial Pb), 调用

PrintPolyn(polynomial P))。

0. 退出

输入:

根据所选功能的不同,输入格式要求如下所示(第一个数据是功能选择编号,参见测试

用例):

? 1

多项式A包含的项数,以指数递增的顺序输入多项式A各项的系数(整数)、指数(整数)

多项式B包含的项数,以指数递增的顺序输入多项式B各项的系数(整数)、指数(整数)

多项式C包含的项数,以指数递增的顺序输入多项式C各项的系数(整数)、指数(整数)

?0 ---操作终止,退出。

输出:

对应一组输入,输出一次操作的结果(参见测试用例)。

? 1 多项式输出格式:以指数递增的顺序输出: <系数,指数>,<系数,指数>,<系数,指数>,参见测试用例。零多项式的输出格式为<0,0>

?0 无输出

1.

#include

#include

using std::cin;

using std::cout;

using std::endl;

struct date

{

int a;

int b;

struct date* pnext;

};

typedef struct date DATE;

typedef struct date* PDATE;

void output(PDATE p)

{

int f=0;

p=p->pnext;

while(p!=NULL)

{

if(p->a!=0)

{

f=1;

cout<<"<"<a<<","<b<<">";

if(p->pnext==NULL)

cout<

else

cout<<",";

}

p=p->pnext;

}

if(f==0)

cout<<"<0,0>"<

}

void add(PDATE a,PDATE b,PDATE c)

{

PDATE p1,p2,p3;

p1=a;

p2=b;

p3=c;

if(p1!=NULL) p1=p1->pnext; //skip head if(p2!=NULL) p2=p2->pnext;

while((p1!=NULL)&&(p2!=NULL))

{

if(p1->b>p2->b)

{

p3->pnext=(PDATE)malloc(sizeof(DATE));

p3=p3->pnext;

p3->a=p2->a;

p3->b=p2->b;

p3->pnext=NULL;

p2=p2->pnext;

}

else if(p1->bb)

{

p3->pnext=(PDATE)malloc(sizeof(DATE));

p3=p3->pnext;

p3->a=p1->a;

p3->b=p1->b;

p3->pnext=NULL;

p1=p1->pnext;

}

else

{

p3->pnext=(PDATE)malloc(sizeof(DATE));

p3=p3->pnext;

p3->a=p1->a+p2->a;

p3->b=p1->b;

p3->pnext=NULL;

p1=p1->pnext;

p2=p2->pnext;

}

}//end while

if(p1==NULL)

p3->pnext=p2;

if(p2==NULL)

p3->pnext=p1;

}

int main()

{

int flag;

int n;

PDATE P[6]={NULL};

PDATE p=NULL;

for(int i=0;i<6;i++)

{

P[i]=(PDATE)malloc(sizeof(DATE));

P[i]->a=0;

P[i]->b=0;

P[i]->pnext=NULL;

}

cin>>flag;

if(flag==1)

{

for(int i=1;i<4;i++)

{

p=P[i];

cin>>n;

while(n--!=0)

{

p->pnext=(PDATE)malloc(sizeof(DATE));

p=p->pnext;

cin>>p->a>>p->b;

p->pnext=NULL;

}

output(P[i]);

}

}

add(P[1],P[2],P[4]);

output(P[4]);

add(P[4],P[3],P[5]);

output(P[5]);

}

0 约瑟夫问题(10分)

成绩: 10 / 折扣: 0.8

0 约瑟夫问题

成绩10分折扣0.8

(本题要求用循环链表实现)

0 ,1, 2, 3题,只能选做三题.

约瑟夫问题是一个经典的问题。已知n个人(不妨分别以编号1,2,3,…,n 代表)围坐在一张圆桌周围,从编号为 k 的人开始,从1开始顺时针报数1, 2, 3, ...,顺时针数到m 的那个人,出列并输出。然后从出列的下一个人开始,从1开始继续顺时针报数,数到m的那个人,出列并输出,…依此重复下去,直到圆桌周围的人全部出列。

输入:n,k,m

输出:按照出列的顺序依次输出出列人的编号,编号中间相隔一个空格,每10个编号为一行。非法输入的对应输出如下

a)

输入::n、k、m任一个小于1

输出:n,m,k must bigger than 0.

b)

输入:k>n

输出:k should not bigger than n.

输入

9,3,2

输出

4 6 8 1 3 7 2 9 5

#include

#include

#include

struct date

{

int a;

struct date* next;

};

typedef struct date DATE;

typedef struct date* PDATE;

PDATE setnew(PDATE p,int a)

{

PDATE pt;

pt=(PDATE) malloc (sizeof(DATE));

pt->a=a;

pt->next=p->next;

p->next=pt;

return pt;

}

int count;

PDATE del(PDATE p0)

{

if(!count)

{

printf("\n");

count=10;

}

printf("%d ",p0->a);

PDATE p=p0->next;

p0->a=p->a;

p0->next=p->next;

free(p);

count--;

return p0;

}

int main()

{

count=10;

int n=0,k=0,m=0;

scanf("%d,%d,%d",&n,&m,&k);

if(!(n>0&&m>0&&k>0))

printf("n,m,k must bigger than 0.\n");

else if(m>n)

printf("k should not bigger than n.\n");

else

{

PDATE p=NULL;

PDATE head=(DATE *)malloc(sizeof(DATE));

head->next=head;

head->a=1;

p=head;

for(int i=2;i<=n;i++)

p=setnew(p,i);

while(p->a!=m)

p=p->next;

while(n)

{

// int temp=k;

int temp=k%n+n;

while(--temp)

p=p->next;

del(p);

n--;

}

printf("\n");

}

}

2. 综教楼后的那个坑

成绩: 10 / 折扣: 0.8

描述

在 LIT 综教楼后有一个深坑,关于这个坑的来历,有很多种不同的说法。其中一种说法是,在很多年以前,这个坑就已经在那里了。这种说法也被大多数人认可,这是因为该坑有一种特别的结构,想要人工建造是有相当困难的。

从横截面图来看,坑底成阶梯状,由从左至右的 1..N 个的平面构成(其中1 ≤ N ≤ 100,000),如图:

** :

** :

** 8

**** 7

**** 6

**** 5

********** 4 <- 高度

********** 3

************** 2

************** 1

平面| 1 |2| 3 |

每个平面 i 可以用两个数字来描述,即它的宽度 Wi 和高度 Hi,其中 1 ≤Wi ≤1,000、1 ≤ Hi ≤ 1,000,000,而这个坑最特别的地方在于坑底每个平面的高度都是不同的。每到夏天,雨水会把坑填满,而在其它的季节,则需要通过人工灌水的方式把坑填满。灌水点设在坑底位置最低的那个平面,每分钟灌水量为一个单位(即高度和宽度均为 1)。随着水位的增长,水自然会向其它平面扩散,当水将某平面覆盖且水高达到一个单位时,就认为该平面被水覆盖了。

请你计算每个平面被水覆盖的时间。

灌水水满后自动扩散

| |

*

| * * | * *

*

*

V * * V * *

*

* * * .... *

*~~~~~~~~~~~~*

* ** * *~~~~** : *

*~~~~**~~~~~~*

* ** * *~~~~** : *

*~~~~**~~~~~~*

* ** * *~~~~**~~~~~~* * ~~~~**~~~~~~*

* ********* *~~~~********* *~~~~* ********

*~~~~********* *~~~~********* *~~~~**** *****

************** ************** ********* *****

************** ************** ********* *****

4 分钟后26 分钟后50 分钟后

平面 1 被水覆盖平面 3 被水覆盖平面 2 被水覆盖输入

输入的第一行是一个整数 N,表示平面的数量。从第二行开始的 N 行上分别有两个整数,分别表示平面的宽度和高度。

输出

输出每个平面被水覆盖的时间。

#include

#include

struct date

{

long long * timedate;

long h;

int w;

struct date* pl;

struct date* pr;

};

typedef struct date DATE;

typedef struct date* PDATE;

PDATE setnew(PDATE p0,int w,long h,long long * num)//p0为左邻{

PDATE p=(PDATE) malloc(sizeof(DATE));

p->timedate=num;

p->pl=p0;

p->pr=NULL;

p0->pr=p;

p->h=h;

p->w=w;

return p;

}

void output(long long* p,long n)

{

while(n--)

printf("%lld\n",*(++p));

}

int main()

{

long long myclock;

long n;

int w;

long h;

PDATE p=NULL,pt=NULL;

//set leftp

PDATE left=(PDATE) malloc(sizeof(DATE));

left->timedate=NULL;

left->pl=NULL;

left->pr=NULL;

left->h=1000000;

left->w=0;

p=left;

pt=left;

scanf("%d",&n);

long long* timedate=new long long[n+1];

for(long i=0;i

{

//cin>>w>>h;

scanf("%d%d",&w,&h);

p=setnew(p,w,h,timedate+i+1);

if(pt->h>h)

pt=p;

}

PDATE right=setnew(p,0,1000000,NULL); p=pt;

myclock=0;

while(p->pl->h!=p->pr->h)

{

*(p->timedate)=myclock+p->w;

//计算时间并删除合并

if(p->pl->h>p->pr->h)

{

myclock+=(p->pr->h-p->h)*p->w;

p->pr->w+=p->w;

p->pl->pr=p->pr;

p->pr->pl=p->pl;

pt=p;

p=p->pr;

delete pt;

}

else if(p->pl->hpr->h)

{

myclock+=(p->pl->h-p->h)*p->w;

p->pl->w+=p->w;

p->pl->pr=p->pr;

p->pr->pl=p->pl;

pt=p;

p=p->pl;

delete pt;

}

//移至下一进水点

if(p->pl->h>p->h&&p->pr->h>p->h)

continue;

else if(p->pl->hpr->h)//左移

{

while(p->h>p->pl->h)

p=p->pl;

}

else //右移

{

while(p->h>p->pr->h)

p=p->pr;

}

}

myclock+=p->w;

*(p->timedate)=myclock;

output(timedate,n);

}

3. 单词压缩存储(10分)

成绩: 10 / 折扣: 0.8

如果采用单链表保存单词,可采用如下办法压缩存储空间。如果两个单词的后缀相同,则可以用同一个存储空间保存相同的后缀。例如,原来分别采用单链表保存的单词Str1“abcdef”和单词Str2“dbdef”,经过压缩后的存储形式如下。

请设计一个高效的算法完成两个单链表的压缩存储,并估计你所设计算法的时间复杂度。

要求:阅读预设代码,编写函数SNODE * ziplist( SNODE * head1, SNODE * head2 ) ziplist的功能是:在两个串链表中,查找公共后缀,若有公共后缀,则压缩并返回指向公共后缀的指针;否则返回NULL

预设代码

前置代码

view plaincopy to clipboardprint?

1./*PRESET CODE BEGIN-NEVER TOUCH CODE BELOW*/

2.

3.#include

4.#include

5.

6.typedef struct sdata

7.{char data;

8.struct sdata*next;

9.}SNODE;

10.

11.void setlink(SNODE*,char*),outlink(SNODE*);

12.int listlen(SNODE*);

13.SNODE*ziplist(SNODE*,SNODE*);

14.SNODE*findlist(SNODE*,SNODE*);

15.

16.int main()

17.{

18.SNODE*head1,*head2,*head;

19.char str1[100],str2[100];

20.

21.gets(str1);

22.gets(str2);

23.

24.head1=(SNODE*)malloc(sizeof(SNODE));

25.head2=(SNODE*)malloc(sizeof(SNODE));

26.head=(SNODE*)malloc(sizeof(SNODE));

27.head->next=head1->next=head2->next=NULL;

28.

29.setlink(head1,str1);

30.setlink(head2,str2);

31.

32.head->next=ziplist(head1,head2);

33.

34.head->next=findlist(head1,head2);

35.outlink(head);

36.return0;

37.}

38.

39.void setlink(SNODE*head,char*str)

40.{

41.SNODE*p;

42.

43.while(*str!='\0')

44.{p=(SNODE*)malloc(sizeof(SNODE));

45.p->data=*str;

46.p->next=NULL;

47.str++;

48.head->next=p;

49.head=p;

50.}

51.return;

52.}

53.

54.void outlink(SNODE*head)

55.{

56.while(head->next!=NULL)

57.{

58.printf("%c",head->next->data);

59.head=head->next;

60.}

61.printf("\n");

62.return;

63.}

64.

65.int listlen(SNODE*head)

66.{

67.int len=0;

68.while(head->next!=NULL)

69.{

70.len++;

71.head=head->next;

72.}

73.return len;

74.}

75.

76.SNODE*findlist(SNODE*head1,SNODE*head2)

77.{

78.int m,n;

79.SNODE*p1=head1,*p2=head2;

80.

81.m=listlen(head1);

82.n=listlen(head2);

83.

84.while(m>n)

85.{p1=p1->next;

86.m--;

87.}

88.while(m

89.{p2=p2->next;

90.n--;

91.}

92.

93.while(p1->next!=NULL&&p1->next!=p2->next)

94.{

95.p1=p1->next;

96.p2=p2->next;

97.}

98.return p1->next;

99.}

100.

101./*Here is waiting for you!*/

102./*

103.SNODE*ziplist(SNODE*head1,SNODE*head2) 104.{

105.}

106.*/

107.

108./*PRESET CODE END-NEVER TOUCH CODE ABOVE*/ SNODE * ziplist( SNODE * head1, SNODE * head2 )

{

int m, n;

SNODE *p1=head1, *p2=head2,*p11=NULL,*p22=NULL;

m = listlen( head1 );

n = listlen( head2 );

while ( m > n )

{ p1 = p1->next;

m--;

}

while ( m < n )

{ p2 = p2->next;

n--;

}

p11=p1;

p22=p2;

while(p1->next->next!=NULL)

{

if(p1->next->data!=p2->next->data)

{

p11=p1->next;

p22=p2->next;

}

p1=p1->next;

p2=p2->next;

}

if(p1->next->data!=p2->next->data)

return NULL;

else

{

p22->next=p11->next;

return p11->next;

}

}

4. 括号匹配(10分)

成绩: 10 / 折扣: 0.8

4 括号匹配(10分)

成绩: 10 / 折扣: 0.8

假设一个算术表达式中包含圆括号、方括号两种类型的括号,试编写一个判断表达式中括号是否匹配的程序,匹配返回Match succeed!,否则返回Match false!。

[1+2*(3+4*(5+6))]括号匹配

(1+2)*(1+2*[(1+2)+3)括号不匹配

输入

包含圆括号、方括号两种类型括号的算术表达式

输出

匹配输出 Match succeed!

不匹配输出Match false!

输入 [1+2* (3+4*(5+6))]

输出Match succeed!

#include

int main()

{

int flag=0;

char a[1000]={0};

char* p;

p=&a[0];

char temp;

temp=getchar();

*p=temp;

while(temp!='\n')

{

switch (temp)

{

case '(':

{

p++;

*p=temp;

break;

}

case ')':

{

if(*p!='(')

{

printf("Match false!\n");

return 0;

}

*p=0;

p--;

break;

}

case '[':

{

p++;

*p=temp;

break;

}

case']':

{

if(*p!='[')

{

printf("Match false!\n");

return 0;

}

*p=0;

p--;

break;

}

}//endswiych

temp=getchar();

}//end whilw

printf("Match succeed!\n");

return 0;

}

5. 迷宫问题(15分)

成绩: 15 / 折扣: 0.8

5迷宫问题(15分)

成绩: 15 / 折扣: 0.8

迷宫有一个入口,一个出口。一个人从入口走进迷宫,目标是找到出口。阴影部分和迷宫的外框为墙,每一步走一格,每格有四个可走的方向,探索顺序为:南、东、北、西。

输入:输入迷宫数组

输出:若有解,输出从入口到出口的一条路径,否则输出 there is no solution! 例(上图所示的迷宫数组)

输入

4 4

0 0 1 0

0 1 0 1

0 0 0 0

0 1 0 0

输出

<1,1> <2,1> <3,1> <3,2> <3,3> <4,3> <4,4>

#include

using std::cin;

using std::cout;

using std::endl;

数据结构习题及答案——严蔚敏_课后习题答案 精品

第一章绪论 选择题 1.组成数据的基本单位是() (A)数据项(B)数据类型(C)数据元素(D)数据变量 2.数据结构是研究数据的()以及它们之间的相互关系。 (A)理想结构,物理结构(B)理想结构,抽象结构 (C)物理结构,逻辑结构(D)抽象结构,逻辑结构 3.在数据结构中,从逻辑上可以把数据结构分成() (A)动态结构和静态结构(B)紧凑结构和非紧凑结构 (C)线性结构和非线性结构(D)内部结构和外部结构 4.数据结构是一门研究非数值计算的程序设计问题中计算机的(①)以及它们之间的(②)和运算等的学科。 ①(A)数据元素(B)计算方法(C)逻辑存储(D)数据映像 ②(A)结构(B)关系(C)运算(D)算法 5.算法分析的目的是()。 (A)找出数据结构的合理性(B)研究算法中的输入和输出的关系 (C)分析算法的效率以求改进(D)分析算法的易懂性和文档性 6.计算机算法指的是(①),它必须具备输入、输出和(②)等5个特性。 ①(A)计算方法(B)排序方法(C)解决问题的有限运算序列(D)调度方法 ②(A)可执行性、可移植性和可扩充性(B)可行性、确定性和有穷性 (C)确定性、有穷性和稳定性(D)易读性、稳定性和安全性 二、判断题 1.数据的机内表示称为数据的存储结构。() 2.算法就是程序。() 3.数据元素是数据的最小单位。() 4.算法的五个特性为:有穷性、输入、输出、完成性和确定性。() 5.算法的时间复杂度取决于问题的规模和待处理数据的初态。() 三、填空题 1.数据逻辑结构包括________、________、_________ 和_________四种类型,其中树形结构和图形结构合称为_____。 2.在线性结构中,第一个结点____前驱结点,其余每个结点有且只有______个前驱结点;最后一个结点______后续结点,其余每个结点有且只有_______个后续结点。 3.在树形结构中,树根结点没有_______结点,其余每个结点有且只有_______个前驱结点;叶子结点没有________结点,其余每个结点的后续结点可以_________。 4.在图形结构中,每个结点的前驱结点数和后续结点数可以_________。 5.线性结构中元素之间存在________关系,树形结构中元素之间存在______关系,图形结构中元素之间存在_______关系。 6.算法的五个重要特性是_______、_______、______、_______、_______。 7.数据结构的三要素是指______、_______和________。 8.链式存储结构与顺序存储结构相比较,主要优点是________________________________。 9.设有一批数据元素,为了最快的存储某元素,数据结构宜用_________结构,为了方便插入一个元素,数据结构宜用____________结构。 四、算法分析题 1.求下列算法段的语句频度及时间复杂度参考答案: 选择题1. C 2.C 3. C 4. A、B 5. C 6.C、B

数据结构-第六章-图-练习题及答案详细解析(精华版)

图 1. 填空题 ⑴ 设无向图G中顶点数为n,则图G至少有()条边,至多有()条边;若G为有向图,则至少有()条边,至多有()条边。 【解答】0,n(n-1)/2,0,n(n-1) 【分析】图的顶点集合是有穷非空的,而边集可以是空集;边数达到最多的图称为完全图,在完全图中,任意两个顶点之间都存在边。 ⑵ 任何连通图的连通分量只有一个,即是()。 【解答】其自身 ⑶ 图的存储结构主要有两种,分别是()和()。 【解答】邻接矩阵,邻接表 【分析】这是最常用的两种存储结构,此外,还有十字链表、邻接多重表、边集数组等。 ⑷ 已知无向图G的顶点数为n,边数为e,其邻接表表示的空间复杂度为()。 【解答】O(n+e) 【分析】在无向图的邻接表中,顶点表有n个结点,边表有2e个结点,共有n+2e个结点,其空间复杂度为O(n+2e)=O(n+e)。 ⑸ 已知一个有向图的邻接矩阵表示,计算第j个顶点的入度的方法是()。 【解答】求第j列的所有元素之和 ⑹ 有向图G用邻接矩阵A[n][n]存储,其第i行的所有元素之和等于顶点i的()。 【解答】出度

⑺ 图的深度优先遍历类似于树的()遍历,它所用到的数据结构是();图的广度优先遍历类似于树的()遍历,它所用到的数据结构是()。 【解答】前序,栈,层序,队列 ⑻ 对于含有n个顶点e条边的连通图,利用Prim算法求最小生成树的时间复杂度为(),利用Kruskal 算法求最小生成树的时间复杂度为()。 【解答】O(n2),O(elog2e) 【分析】Prim算法采用邻接矩阵做存储结构,适合于求稠密图的最小生成树;Kruskal算法采用边集数组做存储结构,适合于求稀疏图的最小生成树。 ⑼ 如果一个有向图不存在(),则该图的全部顶点可以排列成一个拓扑序列。 【解答】回路 ⑽ 在一个有向图中,若存在弧、、,则在其拓扑序列中,顶点vi, vj, vk的相对次序为()。 【解答】vi, vj, vk 【分析】对由顶点vi, vj, vk组成的图进行拓扑排序。 2. 选择题 ⑴ 在一个无向图中,所有顶点的度数之和等于所有边数的()倍。 A 1/2 B 1 C 2 D 4 【解答】C 【分析】设无向图中含有n个顶点e条边,则。

数据结构试题库答案

数据结构试题及答案 一、单项选择题 (1)一个算法应该就是()。 A)程序???B)问题求解步骤得描述 C)要满足五个基本属性??D) A与C (2)算法指得就是()。 A)计算机程序???B)解决问题得计算方法 C)排序算法???D)解决问题得有限运算序列。 (3)与数据元素本身得形式、内容、相对位置、个数无关得就是数据得()。 A) 存储结构B) 逻辑结构C)算法D)操作 (4)从逻辑上可以把数据结构分为( )两大类。 A)动态结构、静态结构??B) 顺序结构、链式结构 C)线性结构、非线性结构???D)初等结构、构造型结构 (5)下列叙述中正确得就是()。 A)一个逻辑数据结构只能有一种存储结构 B)数据得逻辑结构属于线性结构,存储结构属于非线性结构 C)一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理得效率 D)一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理得效率 (6)数据得基本单位就是() ?A) 数据项??B) 数据类型C)数据元素??D)数据变量 (7)下列程序得时间复杂度为() i=0;s=0; while(s

数据结构习题及答案精编版

第一章 1.在数据结构中,从逻辑上可以把数据结构分为(C ) A.动态结构和静态结构 B. 紧凑结构和非紧凑结构 C.线性结构和非线性结构 D. 内部结构和外部结构 ● 2.在数据结构中,与所使用的计算机无关的是( A ) A. 逻辑结构 B. 存储结构 C. 逻辑和存储结构 D. 物理结构 3.下面程序的时间复杂度为____O(mn)_______。 for (int i=1; i<=m; i++) for (int j=1; j<=n; j++ ) S+=i 第二章线性表 ●链表不具备的特点是(A) A 可以随机访问任一结点(顺序) B 插入删除不需要移动元素 C 不必事先估计空间 D 所需空间与其长度成正比 2. 不带头结点的单链表head为空的判定条件为(A ),带头结点的单链表head为空的判定条件为(B ) A head==null B head->next==null C head->next==head D head!=null ●3.在线性表的下列存储结构中,读取元素花费时间最少的是(D) A 单链表 B 双链表 C 循环链表 D 顺序表 ● 4.对于只在表的首、尾两端进行手稿操作的线性表,宜采用的存储结构为(C) A 顺序表 B 用头指针表示的单循环链表 C 用尾指针表示的单循环链表 D 单链表 ● 5.在一个具有n 个结点的有序单链表中插入一个新的结点,并保持链表元素仍然有序, 则操作的时间复杂度为( D ) A O(1) B O(log2n) C O(n2) D O(n) ● 6.在一个长度为n (n>1)的单链表上,设有头和尾两个指针,执行(B)操作与链表的长 度有关 A 删除单链表中第一个元素 B 删除单链表中最后一个元素 C 在第一个元素之前插入一个新元素 D 在最后一个元素之后插入一个新元素 ●7.与单链表相比,双向链表的优点之一是(D) A 插入删除操作更简单 B 可以进行随机访问 C 可以省略表头指针或表尾指针 D 顺序访问相邻结点更容易 ●8.若list是某带头结点的循环链表的头结点指针,则该链表最后那个链结点的指针域 (头结点的地址)中存放的是( B ) A list的地址 B list的内容 C list指的链结点的值 D 链表第一个链结点的地址 ●9.若list1和list2分别为一个单链表与一个双向链表的第一个结点的指针,则( B ) A list2比list1占用更多的存储单元 B list1与list2占用相同的存储单元 C list1和list2应该是相同类型的指针变量 D 双向链表比单链表占用更多的存储单元 10.链表中的每个链结点占用的存储空间不必连续,这句话正确吗? (不正确) 11. 某线性表采用顺序存储结构,元素长度为4,首地址为100,则下标为12的(第13个)元素的存储地址为148。V 100+4*12=148 11.在顺序表的(最后一个结点之后)插入一个新的数据元素不必移动任何元素。 12.若对线性表进行的操作主要不是插入删除,则该线性表宜采用(顺序)存储结构,若频繁地对线性表进行插入和删除操作,则该线性表宜采用( 链 )存储结构。

数据结构复习题附答案

一.是非题 1. 数据结构(应该是抽象数据类型)可用三元式表示(D,S,P)。其中:D是数据对象,S是D上的关系,P是对D的基本操作集。(f) 2 简单地说,数据结构是带有结构的数据元素的集合。(t) 3 判断带头结点的非空循环单链表(头指针为L)中指针p所指结点是最后一个元素结点 的条件是:p->next==L。(t) 4 线性表的链式存储结构具有可直接存取表中任一元素的优点。(f) 5 线性表的顺序存储结构优于链式存储结构。(f) 6. 在单链表P指针所指结点之后插入S结点的操作是: P->next= S ; S-> next = P->next;。(f) (顺序弄反了S-> next = P->next; P->next= S ;) 7 对于插入、删除而言,线性表的链式存储优于顺序存储。(t) 8. 顺序存储方式的优点是存储密度大,且插入、删除运算效率高。(f) 9. 栈和队列是操作上受限制的线性表。(t) 10. 队列是与线性表完全不同的一种数据结构。(f) (栈和队列是操作上受限制的线性表) 11. 队列是一种操作受限的线性表,凡对数据元素的操作仅限一端进行。(f) (两端) 12. 栈和队列也是线性表。如果需要,可对它们中的任一元素进行操作。(f) ( “如果需要,可对它们中的任一元素进行操作.” 这里的意思是在O(1)的时间来读和改某个元素。比如数组的直接索引。 栈:如果需要,每一次只能对栈顶的元素进行操作 队列:如果需要,每一次只能对两端,或者只能对队列头的元素进行操作。) 13. 栈是限定仅在表头进行插入和表尾进行删除运算的线性表。(f) 14. 二叉树中每个结点有两个子结点,而对一般的树,则无此限制,所以,二叉树是树的特殊情形。(f) (二叉树和树相互独立) 15 二叉树是一棵结点的度最大为二的树。(f) (二叉树和树相互独立) 16 赫夫曼树中结点个数一定是奇数。(t) 17 在二叉树的中序遍历序列中,任意一个结点均处在其左孩子结点的后面。(t) (LDR) 18 假设B是一棵树,B′是对应的二叉树。则B的后根遍历相当于B′的后序遍历。(f) (后根遍历相当于中序遍历) 19. 通常,二叉树的第i层上有2i-1个结点。(f) (应该为1~2i-1个) 20. 中序线索二叉树的优点是便于在中序下查找直接前驱结点和直接后继结点。(t) 21 二叉树的先序遍历序列中,任意一个结点均处在其孩子结点的前面。(t) 22 由树结点的先根序列和后根序列可以唯一地确定一棵树。(t) 23 邻接多重表可以用以表示无向图,也可用以表示有向图。(f) (只能表示无向图,有向图用十字链表) 24 可从任意有向图中得到关于所有顶点的拓扑次序。(f) (带环图没有) 25 有向图的十字链表是将邻接表和逆邻接表合二为一的链表表示形式。(t)

《数据结构》题库及答案

《数据结构》题库及答案 一、选择题 1.线性表的顺序存储结构是一种 的存储结构,线性表的链式存储结构是一种 的存储结构。 a. 随机存储; b.顺序存储; c. 索引存取; d. HASH 存取 2.一个栈的入栈序列是a,b,c,d,e ,则栈的不可能的输出序列是 。 a. edcba; b. decba; c. dceab; d.abcde 3.一个队列的入队序列是1,2,3,4,则队列的输出序列是 。 a. 4,3,2,1; b. 1,2,3,4; c. 1,4,3,2; d.3,2,4,1 4.在一个单链表中,已知p 结点是q 结点的直接前驱结点,若在p 和q 之间插入结点s ,则执行的操作是 。 a. s->nxet=p->next; p->next=s; b. p->next=s->next; s->next=p; c. q->next=s; s->next=p; d. p->next=s; s->next=q; 5.设有两个串p,q ,求q 在p 中首次出现的位置的运算称作 。 a.联接 b.模式匹配 c.求子串 d.求串长 6.二维数组M 的成员是6个字符(每个字符占一个存储单元)组成的串,行下标i 的范围从0到8,列下标j 的范围从1到10,则存放M 至少需要 个字节。 a. 90 b.180 c.240 d.540 7.在线索二叉树中,结点p 没有左子树的充要条件是 。 a. p->lch==NULL b. p->ltag==1 c. p->ltag==1且p->lch=NULL d. 以上都不对 8.在栈操作中,输入序列为(A ,B ,C ,D ),不可能得到的输出序列为:______ A 、(A , B , C , D ) B 、(D ,C ,B ,A ) C 、(A ,C ,D ,B ) D 、(C ,A ,B ,D ) 9.已知某二叉树的后序序列是dabec ,中序序列是debac ,则它的先序序列是 。 A 、acbed B 、decab C 、deabc D 、cedba 10.设矩阵A 是一个对称矩阵,为了节省存储空间,将其下三角部分(见下图)按行序存放在一维数组B[1..n(n-1)/2]中,对任一上三角部分元素)(j i a ij ,在一维数组B 的存放位置是 。

上数据结构期末图习题答案

2014 上数据结构期末复习大纲 一. 期中前以期中考试试卷复习,算法要真正理解 二、二叉树、图、排序算法将是考试重点(占60%左右) 三、要掌握的算法 1. 二叉树的链表表示 2.建立二叉树的链表存储结构 3. 先序、中序、后序遍历二叉树(递归算法) 4. 遍历算法的应用(如求二叉树的结点数) 5.建立huffman树和huffman编码 6. 图的邻接矩阵表示和邻接链表表示 7.图的深度优先遍历和广度优先遍历算法 8. 有向图求最短路径(迪杰斯特拉算法) 9. 直接插入排序算法 10. shell 排序(排序过程) 12. 堆排序(排序过程)

练习题 1. 有8个结点的无向图最多有 B 条边。 A .14 B. 28 C. 56 D. 112 2. 有8个结点的无向连通图最少有 C 条边。 A .5 B. 6 C. 7 D. 8 3. 有8个结点的有向完全图最多有 C 条边。 A .14 B. 28 C. 56 D. 112 4. 用邻接表表示图进行广度优先遍历时,通常是采用 B 来实现算法的。 A .栈 B. 队列 C. 树 D. 图 5. 用邻接表表示图进行深度优先遍历时,通常是采用 A 来实现算法的。 A .栈 B. 队列 C. 树 D. 图 6. 已知图的邻接矩阵,根据算法思想,则从顶点0出发按深度优先遍历的结点序列是*( C ) A .0 2 4 3 1 5 6 B. 0 1 3 6 5 4 2 C. 0 4 2 3 1 6 5 ??? ? ?? ? ? ? ? ? ???????????0100011101100001011010110011001000110010011011110

数据结构课后习题及答案

填空题(10 * 1’ = 10’) 一、概念题 .当对一个线性表经常进行的是插入和删除操作时,采用链式存储结构为宜。 .当对一个线性表经常进行的是存取操作,而很少进行插入和删除操作时,最好采用顺序存储结构。 .带头结点的单链表L中只有一个元素结点的条件是L->Next->Next==Null。 .循环队列的引入,目的是为了克服假溢出。 .长度为0的字符串称为空串。 .组成串的数据元素只能是字符。 .设T和P是两个给定的串,在T中寻找等于P的子串的过程称为模式匹配,又称P为模式。 .为了实现图的广度优先搜索,除一个标志数组标志已访问的图的结点外,还需要队列存放被访问的结点实现遍历。 .广义表的深度是广义表中括号的重数 .有向图G可拓扑排序的判别条件是有无回路。 .若要求一个稠密图的最小生成树,最好用Prim算法求解。 . 直接定址法法构造的哈希函数肯定不会发生冲突。 .排序算法所花费的时间,通常用在数据的比较和交换两大操作。 .通常从正确性﹑可读性﹑健壮性﹑时空效率等几个方面评价算法的(包括程序)的质量。 .对于给定的n元素,可以构造出的逻辑结构有集合关系﹑线性关系树形关系﹑图状关系四种。 .存储结构主要有顺序存储﹑链式存储﹑索引存储﹑散列存储四种。 .抽象数据类型的定义仅取决于它的一组逻辑特性,而与存储结构无关,即不论其内部结构如何变化,只要它的数学特性不变,都不影响其外部使用。 .一个算法具有五大特性:有穷性﹑确定性﹑可行性,有零个或多个输入﹑有一个或多个输入。 .在双向链表结构中,若要求在p指针所指的结点之前插入指针为s所指的结点,则需执行下列语句:s->prior= p->prior; s->next= p; p->prior- next= s; p->prior= s;。 .在单链表中设置头结点的作用是不管单链表是否为空表,头结点的指针均不空,并使得对单链表的操作(如插入和删除)在各种情况下统一。 .队列是限制在表的一端进行插入和在另一端进行删除的线性表,其运算遵循先进先出原则。 .栈是限定尽在表位进行插入或删除操作的线性表。 .在链式队列中,判定只有一个结点的条件是(Q->rear==Q->front)&&(Q->rear!=NULL)。 .已知链队列的头尾指针分别是f和r,则将x入队的操作序列是node *p=(node *)malloc(node); p->next=x; p->next=NULL; if(r) {r->next=p; r=p;} else {r=p; f=p;}。 .循环队列的满与空的条件是(rear+1)%MAXSIZE==fornt和(front=-1&&rear+1==MAXSIZE)。 .串是一种特殊的线性表,其特殊性表现在数据元素都是由字符组成。 .字符串存储密度是串值所占存储位和实际分配位的比值,在字符串的链式存储结构中其结点大小是可变的。 .所谓稀疏矩阵指的是矩阵中非零元素远远小于元素总数,则称该矩阵为矩阵中非零元素远远小于元素总数,则称该矩阵为稀疏矩阵。 .一维数组的逻辑结构是线性结构,存储结构是顺序存储结构;对二维或多维数组,分别按行优先和列优先两种不同的存储方式。 .在有向图的邻接矩阵表示中,计算第i个顶点入度的方法是求邻接矩阵中第i列非0元素的个数。 网中,结点表示活动,边表示活动之间的优先关系,AOE网中,结点表示事件,边表示活动。 .按排序过程中依据不同原则对内部排序方法进行分类,主要有选择排序﹑交换排序﹑插入排序归并排序等4类。 .在堆排序、快速排序和归并排序中若只从排序结果的稳定性考虑,则应选择归并排序方法;若只从平均情况下排序最快考虑,则应选择快速排序方法;若只从最坏情况下排序最快且要节省类存考虑,则应选择堆排序方法。 .直接插入排序用监视哨的作用是存当前要的插入记录,可又省去查找插入位置时对是否出界的判断。 .设表中元素的初始状态是按键值递增的,则直接插入排序最省时间,快速排序最费时间。 .下列程序判断字符串s是否对称,对称则返回1,否则返回0;如?(“abba”)返回1,?(”abab”)返回0. Int f (char*s) { Int i=0,j=0; 求串长*/

数据结构 第六章 图 练习题及答案详细解析

图 1. 填空题 ⑴设无向图G中顶点数为n,则图G至少有()条边,至多有()条边;若G为有向图,则至少有()条边,至多有()条边。 【解答】0,n(n-1)/2,0,n(n-1) 【分析】图的顶点集合是有穷非空的,而边集可以是空集;边数达到最多的图称为完全图,在完全图中,任意两个顶点之间都存在边。 ⑵任何连通图的连通分量只有一个,即是()。 【解答】其自身 ⑶图的存储结构主要有两种,分别是()和()。 【解答】邻接矩阵,邻接表 【分析】这是最常用的两种存储结构,此外,还有十字链表、邻接多重表、边集数组等。 ⑷已知无向图G的顶点数为n,边数为e,其邻接表表示的空间复杂度为()。 【解答】O(n+e) 【分析】在无向图的邻接表中,顶点表有n个结点,边表有2e个结点,共有n+2e个结点,其空间复杂度为O(n+2e)=O(n+e)。 ⑸已知一个有向图的邻接矩阵表示,计算第j个顶点的入度的方法是()。 【解答】求第j列的所有元素之和 ⑹有向图G用邻接矩阵A[n][n]存储,其第i行的所有元素之和等于顶点i的()。 【解答】出度 ⑺图的深度优先遍历类似于树的()遍历,它所用到的数据结构是();图的广度优先遍历类似于树的()遍历,它所用到的数据结构是()。 【解答】前序,栈,层序,队列 ⑻对于含有n个顶点e条边的连通图,利用Prim算法求最小生成树的时间复杂度为(),利用Kruskal 算法求最小生成树的时间复杂度为()。 【解答】O(n2),O(elog2e) 【分析】Prim算法采用邻接矩阵做存储结构,适合于求稠密图的最小生成树;Kruskal算法采用边集数组做存储结构,适合于求稀疏图的最小生成树。 ⑼如果一个有向图不存在(),则该图的全部顶点可以排列成一个拓扑序列。 【解答】回路 ⑽在一个有向图中,若存在弧、、,则在其拓扑序列中,顶点vi, vj, vk的相对次序为()。 【解答】vi, vj, vk

数据结构试题及答案(10套最新)

单选题(每题2分,共20分) 1. 1. 对一个算法的评价,不包括如下(B )方面的内容。 A .健壮性和可读性 B .并行性 C .正确性 D .时空复杂度 2.2. 在带有头结点的单链表HL 中,要向表头插入一个由指针 p 指向 的结点,则执行(A )。 A. p->next=HL->next; HL->next=p; B. p->next=HL; HL=p; 都具有相同的(A )。 A.行号 B .列号 C .元素值 D .非零元素个数 9. 快速排序在最坏情况下的时间复杂度为(D )。 A. O(log 2n) B . O(nlog 2n) C . 0(n) D 10.10. 从二叉搜索树中查找一个元素时,其时间复杂度大致 为 A. O(n) B. O(1) C. O(log 2 n) D. O(n 二、 运算题(每题6分,共24分) 1. 1. 数据结构是指数据及其相互之间的 _________________ 。当结点之 间存在M 对N (M N)的联系时,称这种结构为 __________________________ 。 2. 2. 队列的插入操作是在队列的_ _尾 ________ 行,删除操作是在队 列的 ____ 首 _____ 行。 3. 3. 当用长度为N 的数组顺序存储一个栈时,假定用top==N 表示栈 C. p->next=HL; p=HL; 3. 3. A. C. D. HL=p; p-> next=HL; 对线性表,在下列哪种情况下应当采用链表表示? 经常需要随机地存取元素 B. 表中元素需要占据一片连续的存储空间 一个栈的输入序列为1 2 3, 4. 4. 列的是(C ) A. 2 3 1 C. 3 1 2 AOV 网 是一种(D ) 有向 图 B .无向图 (B ) 经常需要进行插入和删除操作 D.表中元素的个数不变 则下列序列中不可能是栈的输出序 B. 3 2 1 5. 5. 6. .无向无环图 D .有向无环图 采用 开放定址法处理散列表的冲突时,其平均查找长度( B. 高于链接法处理冲突 D .高于二分查找 7. 8. 6. A.低于链接法处理冲突 .与链接法处理冲突相同 7. 参数。 A.值 8. B)。 若需要利用形参直接访问实参时,应将形参变量说明为( B .函数 C .指针 D .引用 在稀疏矩阵的带行指针向量的链接存储中,每个单链表中的结点 9. .0(n 2) (C )。 2 )

数据结构 期末考试复习题及答案

1.什么是最小生成树?简述最小生成树的Prime算法的思想。 答:最小生成树就是构造一棵生成树,使得树上各边的代价之和最小。 普里姆算法(Prim)的基本思想: 从连通网络N = { V, E }中的某一顶点u0 出发,选择与它关联的具有最小权值的边(u0, v),将其顶点加入到生成树的顶点集合U中。以后每一步从一个顶点在U中,而另一个顶点不在U中的各条边中选择权值最小的边(u, v),把它的顶点加入到集合U中。如此继续下去,直到网络中的所有顶点都加入到生成树顶点集合U中为止。 2.简述AOV网络中为何不能出现回路,如何判断AOV网络是否有回路? 答:在AOV网络中,如果活动vi必须在vj之前进行,则称为存在有向边;在AOV网络中不能出现有向回路,如果出现了,则意味着某项活动应以自己作为先决条件。 如何检查AOV网是否存在有向环: 检测有向环的一种方法是对AOV网络构造它的拓扑有序序列。即将各个顶点(代表各个活动)排列成一个线性有序的序列,使得AOV网络中所有应存在的前驱和后继关系都能得到满足。(1)这种构造AOV网络全部顶点的拓扑有序序列的运算就叫做拓扑排序。 (2)如果通过拓扑排序能将AOV网络的所有顶点都排入一个拓扑有序的序列中,则该AOV 网络中必定不会出现有向环;相反,如果得不到满足要求的拓扑有序序列,则说明AOV网络中存在有向环,此AOV网络所代表的工程是不可行的。

3.为何需要采用循环队列?n个空间的循环队列,最多存储多少个元素?为什 么? 答:循环队列以克服顺序队列的"假上溢"现象,能够使存储队列的向量空间得到充分的利用,所以采用循环队列。 n个空间的循环队列,最多存储n-1个元素,那是为了区别循环队列的队空和队满的条件。队空的条件是Q.front==Q.rear,而队满的条件是(Q.rear+1)%N==Q.front(N是数组中单元的总数),因此,Q.rear所指向的数组单元处于未用状态。所以说,N个单元的数组所存放的循环队列最大长度是N-1。 4.简述堆的删除算法,其删除的是那个值? 答:堆的删除算法:首先,移除根节点的元素(并把根节点作为当前结点)比较当前结点的两个孩子结点的元素大小,把较大的那个元素移给当前结点,接着把被移除元素的孩子结点作为当前结点,并再比较当前结点的孩子的大小,以此循环,直到最后一个叶子结点的值大于或等于当前结点的孩子结点或孩子结点的位置超过了树中元素的个数,则退出循环。最后把最后叶子结点的元素移给当前结点。 在堆的算法里面,删除的值为根值。 5.线索二叉树中,什么是线索,它是否唯一?可有根据什么顺序得到?

数据结构习题及答案——严蔚敏

第一章绪论 一、选择题 1.组成数据的基本单位是() (A)数据项(B)数据类型(C)数据元素(D)数据变量 2.数据结构是研究数据的()以及它们之间的相互关系。 (A)理想结构,物理结构(B)理想结构,抽象结构 (C)物理结构,逻辑结构(D)抽象结构,逻辑结构 3.在数据结构中,从逻辑上可以把数据结构分成() (A)动态结构和静态结构(B)紧凑结构和非紧凑结构 (C)线性结构和非线性结构(D)内部结构和外部结构 4.数据结构是一门研究非数值计算的程序设计问题中计算机的(①)以及它们之间的(②)和运算等的学科。 ① (A)数据元素(B)计算方法(C)逻辑存储(D)数据映像 ② (A)结构(B)关系(C)运算(D)算法 5.算法分析的目的是()。 (A)找出数据结构的合理性(B)研究算法中的输入和输出的关系 (C)分析算法的效率以求改进(D)分析算法的易懂性和文档性 6.计算机算法指的是(①),它必须具备输入、输出和(②)等5 个特性。 ① (A)计算方法(B)排序方法(C)解决问题的有限运算序列(D)调度方法

② (A)可执行性、可移植性和可扩充性(B)可行性、确定性和有穷性 (C)确定性、有穷性和稳定性(D)易读性、稳定性和安全性 二、判断题 1.数据的机内表示称为数据的存储结构。() 2.算法就是程序。() 3.数据元素是数据的最小单位。() 4.算法的五个特性为:有穷性、输入、输出、完成性和确定性。() 5.算法的时间复杂度取决于问题的规模和待处理数据的初态。() 三、填空题 1.数据逻辑结构包括________、________、_________ 和_________四种类型,其中树形结构和图形结构合称为_____。 2.在线性结构中,第一个结点____前驱结点,其余每个结点有且只有______个前驱结点;最后一个结点______后续结点,其余每个结点有且只有_______个后续结点。 3.在树形结构中,树根结点没有_______结点,其余每个结点有且只 有_______个前驱结点;叶子结点没有________结点,其余每个结点的后续结点可以_________。 4.在图形结构中,每个结点的前驱结点数和后续结点数可以 _________。 5.线性结构中元素之间存在________关系,树形结构中元素之间存 在______关系,图形结构中元素之间存在_______关系。 6.算法的五个重要特性是_______、_______、______、_______、

数据结构复习题及答案(12级).

一、选择题。(每小题2分,共40分) (1) 计算机识别.存储和加工处理的对象被统称为____A____。 A.数据 B.数据元素 C.数据结构 D.数据类型 (2) 数据结构通常是研究数据的____ A _____及它们之间的联系。 A.存储和逻辑结构 B.存储和抽象 C.理想和抽象 D.理想与逻辑 (3) 不是数据的逻辑结构是____ A ______。 A.散列结构 B.线性结构 C.树结构 D.图结构 (4) 数据结构被形式地定义为,其中D是____ B _____的有限集,R是____ C _____的有限集。 A.算法 B.数据元素 C.数据操作 D.逻辑结构 (5) 组成数据的基本单位是____ A ______。 A.数据项 B.数据类型 C.数据元素 D.数据变量 (6) 设数据结构A=(D,R),其中D={1,2,3,4},R={r},r={<1,2>,<2,3>,<3,4>,<4,1>},则数据结构A是____ A ______。 A.线性结构 B.树型结构 C.图型结构 D.集合 (7) 数据在计算机存储器内表示时,物理地址与逻辑地址相同并且是连续的,称之为___ C ____。 A.存储结构 B.逻辑结构 C.顺序存储结构 D.链式存储结构 (8) 在数据结构的讨论中把数据结构从逻辑上分为___ A ____。 A.内部结构与外部结构 B.静态结构与动态结构 C.线性结构与非线性结构 D.紧凑结构与非紧凑结构 (9) 对一个算法的评价,不包括如下____ B _____方面的内容。 A.健壮性和可读性 B.并行性 C.正确性 D.时空复杂度 (10) 算法分析的两个方面是__ A ____。 A.空间复杂性和时间复杂性 B.正确性和简明性 C.可读性和文档性 D.数据复杂性和程序复杂性 (11) 线性表是具有n个___ C _____的有限序列(n≠0)。 A.表元素 B.字符 C.数据元素 D.数据项 (12) 线性表的存储结构是一种____ B ____的存储结构。 A.随机存取 B.顺序存取 C.索引存取 D.HASH存取

算法与数据结构题库与答案

一、单项选择题 1 某算法的时间复杂度是O(n 2 ) ,表明该算法()。 A 问题规模是n2 B 问题规模与n2成正比 C 执行时间等于n2 D 执行时间与n2成正比 2、关于数据结构的描述,不正确的是()。 A数据结构相同,对应的存储结构也相同。 B数据结构涉及数据的逻辑结构、存储结构和施加其上的操作等三个方面。 C数据结构操作的实现与存储结构有关。 D定义逻辑结构时可不考虑存储结构。 3、按排序策略分来,起泡排序属于()。 A插入排序B选择排序C交换排序D归并排序 4、利用双向链表作线性表的存储结构的优点是()。 A便于进行插入和删除的操作 B 提高按关系查找数据元素的速度 C节省空间D便于销毁结构释放空间 5、一个队列的进队顺序为1,2,3,4,则该队列可能的输出序列是()。 A 1,2,3,4 B 1,3,2,4 C 1,4,2,3 D 4,3,2,1 6、 Dijkstra算法是按()方法求出图中从某顶点到其余顶点最短路径的。 A按长度递减的顺序求出图的某顶点到其余顶点的最短路径 B按长度递增的顺序求出图的某顶点到其余顶点的最短路径 C通过深度优先遍历求出图中从某顶点到其余顶点的所有路径 D通过广度优先遍历求出图的某顶点到其余顶点的最短路径 7、字符串可定义为n( n≥ 0)个字符的有限()。其中,n是字符串的长度,表明字符串中字符的个数。 A集合B数列C序列D聚合 8、在二维数组A[9][10]中,每个数组元素占用 3 个存储单元,从首地址SA 开始按行连续存放。在这种情况下,元素A[8][5]的起始地址为()。 A SA+141 B SA+144 C SA+222 D SA+255 9、已知广义表为L(A(u,v,(x,y),z),C(m,(),(k,l,n),(())),((())),(e,(f,g),h)),则它的长度是()。 A2B3C4D5 10.对于具有n(n>1)个顶点的强连通图,其有向边条数至少有_____。 A. n+1 B. n C. n-1 D. n-2 11.一个递归算法必须包括 __________ 。 A. 递归部分 B . 结束条件和递归部分 C. 迭代部分 D. 结束条件和迭代部分 12.从逻辑上看可以把数据结构分为__________两大类。 A.动态结构、静态结构B.顺序结构、链式结构 C.线性结构、非线性结构D.初等结构、构造型结构 13、若在长度为n 的顺序表的表尾插入一个新元素的渐进时间复杂度为()。 A O(n) B O(1) C O(n 2) D O(log 2n) 14.采用顺序搜素方式搜索长度为 n 的线性表时,在等概率情况下,搜索成功时的平均搜索 长度为 __________。 A. n B. n/2 C . (n+1)/2 D. (n-1)/2 15、非空的循环单链表first的链尾结点(由p 所指向)满足()。 A p->link==NULL; B P==NULL;

数据结构 习题答案

第1章概论 1. 数据结构是一门研究非数值计算的程序设计问题中,数据元素的①C、数据信息在计算机中的②A以及一组相关的运算等的课程。 ①A.操作对象B.计算方法C.逻辑结构D.数据映象 ②A.存储结构B.关系C.运算D.算法 2. 计算机算法指的是① C ,它必具备输入、输出和② B 等五个特性。 ① A. 计算方法 B. 排序方法 C. 解决问题的有限运算序列 D. 调度方法 ② A. 可行性、可移植性和可扩充性 B. 可行性、确定性和有穷性 C. 确定性、有穷性和稳定性 D. 易读性、稳定性和安全性 3.下面程序段的时间复杂度是D for(i=0;inext = p; p->next = s; B. s->next = p->next; p->next = s; C. s->next = p->next; p = s; D. p->next = s; s->next = p; 2.非空的不带头结点的循环单链表,首结点由first指向,尾结点由p指向,则满足: C A. p->next == NULL; B. p == NULL; C. p->next == first; D. p == first; 3.在一个长度为n的顺序存储的线性表中,删除第i个元素(0≤i≤n-1)时,需要移动多少个元素?C A. n-i B. n-i+1 C. n-i-1 D. I 4.在带头结点指针head的单链表中,链表为空的判断条件是?B A. head == NULL B. head->next == NULL C. head != NULL D. head->next == head; 5.在单链表中,指针p指向元素为x的结点,实现“删除x的后继”的语句是B A. p=p->next; B. p->next=p->next->next; C. p->next=p; D. p=p->next->next;

数据结构习题与答案

第 1 章绪论 课后习题讲解 1、填空 ⑴( )就是数据的基本单位,在计算机程序中通常作为一个整体进行考虑与处理。 【解答】数据元素 ⑵( )就是数据的最小单位,( )就是讨论数据结构时涉及的最小数据单位。 【解答】数据项,数据元素 【分析】数据结构指的就是数据元素以及数据元素之间的关系。 ⑶从逻辑关系上讲,数据结构主要分为( )、( )、( )与( )。 【解答】集合,线性结构,树结构,图结构 ⑷数据的存储结构主要有( )与( )两种基本方法,不论哪种存储结构,都要存储两方面的内容:( )与( )。 【解答】顺序存储结构,链接存储结构,数据元素,数据元素之间的关系 ⑸算法具有五个特性,分别就是( )、( )、( )、( )、( )。 【解答】有零个或多个输入,有一个或多个输出,有穷性,确定性,可行性 ⑹算法的描述方法通常有( )、( )、( )与( )四种,其中,( )被称为算法语言。 【解答】自然语言,程序设计语言,流程图,伪代码,伪代码 ⑺在一般情况下,一个算法的时间复杂度就是( )的函数。 【解答】问题规模 ⑻设待处理问题的规模为n,若一个算法的时间复杂度为一个常数,则表示成数量级的形式为( ),若为 n*log25n,则表示成数量级的形式为( )。 【解答】Ο(1),Ο(nlog2n) 【分析】用大O记号表示算法的时间复杂度,需要将低次幂去掉,将最高次幂的系数去掉。 2、选择题 ⑴顺序存储结构中数据元素之间的逻辑关系就是由( )表示的,链接存储结构中的数据元素之间的逻辑关系就是由( )表示的。 A 线性结构 B 非线性结构 C 存储位置 D 指针 【解答】C,D 【分析】顺序存储结构就就是用一维数组存储数据结构中的数据元素,其逻辑关系由存储位置(即元素在数组中的下标)表示;链接存储结构中一个数据元素对应链表中的一个结点,元素之间的逻辑关系由结点中的指针表示。

数据结构练习试题和答案解析

第1章绪论 一、判断题 1.数据的逻辑结构与数据元素本身的容和形式无关。(√) 2.一个数据结构是由一个逻辑结构和这个逻辑结构上的一个基本运算集构成的整体。(√) 3.数据元素是数据的最小单位。(×) 4.数据的逻辑结构和数据的存储结构是相同的。(×) 5.程序和算法原则上没有区别,所以在讨论数据结构时可以通用。(×) 6.从逻辑关系上讲,数据结构主要分为线性结构和非线性结构两类。(√) 7.数据的存储结构是数据的逻辑结构的存储映象。(√) 8.数据的物理结构是指数据在计算机实际的存储形式。(√) 9.数据的逻辑结构是依赖于计算机的。(×) 10.算法是对解题方法和步骤的描述。(√) 二、填空题 1.数据有逻辑结构和存储结构两种结构。 2.数据逻辑结构除了集合以外,还包括线性结构、树形结构和图形结构。 3.数据结构按逻辑结构可分为两大类,它们是线性结构和非线性结构。 4.树形结构和图形结构合称为非线性结构。 5.在树形结构中,除了树根结点以外,其余每个结点只有1个前驱结点。 6.在图形结构中,每个结点的前驱结点数和后继结点数可以任意多个。 7.数据的存储结构又叫物理结构。 8.数据的存储结构形式包括顺序存储、链式存储、索引存储和散列存储。 9.线性结构中的元素之间存在一对一的关系。 10.树形结构中的元素之间存在一对多的关系。 11.图形结构的元素之间存在多对多的关系。 12.数据结构主要研究数据的逻辑结构、存储结构和算法(或运算)3个方面的容。 13.数据结构被定义为(D,R),其中D是数据的有限集合,R是D上的关系有限集合。 14.算法是一个有穷指令的集合。 15.算法效率的度量可以分为事先估算法和事后统计法。 16.一个算法的时间复杂度是算法输入规模的函数。 17.算法的空间复杂度是指该算法所耗费的存储空间,它是该算法求解问题规模的n的函数。 18.若一个算法中的语句频度之和为T(n)=6n+3nlog2n,则算法的时间复杂度为O(nlog2n)。 19.若一个算法的语句频度之和为T(n)=3n+nlog2+n2,则算法的时间复杂度为O(n2)。 20.数据结构是一门研究非数值计算的程序问题中计算机的操作对象,以及它们之间的关系和运算的学 科。 三、选择题 1.数据结构通常是研究数据的(A)及它们之间的相互关系。 A.存储结构和逻辑结构B.存储和抽象C.联系和抽象D.联系与逻辑 2.在逻辑上可以把数据结构分成(C)。 A.动态结构和静态结构B.紧凑结构和非紧凑结构 C.线性结构和非线性结构D.部结构和外部结构。 3.数据在计算机存储表示时,物理地址和逻辑地址相同并且是连续的,称之为(C)。 A.存储结构B.逻辑结构C.顺序存储结构D.链式存储结构 4.非线性结构中的每个结点(D)。 A.无直接前驱结点.B.无直接后继结点.

相关文档
相关文档 最新文档