21 32 42c语言,数据结构(c语言版)课后习题标准答案完整版(21页)-原创力文档

数据结构(c语言版)课后习题标 准答案完整版

PAGE

PAGE #

作者:

日期:

第1章绪论

选择题:CCBDCA

试分析下面各程序段的时间复杂度。

O( 1)

O( m*n)

O(n2)

O (log 3n)

因为x++共执行了 n-1+ n-2++ 1= n(n-1)/2,所以执行时间为 O ( n2)

0(」)

第2章线性表

1?选择题

babadbcabdcddac

2?算法设计题

设计一个算法,通过一趟遍历在单链表中确定值最大的结点。

ElemType Max (Li nkList L ){

if(L->n ext==NULL) return NULL;

pmax=L-> next; //假定第一个结点中数据具有最大值

p=L->n ext->n ext;

while(p != NULL ){//如果下一个结点存在

if(p->data > pmax->data) pmax=p; p=p->n ext;

} return pmax->data;

设计一个算法,通过遍历一趟,将链表中所有结点的链接方向逆转,仍利用原表 的存储空间。

void in verse(L in kList &L) {

//逆置带头结点的单链表L

p=L->n ext; L->n ext=NULL;

while ( p) {

q=p->next; // q指向*p的后继

p->n ext=L->n ext;

L-> next=p; // *p插入在头结点之后

p = q;

(10)已知长度为n的线性表A采用顺序存储结构,请写一时间复杂度为 0(n)、空间 复杂度为0(1)的算法,该算法删除线性表中所有值为item的数据元素。

[题目分析]在顺序存储的线性表上删除元素,通常要涉及到一系列元素的移动(删第

i个元素,第i+1至第n个元素要依次前移)。本题要求删除线性表中所有值为 item的数据 元素,并未要求元素间的相对位置不变。因此可以考虑设头尾两个指针(i=1,j=n),从两

端向中间移动,凡遇到值item的数据元素时,直接将右端元素左移至值为 item的数据元素

void Delete (ElemType A[ ], int n )

// A是有n个元素的一维数组,本算法删除A中所有值为item的元素。

{i=1 ; j=n ;//设置数组低、高端指针(下标) 。

while (i

{ while (i

if (i

if (i

}

[算法讨论]因元素只扫描一趟,算法时间复杂度为0 (n)。删除元素未使用其它辅助

空间,最后线性表中的元素个数是j。

第3章栈和队列

1 ?选择题

CCDAADABCDDDBCB

2.算法设计题

(2)回文是指正读反读均相同的字符序列,如“ abba"和“ abdba"均是回文,但“good”

不是回文。试写一个算法判定给定的字符向量是否为回文。(提示:将一半字符入栈)

根据提示,算法可设计为:

//以下为顺序栈的存储结构定义

#define StackSize 100 //假定预分配的栈空间最多为100个元素

typedef char DataType;//假定栈元素的数据类型为字符

typedef struct{

DataType data[StackSize];

int top;

}SeqStack;

int lsHuiwen( char *t)

{//判断t字符向量是否为回文,若是,返回1,否则返回0

SeqStack s;

int i , len;

char temp;

lnitStack( &s);

len=strlen(t); //求向量长度

for ( i=0; i

Push( &s, t[i]);

while( !EmptyStack( &s))

{//每弹岀一个字符与相应字符比较

temp=Pop (&s);

if( temp!=S[i])return 0 ;//不等则返回 0

else i++;

}

return 1 ; //比较完毕均相等则返回1

}

(7)假设以数组 Q[m]存放循环队列中的元素,同时设置一个标志tag,以tag == 0和 tag == 1来区别在队头指针(front)和队尾指针(rear)相等时,队列状态为 空”还是 满”试编 写与此结构相应的插入(enqueue)和删除(dlqueue)算法。

【解答】

循环队列类定义

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第1章 绪论 一、基本内容 数据、数据元素、数据对象、数据结构、存储结构和数据类型等概念术语的确定含义;抽象数据类型的定义、表示和实现方法;描述算法的类C语言;算法设计的基本要求以及从时间和空间角度分析算法的方法。 二、学习要点 1.熟悉各名词、术语的含义,掌握基本概念,特别是数据的逻辑结构和存储结构之间的关系。分清哪些是逻辑结构的性质,哪些是存储结构的性质。 2.了解抽象数据类型的定义、表示和实现方法。 3.熟悉类C语言的书写规范,特别要注意值调用和引用调用的区别,输入、输出的方式以及错误处理方式。 4.理解算法五个要素的确切含义:①动态有穷性(能执行结束);②确定性(对于相同的输入执行相同的路径);③有输入;④有输出;⑤可行性(用以描述算法的操作都是足够基本的)。 5.掌握计算语句频度和估算算法时间复杂度的方法。 三、基础知识 1.1 简述下列术语:数据、数据元素、数据对象、数据结构、存储结构、数据类型和抽象数据类型。 答:数据是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。 数据元素是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。 数据对象是性质相同的数据元素的集合,是数据的一个子集。 数据结构是相互之间存在一种或多种特定关系的数据元素的集合。 存储结构是数据结构在计算机中的表示(又称映像)。 数据类型是一个值的集合和定义在这个值集上的一组操作的总称。 抽象数据类型是指一个数学模型以及定义在该模型上的一组操作。 1.2 试描述数据结构和抽象数据类型的概念与程序设计语言中数据类型概念的区别。 答:简单地说,数据结构定义了一组按某些关系结合在一起的数组元素。数据类型不仅定义了一组带结构的数据元素,而且还在其上定义了一组操作。程序设计语言中的数据类型是一个值的集合和定义在这个值集上的一组操作的总称。而抽象数据类型是指一个数学模型以及定义在该模型上的一组操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值