数据结构与算法上机作业

数据结构与算法上机作业
数据结构与算法上机作业

数据结构与算法上机作业

第三章树

一、选择题

1、在一棵树中,如果结点A有3个兄弟,B就是A得双亲,则B得度为 D

A、1

B、2

C、3

D、4

2、深度为h得完全二叉树至少有 D 个结点,至多有 B 个结点

A、2h

B、2h-1

C、2h+1

D、2h-1

3、具有n个结点得满二叉树有 C 个叶结点。

A、n/2

B、(n-1)/2

C、(n+1)/2

D、n/2+1

4、一棵具有25个叶结点得完全二叉树最多有 C 个结点。

A、48

B、49

C、50

D、51

5、已知二叉树得先根遍历序列就是ABCDEF,中根遍历序列就是CBAEDF,则后根遍历序列就是 A 。

A、CBEFDA

B、FEDCBA

C、CBEDFA

D、不定

6、具有10个叶结点得二叉树中有 B 个度为2得结点。

A、8

B、9

C、10

D、11

7、一棵非空二叉树得先序遍历序列与后序遍历序列正好相反,则该二叉树一定满足

B 。

A、所有非叶结点均无左孩子

B、所有非叶结点均无右孩子

C、只有一个叶子结点

D、A与B同时成立

8、在线索二叉树中,t所指结点没有左子树得充要条件就是 D 。

A、t->left=NULL

B、t->ltag=TRUE

C、t->ltag=TRUE且t->left=NULL

D、以上都不对

9、n个结点得线索二叉树上含有得线索数为 C 。

A、2n

B、n-1

C、n+1

D、n

10、二叉树按照某种顺序线索化后,任一结点都有指向其前驱与后继得线索,这种说法 B 。

A、正确

B、错误

C、不确定

D、都有可能

11、具有n(n>1)个结点得完全二叉树中,结点i(2i>n)得左孩子结点就是 D 。

A、2i

B、2i+1

C、2i-1

D、不存在

12、具有64个结点得完全二叉树得深度为 C 。

A、5

B、6

C、7

D、8

13、将一颗有100个结点得完全二叉树从上到下、从左到右一次对结点进行编号,根结点得编号为1,则编号为45得结点得右孩子得编号为 D 。

A、46

B、47

C、90

D、91

14、在结点数为n得堆中插入一个结点时,复杂度为 C 。

A、O(n)

B、O(n2)

C、O(log2n)

D、O(log n2)

15、两个二叉树就是等价得,则它们满足 D 。

A、它们都为空

B、它们得左右子树都具有相同得结构

C、它们对应得结点包含相同得信息

D、A、B与C

16、包含n个元素得堆得高度为 C 。(符号「a表示取不小a最小整数)

A、n

B、「log2n

C、「log2(n+1)

D、n+1

17、以下说法错误得就是 B 。

A、存在这样得二叉树,对其采用任何次序得遍历其结点访问序列均相同

B、二叉树就是树得特殊情形

C、由树转换成二叉树,其根结点得右子树总就是空得

D、在二叉树中只有一棵子树得情形下,也要指出就是左子树还就是右子树

18、设F就是一个森林,B就是由F变换得到得二叉树。若F中有n个非终端结点,则B中没有右孩子得结点有 C 个。

A、n-1

B、n

C、n+1

D、n+2

19、将一棵树T转换为二叉树B,则T得后根序列就是B得 B 。

A、先根序列

B、中根序列

C、后根序列

D、层次序列

20、将一棵树转换为二叉树后,这颗二叉树得形态就是 B 。

A、唯一得,根结点没有左孩子

B、唯一得,根结点没有右孩子

C、有多种,根结点都没有左孩子

D、有多种,根结点都没有右孩子

21、设树T得度为4,其中度为1, 2, 3, 4得结点个数分别为4, 2, 1, 1,则T中得叶结点得个数为 D 。

A、5

B、6

C、7

D、8

22、设森林F中有三棵树,第一、第二、第三棵树得结点个数分别为M1, M2, M3。与森林F 对应得二叉树根结点得右子树上得结点个数为 D 。

A、M1-1

B、M1+M2

C、M2

D、M2+M3

23、若以二叉树得任一结点出发到根得路径上所经过得结点序列按其关键字有序,则该二叉树就是 C 。

A、二叉排序树

B、哈夫曼树

C、堆

D、线索二叉树

24、用5个权值{3, 2, 4, 5, 1}构造得哈夫曼树得带权路径长度就是 C 。

A、32

B、33

C、34

D、15

二、填空题

1、一棵二叉树有67个结点,结点得度就是0与2。问这棵二叉树中度为2得结点有33 个。

2、含A, B, C三个结点得不同形态得二叉树有0 棵。

3、含有4个度为2得结点与5个叶子结点得完全二叉树,有 1 个度为1得结点。

4、具有100个结点得完全二叉树得叶子结点数为50 。

5、在用左右链表示得具有n个结点得二叉树中,共有2n 个指针域,其中n-1 个指针域用于指向其左右孩子,剩下得n+1 个指针域就是空得。

6、如果一颗完全二叉树得任意一个非终结结点得元素都大于等于其左儿子结点与右儿子结点(如果有得话)得元素,则称此完全二叉树为最大堆。

7、堆就是一种特殊形式得完全二叉树二叉树,对于最大堆而言,其根结点得元素得值应该就是所有结点元素中最大得得。

8、二叉树得复制就是指按照一棵已知得二叉树复制一个副本,使两者等价。复制二叉树最长用得方法就是后根遍历递归算法。

9、在定义堆时,通常采用数组方式定义相应得二叉树,这样可以很容易实现其相关操作。

10、在构建选择树时,根据孩子结点得获胜者确定她们双亲结点所得到得选择树称为胜者树。根据孩子结点得失败者确定她们双亲结点所得到得选择树称为败者树。

11、树得表示方法包括数组、邻接表与左右链。

12、表达式(a+b*(c-d))-e/f得波兰式(前缀式)就是-+a*b-cd/ef ,逆波兰

式(后缀式)就是abcd-*+e/f- 。

13、设F就是由T1、T2、T3三棵树组成得森林,与F对应得二叉树为B。已知T1, T2, T3得结点数分别为n1, n2与n3,则二叉树B得左子树中有n1-1 个结点,二叉树B得右子树中有n2+n3 个结点。

14、设二叉树得中根序列为ABCDEFG,后根序列为BDCAFGE。则该二叉树得先根序列为EGCBDGF 。该二叉树对应得森林中包含 2 棵树。

15、先根次序遍历森林等同于按先根遍历对应得二叉树,后根次序遍历森林等同与按中根遍历对应得二叉树。

16、一棵哈夫曼树有19个结点,则其叶子结点得个数为10 。

17、设有数据WG={7, 19, 2, 6, 32, 3, 21, 10}叶节点权重集合,则所构建哈夫曼树得高就是6 ,带权路径长度WPL为261 。

18、设有一份电文中共使用6个字符a, b, c, d, e, f,其中出现频率依次为2,3,4,7,8,19,则字符c 得哈夫曼编码就是001 ,电文编码得总长度为96 。

20、在有n个结点得哈夫曼树中,叶子结点总数为(n+1)/2 ,非叶结点得总数为

