数据结构习题有答案Word文档下载推荐.docx

上传人:b****3 文档编号:13863316 上传时间:2022-10-14 格式:DOCX 页数:21 大小:82.38KB
下载 相关 举报
数据结构习题有答案Word文档下载推荐.docx_第1页
第1页 / 共21页
数据结构习题有答案Word文档下载推荐.docx_第2页
第2页 / 共21页
数据结构习题有答案Word文档下载推荐.docx_第3页
第3页 / 共21页
数据结构习题有答案Word文档下载推荐.docx_第4页
第4页 / 共21页
数据结构习题有答案Word文档下载推荐.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

数据结构习题有答案Word文档下载推荐.docx

《数据结构习题有答案Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据结构习题有答案Word文档下载推荐.docx(21页珍藏版)》请在冰豆网上搜索。

数据结构习题有答案Word文档下载推荐.docx

k<

=n;

k++)

c[i][j]=c[i][j]+a[i][k]*b[k][j]

解:

(1)n-1

(2)

(3)x=0;

y=0;

for(int i=1;

i〈=n;

i++)

for(int j=1;

j〈=i;

j++)

for(intk=1;

k〈=j;

k++)

x=x+y;

(3) 

3 指出下列个算法的功能,并求其时间复杂度.

(1) int sum1(intn)

int p=1,s=0;

for (inti=1;

i<

=n;

i++)

{ p*=i;

s+=p;

returns;

}

(2) intsum2(intn)