(n-1)/2 。

三、试分别画出具有4个结点得二叉树得所有不同形态。

四、已知一棵二叉树得中根序列与后根序列分别就是BDCEAHFG与DECBHGFA,请画出此二叉树。

五、已知非空二叉树T,写一个算法,求度为2得结点得个数。

要求:

1、定义二叉树得抽象数据类型与型BTREE,并定义基本操作。

2、编写函数count2(BTREE T),返回度为2得节点得个数。

3、在主函数中,构建一个二叉树,并验证所编写得算法。

六、用递归方法写一个算法,求二叉树得叶子结点数int leafnum(BTREE T)。

要求:

1、定义二叉树得抽象数据类型与型BTREE,并定义基本操作。

2、编写函数leafnum(BTREE T),返回树T得叶子节点得个数。

在主函数中,构建一个二叉树,并验证所编写得算法。

七、画出下图所表示得二叉树得中序线索二叉树与先序线索二叉树。

八、已知二叉树得先根序列就是AEFBGCDHIKJ,中根序列就是EFAGBCHKIJD,画出此二叉树,并画出后序线索二叉树。

九、在中序线索二叉树中插入一个结点Q作为树中某个结点P得左孩子,试给出相应得算法。要求:

1、定义中序线索二叉树得型THTREE以及基本操作。

2、定义函数void LInsert(THTREE P, THTREE Q); 实现题目要求得操作。

在主函数中,利用操作RInsert与LInsert构造一个线索二叉树,并中序输出二叉树得结点得元素,验证结果。

十、假设现在有如下得元素:7、16、49、82、5、31、6、2、44。画出将每一个元素插入堆中以后得最大堆。

要求:

利用基本操作Insert得基本原理,先用第一个元素7构成一个二叉树,然后将第二个元素16插入该二叉树中,再将第三个元素49插入堆中,……,直到最后一个元素插入为止。上述过程要求画图完成。

十一、编写一个函数,在最大堆中查找任意元素,并分析其时间复杂度。

要求:

1、定义最大堆得型HEAP及其基本操作。

2、定义函数int Find(HEAP H, Elementtype e),查找e就是否为堆得元素,如果就是,返回

该元素在堆中得位置,如果不就是,返回0。(提示:利用最大堆得元素特点进行查找,可降低复杂度)

在主函数中首先构建一个二叉树,然后验证所构造得函数。

十二、给定叶子结点得权值集合{15, 3,14, 2, 6, 9, 16, 17},构造相应得哈夫曼树,并计算其带权路径长度。

十三、已知n=9与一组等价关系:

1≡5、6≡8、7≡2、9≡8、3≡7、4≡2、9≡3

试应用抽象数据类型MFSET设计一个算法,按输入得等价关系进行等价分类。

十四、画出下图所示得森林经转换后所对应得二叉树,并指出在二叉树中某结点为叶子结点时,所对应得森林中结点应满足得条件。

十五、已知森林F得先根序列为:ABCDEFGHIJKL,后根序列为:CBEFDGAJIKLH,试画出森林

B,然后再将B转换为森林。

所对应得树结构,并写出该表达式得波兰表示式与逆波

与位置得型position。

:BTREE convert(char *express),其中参数express为四则混合运算表达式,返回值为生成得树。

4、实现计算四则混合运算得值得函数:double puter(BTREE bt),其中,参数bt为四则运算

所对应得树,返回值为计算结果。提示:先求树得得波兰表达式,然后利用栈结构计算表达式得值。

在主函数中进行测试,求2+3*(5+8)/4-5得值。

要求:

1、上述作业要求在单独完成;

2、完成后,于规定期限内提交到ftp服务器得相应目录中中,注意,在提交时将所编写得程序统一拷贝到一个Word文件中,文件名格式为“学号+姓名”

typedef char datatype;

struct node{

node *lchild;

datatype data;

node *rchild;

};

typedef node *BTREE;

void CreateBTREE(BTREE &BT,char *&str)//先根输入树

{

char ch;

ch=*str++;

if(ch=='#')

BT=NULL;

else

{

BT=new node;

BT->data=ch;

CreateBTREE(BT->lchild,str);

CreateBTREE(BT->rchild,str);

}

}

void Empty(BTREE BT)

{

BT=NULL;

}

bool IsEmpty(BTREE BT)//判断就是否为空

{

if(BT==NULL)

return true;

else

return false;

}

BTREE CreateBT(datatype v,BTREE ltree,BTREE rtree)//用左右子树建立二叉树{

BTREE root;

root=new node;

root->data=v;

root->lchild=ltree;

root->rchild=rtree;

return root;

}

BTREE Lchild(BTREE BT)//返回左子树

{

return BT->lchild;

}

BTREE Rchild(BTREE BT)//返回右子树{

return BT->rchild;

}

datatype Data(BTREE BT)//返回节点元素值{

return BT->data;

}

void visit(datatype dt)

{

cout<

}

void PreOrder(BTREE BT)//先根顺序遍历{

if(!IsEmpty(BT))

{

visit(Data(BT));

PreOrder(Lchild(BT));

PreOrder(Rchild(BT));

}

}

void InOrder(BTREE BT)//中根顺序遍历{

if(!IsEmpty(BT))

{

PreOrder(Lchild(BT));

visit(Data(BT));

PreOrder(Rchild(BT));

}

}

void PostOrder(BTREE BT)//后根顺序遍历{

if(!IsEmpty(BT))

{

PreOrder(Lchild(BT));

PreOrder(Rchild(BT));

visit(Data(BT));

}

}

int count2(BTREE BT)

{

if(BT==NULL)

return 0;

else

{

if((BT->lchild)&&(BT->rchild))

return 1+count2(Lchild(BT))+count2(Rchild(BT));

if((BT->lchild)&&(BT->rchild==NULL))

return count2(Lchild(BT));

if((BT->lchild==NULL)&&(BT->rchild))

return count2(Rchild(BT));

}

}

int leafnum(BTREE BT)

{

static int count=0;

if(BT->lchild==NULL&&BT->rchild==NULL)

return ++count;

else

{

leafnum(Lchild(BT));

leafnum(Rchild(BT));

}

}

int main()

{

BTREE BT=NULL;

char *str="abc##d##ef##g##";

CreateBTREE(BT,str);

cout<<"度为2得节点得个数:"<

cout<<"叶子节点个数:"<

}

using namespace std;

typedef char datatype;

struct node{

node *lchild;

node *rchild;

bool ltag;

bool rtag;

datatype data;

};

typedef node *THTREE;

THTREE InPre(THTREE P)//求中序前驱(右子树得最左节点) {

THTREE Q=P->lchild;

if(P->ltag==true)

while(Q->rtag==true)

Q=Q->rchild;

return Q;

}

THTREE InNext(THTREE P)//求中序后继(左子树得最右节点) {

THTREE Q=P->rchild;

if(P->rtag==true)

while(Q->ltag==true)

Q=Q->lchild;

return Q;

}

//二叉树中插入一个结点Q作为树中某个结点P得左孩子void LInsert(THTREE P,THTREE Q)