{ints=0;

for ( inti=1;

i<=n;

 i++)

{ intp=1;

for (intj=1;

j<

=i;

j++)p*=j;

s+=p;

returns;

(1), T(n)=O(n)

(2), T(n)=O(n2)

4算法设计

有3枚硬币,其中有1枚是假的,伪币与真币重量略有不同。

如何借用一架天平,找出伪币?

以流程图表示算法.

上机练习题

要求:

给出问题分析、算法描述、源程序及运行截图,在线提交。

1.设a,b,c为3个整数,求其中位于中间值的整数。

第2章线性表

设计算法:

在顺序表中删除值为e的元素,删除成功,返回1;

否则,返回0。

intSqlist〈T>

:

DeleteElem(T e )

{ for(i=1;

=length;

i++)// 按值顺序查找   *i可从0开始

 if(elem[i-1]==e)  // 找到,进行删除操作

  { for(j=i;

 j<length;

j++)//ai至an依次前移

  Elem[j—1]=elem[j];

   

   length--;

   //表长减一

   return1;

    //删除成功,返回1

 }

    return0;

// 未找到,删除不成功,返回 0

2.分析顺序表中元素定位算法intSqList〈T>

Locate(T e ) 的时间复杂度。

解:

设表长为n,等概率下,每个元素被定位的概率为:

p=1/n

定位成功第i个元素,需比较i次

3.对于有头结点的单链表,分别写出定位成功时,实现下列定位语句序列。

(1)定位到第i个结点ai;

p=head;

 j=0;

while (p&

&j<i){ p=p->

next;

 j++;

(2) 定位到第i个结点的前驱ai-1;

p=head;

 j=0;

while(p &&j<i-1){p=p->

next;

j++;

(3) 定位到尾结点;

p=head;

while (p->

next)p=p—>

next;

 

(4) 定位到尾结点的前驱。

p=head;

while(p—>

next—>next ) p=p—>next;

4.描述一下三个概念的区别:

头指针,头结点,首元结点。

并给予图示。

头指针:

是一个指针变量,里面存储的是链表中首结点的地址,并以此来标识一个链表。

头结点:

附加在第一个元素结点之前的一个结点,头指针指向头结点。

首元结点:

指链表中的第一个元素结点.

5。

对于无头结点单链表,给出删除第i个结点的算法描述.

 template 〈calssT〉

TLinkList<T>

Delete(inti)

template〈calssT〉

TLinkList〈T>

Delete(inti) {// 在单链表上删除第i个数据元素

  if (head==NULL)throw“表空!

”;

 //  空表,不能删

 else if( i==1) { //删除第1个元素

  p=Head;

x=p-〉data;

//保存被删元素值

Head= p-〉next;

deletep ;

 }

 else{// 元素定位到第ai-1

  p=Head;

 j=1 ;

 //定位查找起始位置

    while{p->

next&&j<i-1 }{

    p=p—>

next;

j++ ;

}

 if(!

p->next|| j>

i-1);

 //定位失败

 throw “删除位置不合理”;

else { // 定位成功,进行结点删除

    q=p->

next;

  x=p>data;

   p->next=q->

next;

delete q;

 }

   retrun x;

 //返回被删除元素值

 }//#

6. 用教材定义的顺序表的基本操作实现下列操作:

template<

calss T>

int DeleteElem(SqListL,Te)

#include“SqList。

h“

template<

calssT>

  intDeleteElem(SqListL,Te){//

 i = L。

LocateElem(e);

//按值查找

   if(!

i) //未找到

return0;

  else  //找到

 delete (i) ;

//删除被找到的元素

7.已知L是有表头结点的单链表,且P结点既不是首元结点,也不是尾结点,试写出实现下列功能的语句序列。

(1) 在P结点后插入S结点;

(2)在P结点前插入S结点;

(3)在表首插入S结点;

(4)在表尾插入S结点.

【解】

(1)s->

next=p—>

next;

p—〉next=s;

(2)q=L;

while( q—〉next!

=p)q=q->

next;

s-〉next=p 或q->next;

q—>next=s;

(3)s->next=L->

 L->

next=s;

(3)q=L;

while( q—>next!

=NULL) q=q—〉next;

s—〉next= q->

next;

q—>

next=s;

编程实现:

删除单链表中值为e的元素。

第3章栈与队列

1.铁路进行列车调度时,常把站台设计成栈式结构的站台,如右图所示。

试问:

若进站的六辆列车顺序如上所述, 那么是否能够得到325641和154623的出站序列,如果不能, 说明为什么不能;

 如果能,说明如何得到(即写出"进栈"

或”出栈"的序列).

325641可以

   154623不可以。

2.简述以下算法的功能(栈的元素类型为int )。

(1) statusalgo_1(SqStackS){

 int i,n,A[255];

  n=0;

  while (!

S。

StackEmpty()){n++;

A[n]=S.Pop();

 }

   for(i=1;

=n;

i++) S.Push(A[i]);

  }

(2)statusalgo_2(SqStackS, int e) {

 SqStack T;

intd;

  while(!

S.tackEmpty()){

  d=S。

Pop();

  if(d!

=e)T.Push(d);

} 

  while(!

T.StackEmpty()){

   d=T。

Pop();

    T。

Push(d);

  }

 

(1) 借助一个数组,将栈中的元素逆置。

(2)借助栈T,将栈S中所有值为e的数据元素删除之.

3.编写一个算法,将一个非负的十进制整数N转换为B进制数,并输出转换后的结果.当N=248D,B分别为8和16时,转换后的结果为多少?

#include“stack。

h”

intNumTrans( intN, int B)  {//十进制整数N转换为B进制数

stack<int〉S;

//建立一个栈

while(N!

=0){// N非零

i=N%B;

//从低到高,依次求得各位

  N=N/B;

S.push(i);

 }//各位入栈

while(!

S.StackEmpty()) {// 栈不空

{i=S.pop();

If (i〉9)i=’A'

+10-i;

 cout〈<

 S.pop();

}// 依次出栈,得到从高到低的输出结果

}//#

4借且栈,设计算法:

假设一个算术表达式中包含“("

、“)”括号,对一个合法的数学表达式来说,括号“(”和“)"

应是相互匹配的。

若匹配,返回1;

否则,返回0.

以字符串存储表达式,也可以边输入边判断。

顺序扫描表达式,左括号,入栈;

右括号,如果此时栈空,表示多右括号,不匹配;

如果栈不空,出栈一个左括号。

扫描结束,如果栈空,表示括号匹配;

否则,括号不匹配,多左括号。

intblank_match(char *exp){用字符串存表达式

 SqStack〈char>

s;

 //创建一个栈

 char *p=exp;

 //工作指针p指向表达式首

 while(*p!

=’=’){ //不是表达式结束符

switch(p){

case ’(’:

 //左括号,入栈

 s.push(ch);

 break;

case’)'

//右括号

 if (s.StackEmpty())return0;

 // 栈空,不匹配,多右括号

    else {s.Pop();

break;

}// 左括号出栈

 }//switch

  p++;

//取表达式下一个字符

 }//while

if(!

s.StackEmpty())//表达式结束,栈不空

  return0;

 //不匹配

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 其它课程

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1