{

THTREE W;

Q->lchild=P->lchild;

Q->ltag=P->ltag;

Q->rchild=P;

Q->rtag=false;

P->lchild=Q;

P->ltag=true;

if(Q->ltag==true)//如果P节点有左孩子

{

W=InPre(Q);

W->rchild=Q;

}

}

void RInsert(THTREE P,THTREE Q)

{

THTREE W;

Q->rchild=P->rchild;

Q->rtag=P->rtag;

Q->lchild=P;

Q->ltag=false;

P->rchild=Q;

P->rtag=true;

if(Q->rtag==true)//如果P节点有右孩子

{

W=InNext(Q);

W->lchild=Q;

}

}

void ThInOrder(THTREE HEAD)

{

THTREE temp;

temp=HEAD;

do{

temp=InNext(temp);

if(temp!=HEAD)

cout<<(temp->data);

}while(temp!=HEAD);

}

int main()

{

node *HEAD=new node;

node *A=new node;

HEAD->data='!';

A->data='A';

HEAD->lchild=A;

HEAD->rchild=HEAD;

HEAD->ltag=true;

HEAD->rtag=true;

A->lchild=HEAD;

A->rchild=HEAD;

A->ltag=false;

A->rtag=false;

node *B=new node;

B->data='B';

node *C=new node;

C->data='C';

node *D=new node;

D->data='D';

node *E=new node;

E->data='E';

node *F=new node;

F->data='F';

node *G=new node;

G->data='G';

LInsert(A,B);

RInsert(A,C);

LInsert(B,D);

RInsert(B,E);

LInsert(C,F);

RInsert(C,G);

ThInOrder(HEAD); }

i=++heap、n;

while(i!=1&&(element、data>heap、elements[i/2]、data))

{

heap、elements[i]=heap、elements[i/2];

i/=2;

}

}

heap、elements[i]=element;

}

Elementtype DeleteMax(HEAP &heap)//删除堆中得最大元素

{

int parent=1,child=2;

Elementtype element,tmp;

if(!HeapEmpty(heap))

{

element=heap、elements[1];

tmp=heap、elements[heap、n--];

while(child<=heap、n)

{

if((child

if(tmp、data>=heap、elements[child]、data)

break;

heap、elements[parent]=heap、elements[child];

parent=child;

child*=2;

}

heap、elements[parent]=tmp;

return element;

}

}

int Find(HEAP &H,Elementtype e)//查找e就是否为堆中元素

{

int i=H、n,j;

if(e、data==H、elements[1]、data)

return 1;

if(i!=0)

{

if(e、data==H、elements[i]、data)

return i;

else if((e、data

{

j=i/4+1;

while(j

{

if(e、data==H、elements[j]、data)

return j;

j++;

}

return 0;

}

else

i/=4;

}

}

int main()

{

HEAP H;

H、n=0;

Elementtype element;

int data[]={7,16,49,82,5,31,6,2,44};

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

{

element、data=data[i];

Insert(H,element);

}

cout<<"最大堆元素为:"<

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

{

cout<

}

cout<

cout<<"请输入要查找得元素"<

cin>>element、data;

cout<<"该元素在堆中得位置为"<

十三

#define n 9

struct node{

int father;

int count;

};

void Union(int A,int B,MFSET C)//如果集合擦C[A] C[B]不相交{

if(C[A]、count>C[B]、count)

{

C[B]、father=A;

C[A]、count=C[A]、count+C[B]、count;//并入A }

else

{

C[A]、father=B;

C[B]、count=C[A]、count+C[B]、count;//并入B }

}

int Find(int x,MFSET C)//求包含x得集合

{

int f;

f=x;

while(C[f]、father!=0)

f=C[f]、father;

return f;

}

void Initial(int A,MFSET C)

{

C[A]、father=0;//集合A只包含元素A,个数为1;

C[A]、count=1;

}

void Equivalence(MFSET S)

{

int i,j,m,k;

for(i=1;i<=n+1;i++)

Initial(i,S);//使集合i只包含元素i

cin>>i;cin>>j;//读入第一个等价对

while(!(i==0&&j==0))//等价对未读完,输入0 0结束

{

k=Find(i,S);//求i得根

m=Find(j,S);//求j得根

if(k!=m) //若k=m,说明i,j已经在一棵树中,不需要合并Union(k,m,S);

cin>>i;cin>>j;

}

}

int main()

{

MFSET S;

Equivalence(S);

int r[n+1][n+1]={},k;

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

{

k=Find(i,S);

r[k][0]++;

r[k][r[k][0]]=i;

}

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

{

if(r[i][0]>0)

{

for(int j=1;j<=r[i][0];j++)

cout<

}

cout<

}

}

十四

数据结构与算法模拟试题

一、选择题 1.在逻辑上可以把数据结构分成() A.线性结构和非线性结构 B.动态结构和静态结构 C.紧凑结构和非紧凑结构 D.内部结构和外部结构 2.单链表中各结点之间的地址() A.必须连续 B.部分必须连续 C.不一定连续 D.以上均不对 3.在一个长度为n的顺序表中向第i个元素(0front==L C.P==NULL D.P->rear==L 12. 已知P为单链表中的非首尾结点,删除P结点的后继结点Q的语句为()。 A.P->NEXT=Q->NEXT;FREE(Q); B.Q->NEXT=P; FREE(Q); C.Q->NEXT=P->NEXT;FREE(Q); D.P->NEXT=S;S->NEXT=P; 13.循环队列SQ队满的条件是()。 A.SQ->rear==SQ->front B. (SQ->rear+1)%MAXLEN==SQ->front C.SQ->rear==0 D. SQ->front==0 14.一组记录的排序码为(46,79,56,38,40,84),则利用堆排序的方法建立的初始堆为()。 A、79,46,56,38,40,80 B、84,79,56,38,40,46 C、84,79,56,46,40,38 D、84,56,79,40,46,38 15.排序趟数与序列原始状态(原始排列)有关的排序方法是()方法。 A、插入排序 B、选择排序 C、冒泡排序 D、快速排序 16.下列排序方法中,()是稳定的排序方法。 A、直接选择排序 B、二分法插入排序

力 扣 数 据 结 构 与 算 法

前端如何搞定数据结构与算法(先导篇) 「观感度:?」 「口味:锅包肉」 「烹饪时间:20min」 本文已收录在Github? 为什么要学习数据结构与算法? 在0202年的今天,由于每天被无数的信息轰炸,大多数人已经变得越来越浮躁了,并且丧失了独立思考的能力。 你可能会经常听到这样的感慨: 技术人究竟能走多远?我遇到了天花板 35岁的程序员要如何面对中年危机? 技术更新太快,好累,学不动了 然后,你也变得焦虑起来。那你有没有静下心来想过,如何才能抵御年龄增长并且使自己增值呢? 无非是终身学习,持续修炼自己的内功。内功也就是基础知识和核心概念,这些轰轰烈烈发展的技术本质,其实都是基础知识,也就是我们在大学里学过的基础课-程。 操作系统 计算机组成原理 计算机网络 编译原理

设计模式 数据结构与算法 这也就是为什么越靠谱的面试官越注重你基础知识的掌握程度,为什么越牛的的企业越重视你的算法能力。因为当你拥有了这些,你已经比大多数人优秀了。你的天花板由你自己来决定,大家口中的中年危机可能并不会成为你的危机。新技术来临时,你对它的本质会看得更加透彻,学起来会一通百通。这样的人才,公司培养你也会花费更少的成本。 (不过,一辈子做个开开心心的 CRUD Boy 也是一种选择。) 数据结构与算法之间的关系 Rob Pikes 5 Rules of Programming中的第五条是这样说的: Data dominates. If youve chosen the right data structures and organized things well, the algorithms will almost always be self-evident. Data structures, not algorithms, are central to programming. 数据占主导。如果您选择了正确的数据结构并组织得当,那么这些算法几乎总是不言而喻的。数据结构而非算法是编程的核心。 瑞士计算机科学家,Algol W,Modula,Oberon 和 Pascal 语言的设计师 Niklaus Emil Wirth 写过一本非常经典的书《Algorithms + Data Structures = Programs》,即算法 + 数据结构 = 程序。 我们可以得出结论,数据结构与算法之间是相辅相成的关系。数据结构服务于算法,算法作用于特定的数据结构之上。 数据结构与算法好难,怎么学?

数据结构与算法复习题10(C语言版)

习 9解答 判断题: 1.用向量和单链表表示的有序表均可使用折半查找方法来提高查找速度。 答:FALSE (错。链表表示的有序表不能用折半查找法。) 2.有n 个数据放在一维数组A[1..n]中,在进行顺序查找时,这n 个数的排列有序或无序其平均查找长度不同。 答:FALSE (错。因顺序查找既适合于有序表也适合于无序表;对这两种表,若对于每个元素的查找概率相等,则顺序查找的ASL 相同,并且都是(n+1)/2;对于查找概率不同的情况,则按查找概率由大到小排序的无序表其ASL 要比有序表的ASL 小。) 3.折半查找是先确定待查有序表记录的范围,然后逐步缩小范围,直到找到或找不到该记录为止。( ) 答:TRUE 4.哈希表的查找效率主要取决于哈希表哈希表造表时选取的哈希函数和处理冲突的方法。 答:TRUE 5.查找表是由同一类型的数据元素(或记录)构成的集合。 答:TRUE 单选题: 6.对于18个元素的有序表采用二分(折半)查找,则查找A[3]的比较序列的下标为( )。 A. 1、2、3 B. 9、5、2、3 C. 9、5、3 D.9、4、2、3 答:D (第一次??2/)181(+ = 9,第二次??2/)81(+ = 4,第三次??2/)31(+ = 2, (第四次??2/)33(+ = 3,故选D. 7. 顺序查找法适合于存储结构为____________的线性表。 A.散列存储 B.顺序存储或链式存储 C.压缩存储 D.索引存储 答:B 8.对线性表进行二分查找时,要求线性表必须( )。 A .以顺序方式存储 B. 以链接方式存储 C .以顺序方式存储,且结点按关键字有序排序 D. 以链接方式存储,且结点按关键字有序排序 答:C 9.设哈希表长m=14,哈希函数为H(k) = k MOD 11。表中已有4个记录(如下图

数据结构 习题 第一章 绪论

第1章绪论 一、选择题 1. 算法的计算量的大小称为计算的()。 A.效率 B. 复杂性 C. 现实性 D. 难度 2. 算法的时间复杂度取决于() A.问题的规模 B. 待处理数据的初态 C. A和B 3.计算机算法指的是(1),它必须具备(2)这三个特性。 (1) A.计算方法 B. 排序方法 C. 解决问题的步骤序列 D. 调度方法 (2) A.可执行性、可移植性、可扩充性 B. 可执行性、确定性、有穷性 C. 确定性、有穷性、稳定性 D. 易读性、稳定性、安全性 4.一个算法应该是() A.程序 B.问题求解步骤的描述 C.要满足五个基本特性 D.A和C. 5. 下面关于算法说法错误的是() A.算法最终必须由计算机程序实现 B.为解决某问题的算法同为该问题编写的程序含义是相同的 C. 算法的可行性是指指令不能有二义性 D. 以上几个都是错误的 6. 下面说法错误的是()【南京理工大学 2000 一、2 (1.5分)】 (1)算法原地工作的含义是指不需要任何额外的辅助空间 (2)在相同的规模n下,复杂度O(n)的算法在时间上总是优于复杂度O(2n)的算法 (3)所谓时间复杂度是指最坏情况下,估算算法执行时间的一个上界 (4)同一个算法,实现语言的级别越高,执行效率就越低 A.(1) B.(1),(2) C.(1),(4) D.(3) 7.从逻辑上可以把数据结构分为()两大类。【武汉交通科技大学 1996 一、4(2分)】A.动态结构、静态结构 B.顺序结构、链式结构 C.线性结构、非线性结构 D.初等结构、构造型结构 8.以下与数据的存储结构无关的术语是()。【北方交通大学 2000 二、1(2分)】A.循环队列 B. 链表 C. 哈希表 D. 栈 9.以下数据结构中,哪一个是线性结构()?【北方交通大学 2001 一、1(2分)】A.广义表 B. 二叉树 C. 稀疏矩阵 D. 串 10.以下那一个术语与数据的存储结构无关?()【北方交通大学 2001 一、2(2分)】A.栈 B. 哈希表 C. 线索树 D. 双向链表 11.在下面的程序段中,对x的赋值语句的频度为()【北京工商大学 2001 一、10(3分)】 FOR i:=1 TO n DO FOR j:=1 TO n DO x:=x+1; A. O(2n) B.O(n) C.O(n2) D.O(log2n) 12.程序段 FOR i:=n-1 DOWNTO 1 DO FOR j:=1 TO i DO IF A[j]>A[j+1] THEN A[j]与A[j+1]对换; 其中 n为正整数,则最后一行的语句频度在最坏情况下是()

数据结构与算法离线作业题目及答案

浙江大学远程教育学院 《数据结构与算法》课程离线作业 姓名:陈翠学号:713009014001 年级:2013秋学习中心:金华学习中心—————————————————————————————一、填空题:(【序号,章,节】。。。。。。) 【1,1,2】线性结构中元素之间存在一对一关系,树形结构中元素之间存在一对多关系,图形结构中元素之间存在多对多关系。 【2,1,2】为了最快地存取数据元素,物理结构宜采用顺序存储结构。 【3,1,2】存储结构可根据数据元素在机器中的位置是否一定连续分为顺序存储结构___,链式存储结构___。 【4,1,3】度量算法效率可通过时间复杂度___来进行。 【5,1,3】设n 为正整数,下面程序段中前置以记号@的语句的频度是n(n+1)/2 。 for (i=0; i

for (i=1; i<=n; i++){ for (j=i; j<=n; j++) @ k++; // 语句的频度是_________n(n+1)/2________________。 } 【7,3,2】线性表(a1,a2,…,a n)有两种存储结构:顺序存储结构和链式存储结构,请就这两种存储结构完成下列填充:___顺序_ 存储密度较大;___顺序____存储利用率较高;___顺序____可以随机存取;__链式_____不可以随机存取;__链式____插入和删除操作比较方便。 【8,3,2】从一个长度为n的顺序表中删除第i个元素(1≤i≤n)时,需向前移动n-i 个元素。 【9,3,2】带头结点的单链表Head为空的条件是___ Head->next=NULL _ ______。 【10,3,2】在一个单链表中p所指结点(p所指不是最后结点)之后插入一个由指针s所指结点,应执行s->next=__ p->next ___;和p->next=___ s_ _____的操作。 【11,3,2】在一个单链表中删除p所指结点时,应执行以下操作: q= p->next; p->data= p->next->data; p->next= p->next->next _ ; free(q); 【12,3,2】带头结点的单循环链表Head的判空条件是_ Head->next == Head ____;不带头结点的单循环链表的判空条件是_ Head == NULL ____。 【13,3,2】已知L是带表头结点的非空单链表, 且P结点既然不首元结点,也不是尾元结点,试从下列提供的答案中选择合适的语句序列。 a. 删除P结点的直接前驱结点的语句序列是__10 12 8 11 4 14___。 b. 删除结点P的语句序列是__10 12 7 3 14______。 c. 删除尾元结点的语句序列是____9 11 3 14_____。 (1) P = P->next; (2) P->next = P; (3) P->next = P->next ->next; (4) P = P->next ->next; (5) while (P != NULL) P = P->next; (6) while (Q->next != NULL){P = Q; Q = Q->next}; (7) while (P->next != Q) P = P->next; (8) while (P->next->next != Q) P = P->next; 2

[第1题-60题汇总]微软数据结构+算法面试100题

精选微软等公司数据结构 精选微软等公司数据结构++算法面试100题 -----[第1题-60题总] 资源说明: 此份,是为微软等公司数据结构+算法面试100题,之前60题的汇总。 总结整理了前第1题-第60题。特此并作此一份上传。以飨各位。:)。 -------------------------------- 相关资源,包括答案,下载地址: [答案V0.2版]精选微软数据结构+算法面试100题[前20题]--答案修正 https://www.360docs.net/doc/1018939216.html,/source/2813890 //此份答案是针对最初的V0.1版本,进行的校正与修正。 [答案V0.1版]精选微软数据结构+算法面试100题[前25题] https://www.360docs.net/doc/1018939216.html,/source/2796735 [第二部分]精选微软等公司结构+算法面试100题[前41-60题]: https://www.360docs.net/doc/1018939216.html,/source/2811703 [第一部分]精选微软等公司数据结构+算法经典面试100题[1-40题] https://www.360docs.net/doc/1018939216.html,/source/2778852 更多资源,下载地址: http://v_july_https://www.360docs.net/doc/1018939216.html,/ 很快,我将公布第21-40题的答案,敬请期待。:).. 如果你对以下的前第1-60题,有好的思路,和算法,欢迎跟帖回复, 或者,联系我,发至我的邮箱, zhoulei0907@https://www.360docs.net/doc/1018939216.html,。 My CSDN Blog:https://www.360docs.net/doc/1018939216.html,/v_JULY_v My sina Blog:https://www.360docs.net/doc/1018939216.html,/shitou009 帖子维护地址: [整理]算法面试:精选微软经典的算法面试100题[前1-60题] https://www.360docs.net/doc/1018939216.html,/u/20101023/20/5652ccd7-d510-4c10-9671-307a56006e6d.html -------------------------------------- July、2010、/11.12.请享用。:)。 1

北京交通大学数据结构与算法期末测验考试参考答案

北京交通大学考试试题(A卷) 课程名称:数据结构与算法2011-2012学年第一学期出题教师:张勇 (请考生注意:(1)本试卷共有六道大题,(2)答案一律写在答题纸上,(3)试卷不得带出考场) 1. 在顺序表中访问任意一个元素的时间复杂度均为,因此顺序表也称为 的数据结构。 2.三维数组a[4][3][2](下标从0开始),假设a[0][0][0]的地址为50,数据以行序优先方式存储,每个元素的长度为2字节,则a[2][1][1]的地址是。 3. 直接插入排序用监视哨的作用是。 4. 已知广义表Ls=(a, (b, c), (d, e)), 运用head和tail函数取出Ls中的原子d的运算 是。 5.对有14个元素的有序表A[1..14]进行折半查找,当比较到A[4]时算法结束。被比较元素除A[4]外,还有。 6. 在AOV网中,顶点表示,边表示。 7. 有向图G可进行拓扑排序的判别条件是。 8. 若串S1=‘ABCDEFGHIJK’,S2=‘451223’,S3=‘####’,则执行 Substring(S1,Strlength(S3),Index(S2,‘12’,1))的结果是。 二、选择题(每空2分,共20分) 1.在下列存储形式中,哪一个不是树的存储形式?() A.双亲表示法B.孩子链表表示法 C.孩子兄弟表示法D.顺序存储表示法 2.查找n个元素的有序表时,最有效的查找方法是()。 A.顺序查找B.分块查找 C.折半查找D.二叉查找 3.将所示的s所指结点加到p所指结点之后,其语句应为()。 p (A) s->next=p+1 ; p->next=s;

(B) (*p).next=s; (*s).next=(*p).next; (C) s->next=p->next ; p->next=s->next; (D) s->next=p->next ; p->next=s; 4. 在有向图的邻接表存储结构中,顶点v 在链表中出现的次数是( )。 A. 顶点v 的度 B. 顶点v 的出度 C. 顶点v 的入度 D. 依附于顶点v 的边数 5. 算法的时间复杂度为O (nlog 2n )、空间复杂度为O(1)的排序算法是( )。 A. 堆排序 B. 快速排序 C. 归并排序 D.直接选择 6. 设矩阵A 是一个对称矩阵,为了节省存储,将其 下三角部分(如右图所示)按行序存放在一维数组B[ 1, n(n-1)/2 ]中,对下三角部分中任一元素ai,j(i ≤j), 在一维数组B 中下标k 的值是( ): A.i(i-1)/2+j-1 B.i(i-1)/2+j C.i(i+1)/2+j-1 D.i(i+1)/2+j 7. 由一个长度为11的有序表,按二分查找法对该表进行查找,在表内各元素等概率情 况下,查找成功的平均查找长度是( )。 A .29/11 B. 31/11 C. 33/11 D.35/11 8. AVL 树是一种平衡的二叉排序树,树中任一结点的( )。 A. 左、右子树的高度均相同 B. 左、右子树高度差的绝对值不超过1 C. 左子树的高度均大于右子树的高度 D. 左子树的高度均小于右子树的高度 9. 下列四种排序方法中,不稳定的方法是( )。 A. 直接插入排序 B. 冒泡排序 C. 归并排序 D. 堆排序 10. 设树的度为4,其中度为1,2,3,4的结点个数分别为4, 2, ,1, 1, 则T 中的叶子数为 ( )。 A .5 B .6 C .7 D .8 三、 判断题(10分,每小题1分) 1. 顺序存储方式的优点是存储密度大,且插入、删除运算效率高。( ) 2. 数组不适合作任何二叉树的存储结构。( ) 3. 广义表的取表尾运算,其结果通常是个表,但有时也可是个原子。( ) 4. 在含有n 个结点的树中,边数只能是n-1条。( ) 5. 所谓一个排序算法是否稳定,是指该算法在各种情况下的效率是否相差不大。( ) 6. 简单选择排序在最好情况下的时间复杂度为O(n)。( ) 7. 在二叉排序树中插入一个新结点,总是插入到叶结点下面。( ) 8. 采用线性探测处理冲突,当从哈希表中删除一个记录时,不应将该记录所在位置置 空,因为这会影响以后的查找。( ) 9. 有n 个数存放在一维数组A[1..n]中,在进行顺序查找时,这n 个数的排列有序或无 ?????? ? ???? ? ??=n n n n a a a a a a A ,2,1,2 ,21,21 ,1Λ Λ

数据结构与算法习题及答案

第1章绪论 习题 1.简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。2.试举一个数据结构的例子,叙述其逻辑结构和存储结构两方面的含义和相互关系。 3.简述逻辑结构的四种基本关系并画出它们的关系图。 4.存储结构由哪两种基本的存储方法实现 5.选择题 (1)在数据结构中,从逻辑上可以把数据结构分成()。 A.动态结构和静态结构B.紧凑结构和非紧凑结构 C.线性结构和非线性结构D.内部结构和外部结构 (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.栈 6.试分析下面各程序段的时间复杂度。 (1)x=90;y=100; while(y>0) if(x>100) {x=x-10;y--;} elsex++; (2)for(i=0;i

阿里校园招聘历年经典面试题汇总:算法工程师

阿里校园招聘历年经典面试题汇总:算法工程师 (1)、jvm 原理 (2)、minor GC 与 Full GC (3)、HashMap 实现原理 (4)、java.util.concurrent 包下使用过哪些 (5)、concurrentMap 和 HashMap 区别 (6)、信号量是什么,怎么使用? (7)、阻塞队列了解吗?怎么使用? (8)、JAVA NIO 是什么? (9)、类加载机制是怎样的 (10)、什么是幂等性 (11)、有哪些 JVM 调优经验 (12)、分布式 CAP 了解吗? (13)、hdfs怎么添加Datanode,添加后hdfs会有什么操作? (14)、Hbase 跟关系数据库对比优缺点?为什么 Hbase 索引速度快 (15)、Hbase 大压缩与小压缩区别 (16)、Hive 与 Hbase 的使用场景 (17)、简单说说Spark功能,spark 与hive有无依赖关系? (18)、zookeeper 有什么应用场景,怎么选举的?3 个节点挂掉一个能正常工作吗? (19)、Hbase 中 zookeaper 作用 (20)、Hbase 写操作什么时候返回 (21)、mysql 有哪些存储引擎?各自特点 (22)、用过哪些设计模式?怎样实现线程安全单例模式? (23)、用过哪些RPC框架? (24)、什么是AOP? (25)、决策树算法怎么实现的? (26)、java垃圾回收会出现不可回收的对象吗?怎么解决内存泄露问题?怎么

定位问题源? (27)、终止线程有几种方式?终止线程标记变量为什么是 valotile 类型?(28)、用过哪些并发的数据结构? cyclicBarrier 什么功能?信号量作用?数据库读写阻塞怎么解决? (29)、乐观锁与悲观锁,怎么实现乐观锁? (30)、开发过分布式框架?怎么实现分布式事务? (31)、spark streaming与storm区别? (32)、找到最大子数组的 start,和end下标 (33)、用过 CDH中什么任务调度? (34)、spark streaming时间间隔设置很小会出现什么状况? (35)、搜索引擎了解多少?你认为搜索引擎的难点在哪里? (36)、RPC 了解吗?怎么监控 RPC 状态,找出出现问题的 RPC 连接?(37)、spring 框架了解多少? (38)、flume应用场景 (39)、找出一串字符中第一个不重复字符的下标。 点击查看详细面经〉〉〉〉〉〉〉〉〉〉〉〉 更多精品干货>>>>>>>>>>> 更多阿里机器学习/数据挖掘经典面试题 其他名企机器学习/数据挖掘经典面试题

数据结构与算法复习题及参考答案

复习题集─参考答案 一判断题 (√)1. 在决定选取何种存储结构时,一般不考虑各结点的值如何。 (√)2. 抽象数据类型与计算机部表示和实现无关。 (×)3. 线性表采用链式存储结构时,结点和结点部的存储空间可以是不连续的。 (×)4. 链表的每个结点中都恰好包含一个指针。 (×)5.链表的删除算法很简单,因为当删除链中某个结点后,计算机会自动地将后续的各个单元向前移动。(×)6. 线性表的每个结点只能是一个简单类型,而链表的每个结点可以是一个复杂类型。 (×)7. 顺序表结构适宜于进行顺序存取,而链表适宜于进行随机存取。 (×)8. 线性表在物理存储空间中也一定是连续的。 (×)9. 顺序存储方式只能用于存储线性结构。 (√)10.栈是一种对所有插入、删除操作限于在表的一端进行的线性表,是一种后进先出型结构。 (√)11.对于不同的使用者,一个表结构既可以是栈,也可以是队列,也可以是线性表。 (√)12.栈是一种对所有插入、删除操作限于在表的一端进行的线性表,是一种后进先出型结构。 (√)13.两个栈共享一片连续存空间时,为提高存利用率,减少溢出机会,应把两个栈的栈底分别设在这片存空间的两端。 (×)14.二叉树的度为2。 (√)15.若二叉树用二叉链表作存贮结构,则在n个结点的二叉树链表中只有n—1个非空指针域。 (×)16.二叉树中每个结点的两棵子树的高度差等于1。 (√)17.用二叉链表法存储包含n个结点的二叉树,结点的2n个指针区域中有n+1个为空指针。 (√)18.具有12个结点的完全二叉树有5个度为2的结点。 (√)19.二叉树的前序遍历序列中,任意一个结点均处在其孩子结点的前面。 (×)20.在冒泡法排序中,关键值较小的元素总是向前移动,关键值较大的元素总是向后移动。 (×)21.计算机处理的对象可以分为数据和非数据两大类。[计算机处理的对象都是数据] (×)22.数据的逻辑结构与各数据元素在计算机中如何存储有关。 (×)23.算法必须用程序语言来书写。 (×)24.判断某个算法是否容易阅读是算法分析的任务之一。 (×)25.顺序表是一种有序的线性表。[任何数据结构才用顺序存储都叫顺序表] (√)26.分配给顺序表的存单元地址必须是连续的。 (√)27.栈和队列具有相同的逻辑特性。[它们的逻辑结构都是线性表] (√)28.树形结构中每个结点至多有一个前驱。 (×)29.在树形结构中,处于同一层上的各结点之间都存在兄弟关系。 (×)30.如果表示图的邻接矩阵是对称矩阵,则该图一定是无向图。 (×)31.如果表示图的邻接矩阵是对称矩阵,则该图一定是有向图。 (×)32.顺序查找方法只能在顺序存储结构上进行。 (×)33.折半查找可以在有序的双向链表上进行。

数据结构与算法第1章参考答案

习题参考答案 一.选择题 1.从逻辑上可以把数据结构分为(C)两大类。 A.动态结构、静态结构 B.顺序结构、链式结构 C.线性结构、非线性结构 D.初等结构、构造型结构 2.在下面的程序段中,对x的斌值语句的频度为(C)。 for( t=1;k<=n;k++) for(j=1;j<=n; j++) x=x十1; A. O(2n) B. O (n) C. O (n2). D. O(1og2n) 3.采用链式存储结构表示数据时,相邻的数据元素的存储地址(C)。 A.一定连续B.一定不连续 C.不一定连续 D.部分连续,部分不连续 4.下面关于算法说法正确的是(D)。 A.算法的时间复杂度一般与算法的空间复杂度成正比 B.解决某问题的算法可能有多种,但肯定采用相同的数据结构 C.算法的可行性是指算法的指令不能有二义性 D.同一个算法,实现语言的级别越高,执行效率就越低 5.在发生非法操作时,算法能够作出适当处理的特性称为(B)。 A.正确性 B.健壮性 C.可读性 D.可移植性 二、判断题 1.数据的逻辑结构是指数据的各数据项之间的逻辑关系。(√) 2.顺序存储方式的优点是存储密度大,且插人、删除运算效率高。(×) 3.数据的逻辑结构说明数据元素之间的次序关系,它依赖于数据的存储结构。(×) 4.算法的优劣与描述算法的语言无关,但与所用计算机的性能有关。(×) 5.算法必须有输出,但可以没有输人。(√) 三、筒答题 1.常见的逻辑结构有哪几种,各自的特点是什么?常用的存储结构有哪几种,各自的特点是什么? 【答】常见的四种逻辑结构: ①集合结构:数据元素之间是“属于同一个集合” ②线性结构:数据元素之间存在着一对一的关系 ③树结构:数据元素之间存在着一对多的关系 ④结构:数据元素之间存在着多对多的关系。 常见的四种存储结构有: ①顺序存储:把逻辑上相邻的元素存储在物理位置相邻的存储单元中。顺序存储结构是一种最基本的存储表示方法,通常借助于程序设计语言中的数组来实现。 ②链接存储:对逻辑上相邻的元素不要求物理位置相邻的存储单元,元素间的逻辑关系通过附设的指针域来表示。 ③索引存储:通过建立索引表存储结点信息的方法,其中索引表一般存储结点关键字和一个地点信息,可通过该地址找到结点的其他信息。 ④散列存储:根据结点的关键字直接计算出该结点的存储地址的方法。 2.简述算法和程序的区别。 【解答】一个算法若用程序设计语言来描述,则它就是一个程序。算法的含义与程序十分相

数据结构与算法分析习题与参考答案

大学 《数据结构与算法分析》课程 习题及参考答案 模拟试卷一 一、单选题(每题 2 分,共20分) 1.以下数据结构中哪一个是线性结构?( ) A. 有向图 B. 队列 C. 线索二叉树 D. B树 2.在一个单链表HL中,若要在当前由指针p指向的结点后面插入一个由q指向的结点, 则执行如下( )语句序列。 A. p=q; p->next=q; B. p->next=q; q->next=p; C. p->next=q->next; p=q; D. q->next=p->next; p->next=q; 3.以下哪一个不是队列的基本运算?() A. 在队列第i个元素之后插入一个元素 B. 从队头删除一个元素 C. 判断一个队列是否为空 D.读取队头元素的值 4.字符A、B、C依次进入一个栈,按出栈的先后顺序组成不同的字符串,至多可以组成( ) 个不同的字符串? A.14 B.5 C.6 D.8 5.由权值分别为3,8,6,2的叶子生成一棵哈夫曼树,它的带权路径长度为( )。 以下6-8题基于图1。 6.该二叉树结点的前序遍历的序列为( )。 A.E、G、F、A、C、D、B B.E、A、G、C、F、B、D C.E、A、C、B、D、G、F D.E、G、A、C、D、F、B 7.该二叉树结点的中序遍历的序列为( )。 A. A、B、C、D、E、G、F B. E、A、G、C、F、B、D C. E、A、C、B、D、G、F E.B、D、C、A、F、G、E 8.该二叉树的按层遍历的序列为( )。

A.E、G、F、A、C、D、B B. E、A、C、B、D、G、F C. E、A、G、C、F、B、D D. E、G、A、C、D、F、B 9.下面关于图的存储的叙述中正确的是( )。 A.用邻接表法存储图,占用的存储空间大小只与图中边数有关,而与结点个数无关 B.用邻接表法存储图,占用的存储空间大小与图中边数和结点个数都有关 C. 用邻接矩阵法存储图,占用的存储空间大小与图中结点个数和边数都有关 D.用邻接矩阵法存储图,占用的存储空间大小只与图中边数有关,而与结点个数无关 10.设有关键码序列(q,g,m,z,a,n,p,x,h),下面哪一个序列是从上述序列出发建 堆的结果?( ) A. a,g,h,m,n,p,q,x,z B. a,g,m,h,q,n,p,x,z C. g,m,q,a,n,p,x,h,z D. h,g,m,p,a,n,q,x,z 二、填空题(每空1分,共26分) 1.数据的物理结构被分为_________、________、__________和___________四种。 2.对于一个长度为n的顺序存储的线性表,在表头插入元素的时间复杂度为_________, 在表尾插入元素的时间复杂度为____________。 3.向一个由HS指向的链栈中插入一个结点时p时,需要执行的操作是________________; 删除一个结点时,需要执行的操作是______________________________(假设栈不空而 且无需回收被删除结点)。 4.对于一棵具有n个结点的二叉树,一个结点的编号为i(1≤i≤n),若它有左孩子则左 孩子结点的编号为________,若它有右孩子,则右孩子结点的编号为________,若它有 双亲,则双亲结点的编号为________。 5.当向一个大根堆插入一个具有最大值的元素时,需要逐层_________调整,直到被调整 到____________位置为止。 6.以二分查找方法从长度为10的有序表中查找一个元素时,平均查找长度为________。 7.表示图的三种常用的存储结构为_____________、____________和_______________。 8.对于线性表(70,34,55,23,65,41,20)进行散列存储时,若选用H(K)=K %7 作为散列函数,则散列地址为0的元素有________个,散列地址为6的有_______个。 9.在归并排序中,进行每趟归并的时间复杂度为______,整个排序过程的时间复杂度为 ____________,空间复杂度为___________。 10.在一棵m阶B_树上,每个非树根结点的关键字数目最少为________个,最多为________ 个,其子树数目最少为________,最多为________。 三、运算题(每题 6 分,共24分) 1.写出下列中缀表达式的后缀形式: (1)3X/(Y-2)+1 (2)2+X*(Y+3) 2.试对图2中的二叉树画出其: (1)顺序存储表示的示意图; (2)二叉链表存储表示的示意图。 3.判断以下序列是否是小根堆? 如果不是, 将它调 图2 整为小根堆。 (1){ 12, 70, 33, 65, 24, 56, 48, 92, 86, 33 } (2){ 05, 23, 20, 28, 40, 38, 29, 61, 35, 76, 47, 100 } 4.已知一个图的顶点集V和边集E分别为: V={1,2,3,4,5,6,7};

数据结构算法面试100题

数据结构+算法面试100题~~~摘自CSDN,作者July 1.把二元查找树转变成排序的双向链表(树) 题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。 要求不能创建任何新的结点,只调整指针的指向。 10 / / 6 14 / / / / 4 8 12 16 转换成双向链表 4=6=8=10=12=14=16。 首先我们定义的二元查找树节点的数据结构如下: struct BSTreeNode { int m_nValue; // value of node BSTreeNode *m_pLeft; // left child of node BSTreeNode *m_pRight; // right child of node }; 2.设计包含min函数的栈(栈) 定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。 要求函数min、push以及pop的时间复杂度都是O(1)。 参见C:\Users\Administrator\Desktop\demo\Stack 分析:min时间复杂度要达到O(1),需要我们在栈中存储最小元素 3.求子数组的最大和(数组) 题目: 输入一个整形数组,数组里有正数也有负数。 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。 例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,因此输出为该子数组的和18。 分析:根据dp思想 #include #define N 8 int main() { int i, a[N] = {1, -2, 3, 10, -4, 7, 2, -5}; int from[N], result[N], max;

全国计算机二级考试 数据结构与算法

全国计算机二级考试 第一章数据结构与算法 1.一个算法一般都可以用_____、_____ 、 _____三种控制结构组合完成。 [解析]顺序、选择(分支)、循环(重复) 一个算法通常由两种基本要素组成:一是对数据对象的运算和操作,二是________。 [解析]算法的控制结构 在一般的计算机系统中,有算术运算、逻辑运算、关系运算和________四类基本的操作和运算。 [解析]数据传输 2.常用于解决“是否存在”或“有多少种可能”等类型的问题(例如求解不定方程的问题)的算法涉及基本方法是() A.列举法 B.归纳法 C.递归法 D.减半递推法 [解析]列举就是列举出所有可能性,将所有可能性统统列举出来,然后解决问题的方法。所以A 3.根据提出的问题,列举所有可能的情况,并用问题中给定的条件检验哪些是需要的,哪些是不需要的,这是算法设计基本方法中的____。 [解析]列举法

4.通过列举少量的特殊情况,经过分析,最后找出一般的关系的算法设计思想是() A.列举法 B.归纳法 C.递归法 D.减半递推法 [解析]B 5.在用二分法求解方程在一个闭区间的实根时,采用的算法设计技术是() A.列举法 B.归纳法 C.递归法 D.减半递推法 [解析]二分法就是从一半处比较,减半递推技术也称分治法,将问题减半。所以D 6.将一个复杂的问题归结为若干个简单的问题,然后将这些较简单的问题再归结为更简单的问题,这个过程可以一直做下去,直到最简单的问题为止,这是算法设计基本方法中的___。如果一个算法P显式地调用自己则称为___。如果算法P调用另一个算法Q,而算法Q又调用算法P,则称为_____. [解析]递归法直接递归间接递归调用 7.算法中各操作之间的执行顺序称为_____。描述算法的工具通常有_____、_____ 、 _____。 [解析]控制结构传统流程图、N-S结构化流程图、算法描述语言 8.从已知的初始条件出发,逐步推出所要求的各中间结果和最后结果,这

数据结构与算法试题

数据结构与算法试题 一、单选题 1、在数据结构的讨论中把数据结构从逻辑上分为 (C ) A 内部结构与外部结构 B 静态结构与动态结构 C 线性结构与非线性结构 D 紧凑结构与非紧凑结构。 2、采用线性链表表示一个向量时,要求占用的存储空间地址(D ) A 必须就是连续的 B 部分地址必须就是连续的 C 一定就是不连续的 D 可连续可不连续 3、采用顺序搜索方法查找长度为n的顺序表时,搜索成功的平均搜索长度为( D )。 A n B n/2 C (n-1)/2 D (n+1)/2 4、在一个单链表中,若q结点就是p结点的前驱结点,若在q与p之间插入结点s,则执行( D )。 A s→link = p→link;p→link = s; B p→link = s; s→link = q; C p→link = s→link;s→link = p; D q→link = s;s→link = p; 5、如果想在4092个数据中只需要选择其中最小的5个,采用( C )方法最好。 A 起泡排序 B 堆排序 C 锦标赛排序 D 快速排序 6、设有两个串t与p,求p在t中首次出现的位置的运算叫做( B )。 A 求子串 B 模式匹配 C 串替换 D 串连接 7、在数组A中,每一个数组元素A[i][j]占用3个存储字,行下标i从1到8,列下标j从1到10。所有数组元素相继存放于一个连续的存储空间中,则存放该数

组至少需要的存储字数就是( C )。 A 80 B 100 C 240 D 270 8、将一个递归算法改为对应的非递归算法时,通常需要使用( A )。 A 栈 B 队列 C 循环队列 D 优先队列 9、一个队列的进队列顺序就是1, 2, 3, 4,则出队列顺序为( C )。 10、在循环队列中用数组A[0、、m-1] 存放队列元素,其队头与队尾指针分别为front与rear,则当前队列中的元素个数就是( D )。 A ( front - rear + 1) % m B ( rear - front + 1) % m C ( front - rear + m) % m D ( rear - front + m) % m 11、一个数组元素a[i]与( A )的表示等价。 A *(a+i) B a+i C *a+i D &a+i 12、若需要利用形参直接访问实参,则应把形参变量说明为( B )参数。 A 指针 B 引用 C 值 D 变量 13、下面程序段的时间复杂度为( C ) for (int i=0;i

典型数据结构面试题

数据结构 1?在一个单链表中p所指结点之前插入一个s (值为e)所指结点时,可执行如下操作: q=head; while (q->next!=p)q=q->next; s= newNode;s->data=e; q->next=;// 填空 s->next=;// 填空 2.线性表的顺序存储结构是一种的存储结构,而链式存储结构是一种___的 存储结构。 A.随机存取 B.索引存取 C.顺序存取 D.散列存取 3.线性表若采用链式存储结构时,要求内存中可用存储单元的地址___。 A.必须是连续的 B.部分地址必须是连续的 C.一定是不连续的 D.连续或不连续都可以 4?在一个单链表中,已知q所指结点是p所指结点的前驱结点,若在q和p 之间插入s结点,则执行_。 A.s->next=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 所指结点不是最后结点,在p 之后插入s 所指结点,则执行__。 A.s->next=p;p->next=s; B.s->next=p->next;p->next=s; C.s->next=p->next;p=s; C. p->next=s;s->next=p; 6.在一个单链表中,若删除p 所指结点的后续结点,则执行__。 A.p->next= p->next->next; B.p= p->next;p->next= p->next->nex;t C.p->next= p->next; D.p= p->next->next; 7.链表不具备的特点是__。 A 可随机访问任何一个元素 B 插入、删除操作不需要移动元素 C无需事先估计存储空间大小D所需存储空间与线性表长度成正比 8.以下关于线性表的说法不正确的是。 A 线性表中的数据元素可以是数字、字符、记录等不同类型。 B 线性表中包含的数据元素个数不是任意的。 C 线性表中的每个结点都有且只有一个直接前趋和直接后继。 D 存在这样的线性表:表中各结点都没有直接前趋和直接后继。 9?在一个长度为n的顺序表中删除第i个元素,要移动个元素。如果要在第 i 个元素前插入一个元素,要后移()个元素。N-I N-I+1

相关文档
最新文档