数据结构课后习题标准答案(第二版)
《数据结构》课后习题答案(第2版)

《数据结构》课后习题答案(第2版)数据结构课后习题答案(第2版)第一章:基本概念1. 什么是数据结构?数据结构是指数据元素之间的关系,以及相应的操作。
它研究如何组织、存储和管理数据,以及如何进行高效的数据操作。
2. 数据结构的分类有哪些?数据结构可以分为线性结构和非线性结构。
线性结构包括数组、链表、栈和队列;非线性结构包括树和图。
3. 什么是算法?算法是解决特定问题的一系列有序步骤。
它描述了如何输入数据、处理数据,并产生期望的输出结果。
4. 算法的特性有哪些?算法具有确定性、有限性、输入、输出和可行性这五个特性。
5. 数据结构和算法之间的关系是什么?数据结构是算法的基础,算法操作的对象是数据结构。
第二章:线性表1. 顺序表的两种实现方式是什么?顺序表可以通过静态分配或动态分配的方式实现。
静态分配使用数组,动态分配使用指针和动态内存分配。
2. 单链表的特点是什么?单链表由节点组成,每个节点包含数据和一个指向下一个节点的指针。
它的插入和删除操作效率高,但是查找效率较低。
3. 循环链表和双向链表分别是什么?循环链表是一种特殊的单链表,在尾节点的指针指向头节点。
双向链表每个节点都有一个指向前一个节点和后一个节点的指针。
4. 链表和顺序表的区别是什么?链表的插入和删除操作效率更高,但是查找操作效率较低;顺序表的插入和删除操作效率较低,但是查找操作效率较高。
第三章:栈和队列1. 栈是什么?栈是一种特殊的线性表,只能在表的一端进行插入和删除操作。
后进先出(LIFO)是栈的特点。
2. 队列是什么?队列是一种特殊的线性表,只能在表的一端进行插入操作,在另一端进行删除操作。
先进先出(FIFO)是队列的特点。
3. 栈和队列的应用有哪些?栈和队列在计算机科学中有广泛的应用,例如浏览器的前进后退功能使用了栈,操作系统的进程调度使用了队列。
4. 栈和队列有哪些实现方式?栈和队列可以使用数组或链表来实现,还有更为复杂的如双端队列和优先队列。
《数据结构》第二版严蔚敏课后习题作业参考答案(1-7章)

第1章4.答案:(1)顺序存储结构顺序存储结构是借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系,通常借助程序设计语言的数组类型来描述。
(2)链式存储结构顺序存储结构要求所有的元素依次存放在一片连续的存储空间中,而链式存储结构,无需占用一整块存储空间。
但为了表示结点之间的关系,需要给每个结点附加指针字段,用于存放后继元素的存储地址。
所以链式存储结构通常借助于程序设计语言的指针类型来描述。
5. 选择题(1)~(6):CCBDDA6.(1)O(1) (2)O(m*n) (3)O(n2)(4)O(log3n) (5)O(n2) (6)O(n)第2章1.选择题(1)~(5):BABAD (6)~(10):BCABD (11)~(15):CDDAC 2.算法设计题(1)将两个递增的有序链表合并为一个递增的有序链表。
要求结果链表仍使用原来两个链表的存储空间, 不另外占用其它的存储空间。
表中不允许有重复的数据。
[题目分析]合并后的新表使用头指针Lc指向,pa和pb分别是链表La和Lb的工作指针,初始化为相应链表的第一个结点,从第一个结点开始进行比较,当两个链表La和Lb均为到达表尾结点时,依次摘取其中较小者重新链接在Lc表的最后。
如果两个表中的元素相等,只摘取La表中的元素,删除Lb表中的元素,这样确保合并后表中无重复的元素。
当一个表到达表尾结点,为空时,将非空表的剩余元素直接链接在Lc表的最后。
void MergeList(LinkList &La,LinkList &Lb,LinkList &Lc){//合并链表La和Lb,合并后的新表使用头指针Lc指向pa=La->next; pb=Lb->next;//pa和pb分别是链表La和Lb的工作指针,初始化为相应链表的第一个结点Lc=pc=La; //用La的头结点作为Lc的头结点while(pa && pb){ if(pa->data<pb->data){pc->next=pa; pc=pa; pa=pa->next;}//取较小者La中的元素,将pa链接在pc的后面,pa指针后移else if(pa->data>pb->data) {pc->next=pb; pc=pb; pb=pb->next;}//取较小者Lb中的元素,将pb链接在pc的后面,pb指针后移else //相等时取La中的元素,删除Lb中的元素{pc->next=pa;pc=pa;pa=pa->next;q=pb->next; delete pb ; pb =q;}}pc->next=pa?pa:pb; //插入剩余段delete Lb; //释放Lb的头结点}(5)设计算法将一个带头结点的单链表A分解为两个具有相同结构的链表B、C,其中B表的结点为A表中值小于零的结点,而C表的结点为A表中值大于零的结点(链表A中的元素为非零整数,要求B、C表利用A表的结点)。
数据结构(第二版)习题答案

有先进先出,后进后出的特点。
2.3设计一个算法,求顺序表中值为
x的结点的个数。
【答】:顺序表的存储结构定义如下(文件名
seqlist.h):
#include <stdio.h>
#define N 100 /*预定义最大的数据域空间
E.n/2 F.(n + 1)/2 G.(n . 2)/2
(2)设栈 S和队列 Q的初始状态为空,元素 e1、e2、e3、e4、e5和 e6依次通过栈 S,
一个元素出栈后即进入队列 Q,若 6个元素出队的序列为 e2、e4、e3、e6、e5和 e1,则栈 S
的容量至少应该为( C )。
A.6 B.4 C.3 D.2
(9)顺序循环队列中(数组的大小为 n),队头指示 front指向队列的第 1个元素,队尾
指示 rear指向队列最后元素的后 1个位置,则循环队列中存放了 n .1个元素,即循环队列满
的条件为( B )。
A.(rear + 1)%n = front . 1 B.(rear + 1)%n = front
1)有穷性(
2)确定性(
3)0个或多个输入(4)1个或多个输出(
5)可
行性等特征。程序是算法的一种描述方式,通过程序可以在计算机上实现算法。
1.7抽象数据类型的是什么?它有什么特点?
【答】:抽象数据类型是数据类型的进一步抽象,是大家熟知的基本数据类型的延伸和发展。
抽象数据类型是与表示无关的数据类型,是一个数据模型及定义在该模型上的一组运算。对一
个抽象数据类型进行定义时,必须给出它的名字及各运算的运算符名,即函数名,并且规定这
数据结构(C语言版)(第2版)课后习题答案

数据结构(C语言版)(第2版)课后习题答案李冬梅2015.3目录第1章绪论 (1)第2章线性表 (5)第3章栈和队列 (13)第4章串、数组和广义表 (26)第5章树和二叉树 (33)第6章图 (42)第7章查找 (54)第8章排序 (65)第1章绪论1.简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。
答案:数据:是客观事物的符号表示,指所有能输入到计算机中并被计算机程序处理的符号的总称。
如数学计算中用到的整数和实数,文本编辑所用到的字符串,多媒体程序处理的图形、图像、声音、动画等通过特殊编码定义后的数据。
数据元素:是数据的基本单位,在计算机中通常作为一个整体进行考虑和处理。
在有些情况下,数据元素也称为元素、结点、记录等。
数据元素用于完整地描述一个对象,如一个学生记录,树中棋盘的一个格局(状态)、图中的一个顶点等。
数据项:是组成数据元素的、有独立含义的、不可分割的最小单位。
例如,学生基本信息表中的学号、姓名、性别等都是数据项。
数据对象:是性质相同的数据元素的集合,是数据的一个子集。
例如:整数数据对象是集合N={0,±1,±2,…},字母字符数据对象是集合C={‘A’,‘B’,…,‘Z’,‘a’,‘b’,…,‘z’},学生基本信息表也可是一个数据对象。
数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。
换句话说,数据结构是带“结构”的数据元素的集合,“结构”就是指数据元素之间存在的关系。
逻辑结构:从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的。
因此,数据的逻辑结构可以看作是从具体问题抽象出来的数学模型。
存储结构:数据对象在计算机中的存储表示,也称为物理结构。
抽象数据类型:由用户定义的,表示应用问题的数学模型,以及定义在这个模型上的一组操作的总称。
具体包括三部分:数据对象、数据对象上关系的集合和对数据对象的基本操作的集合。
《数据结构》课后习题答案(第2版)

1 填空题(1)数据元素(2)数据项数据元素(3)集合线性结构树结构图结构(4)顺序存储链接存储数据元素数据元素之间的关系(5)零或多个输入一个或多个输出有穷性确定性可行性(6)自然语言程序设计语言流程图伪代码,伪代码(7)问题规模(8)O(1) O(nlog2n)2 选择题(1)C D (2)B (3) B (4) A (5) D (6)A (7) C (8) C E3 判断题×××√×第二章1 填空题(1)表长一半表长位置(2)108(3)p->next=(p->next)->next;(4)运算方便(5)p->next=head;(6)s->next=rear->next rear->next=s; rear=s;q=rear->next->next; rear->next->next=q->next; delete q;(7)O(1) O(n)(8)循环单链表循环双链表双链表2 选择题(1) A B (2) D (3) B (4) A (5) A (6) D(7) B(8) B(9) C(10)B(11)B(12)D(13)A(14)A3 判断题×××××1 填空题(1)1003H(2)顺序栈和链栈top=-1或top==NULL top==数组长度或内存无可用空间(3)栈(4)abc+*d-(5)后进先出先进先出操作位置受限(6)假溢出(7)(rear-front+n)% n(8)O(1) O(n)2 选择题(1) C (2) D (3) C (4) B(5) B(6) B(7) D(8) A(9) C3 判断题×√√××第四章1 填空题(1)数据元素的类型是字符(2)长度相等且对应位置字符相等(3)存取修改顺序存储(4)1140(5)d+41(6)三元组顺序表十字链表2 选择题(1) B (2) D E K (3) B (4) C(5) D(6) C(7) D3 判断题×√√××1 填空题(1)有且仅有一个互不相交(2)度孩子双亲(3)2i-1(n+1)/2 (n-1)/2 (4)2h-1 2h-1(5)2k-1(6)50(7)12(8)CDBGFEA (9)2n n-1 n+1 (10)n n-12 选择题(1) D (2) D (3) B (4) C (5) B C (6) D(7) A(8) A B(9) D A(10)B(11)B(12)C(13)D(14)C3 判断题×√×√×第六章1 填空题(1)0 n(n-1)/2 0 n(n-1) (2)自身(3)邻接矩阵邻接表(4)O(n+e)(5)第j列所有元素之和(6)出度(7)前序栈层序队列(8)O(n2) O(elog2e) (9)回路(10)v i v j v k2 选择题(1) c (2) A G (3) C (4) B (5) D (6) C F(7) B(8) D(9) A(10)A(11)A(12)C(13)A(14)C C F(15)B3 判断题√√××××√×1 填空题(1)顺序存储和链接存储顺序存储按照关键码有序(2) 1 ,7(3)8,59/15(4) 4(5)62(6)开放定址法拉链法(7)散列查找(8)通过关键码计算记录的存储地址并进行一定的比较2 选择题(1) B (2) D B (3) A D (4) D (5) A(6) C(7) C(8) B(9) D(10)A(11)C(12)D3 判断题×××××第八章1 填空题(1)查找(2)正序n-1 反序n(n-1)/2 (3) 3(4) 3(5)O(nlog2n) O(n)(6)n-1(7)50(8)602 选择题(1) C (2) C (3) C (4) B (5) A (6) A(7) B C B(8) C(9) D(10)A D(11)B(12)D,B,E,A,C(13)C,A,D,B,B,D,F(14)C(15)D3 判断题×√××√。
数据结构-第二版--课后答案-(陈雁-著)-高等教育出版社

}
return C;
}
8
void Insertx_Linkst (LNode *H, Elemtp a, Elemtp b)
{
s=(LNode *) malloc (sizeof(LNode));
s->data=b;
s->next=NULL;
if(H==NULL)
{
H=s;
}
else
{
p=H;
L->elem[i]=x; /*插入x */
++L->len; /*表长加1 */
return 1;
}
int f(SqList *A,SqList*B)
{
SqList *As=NULL,*Bs=NULL;
int i=1,j,ms=0,ns=0;
k++;
j++;
i++;
}
else
if(A->elem[i].i<B->elem[j].i)
{/*若A当前项的行号小于B当前项的行号,则将A项放入C*/
C->elem[k].i=A->elem[i].i;
C->elem[k].j=A->elem[i].j;
C->elem[k].v=A->elem[i].v;
{
C->elem[k].i=B->elem[j].i;
C->elem[k].j=B->elem[j].j;
C->elem[k].v=B->elem[j].v;
k++;
j++;
}
数据结构第二版 主编殷人昆课后答案

2. 指出下列各算法的功能并求出其时间复杂度.
1) int Prime ( int n ) {
int i = 1 ;
int x = ( int ) sqrt ( n ) ; while ( ++ i <= x ) if ( n% i == 0) break ; if ( i > x ) return 1 ; else return 0 ; } 判断n是否是一个素数, 若是则返回1, 否则返回0, 时间 复杂度为
for ( int i = 1 ; i <= n ; i++ ) for ( int j = 1 ; j<= i ; j++ ) S; A n2 C n(n+1) B n2/2 D n(n+1)/2 3
6. 下面算法的时间复杂度为B O(n). int f ( unsigned int n ) { if ( n==0 || n==1 ) return 1 ; else return n*f ( n - 1 ) ; } A O(1) B O(n) C O(n2) D O(n!)
16
4)
int fun ( int n ) { int i = 1, s = 1 ; while ( s < n ) s += ++i ; return i ; }
求满足不等式1+2+3+...+i >= n的最小i值, 时间复杂 度为O(sqrt (n)) 17
5)
void UseFile (ifstream& inp, int c[10]) {
Quadratic InitQuadratic(float aa=0, float bb=0, float cc=0); Quadratic InitQuadratic( float aa, float bb, float cc ) { Quadratic q ; q.a = aa ; q.b = bb ; q.c = cc ; return q ; }
数据结构(C语言版)(第2版)课后习题答案

数据结构(C语言版)(第2版)课后习题答案数据结构(C语言版)(第2版)课后习题答案1. 简介数据结构是计算机科学领域中非常重要的一门学科,它研究的是数据的组织、存储和管理方式。
本文将针对《数据结构(C语言版)(第2版)》的课后习题提供答案,帮助读者更好地理解和应用数据结构。
2. 第一章: 绪论在第一章中,主要介绍了数据结构的基本概念、分类和基本操作。
以下是部分习题的答案:2.1 习题1习题描述:什么是数据结构?答案:数据结构是指数据对象中元素之间的关系,以及对这些关系进行操作的方法和技术的集合。
2.2 习题2习题描述:数据结构的分类有哪些?答案:数据结构可以分为线性结构和非线性结构。
线性结构包括线性表、栈、队列等;非线性结构包括树、图等。
3. 第二章: 线性表第二章介绍了线性表的定义、分类和实现。
以下是部分习题的答案:3.1 习题1习题描述:什么是线性表?答案:线性表是由n个数据元素a1, a2, ..., an组成的有限序列,其中元素之间存在着一一对应的关系。
3.2 习题2习题描述:线性表的分类有哪些?答案:线性表可以分为顺序表和链表。
顺序表是用一段地址连续的存储单元一次存储线性表的所有元素,而链表是采用链式存储结构,通过每个元素存储其后继元素的地址来实现元素之间的逻辑关系。
4. 第三章: 栈与队列第三章讲解了栈和队列的定义、特性和实现。
以下是部分习题的答案:4.1 习题1习题描述:栈和队列有什么区别?答案:栈是一种后进先出的线性表,只能在表尾进行插入和删除操作;队列是一种先进先出的线性表,只能在表的一端进行插入和删除操作。
4.2 习题2习题描述:栈的应用有哪些?答案:栈在计算机科学中有广泛的应用,如函数的调用和返回、括号匹配、表达式求值等。
5. 第四章: 串第四章讲解了串的定义、模式匹配和实现。
以下是部分习题的答案:5.1 习题1习题描述:什么是串?答案:串是由零个或多个字符组成的有限序列,串中的字符个数称为串的长度。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构课后习题答案(第二版)————————————————————————————————作者:————————————————————————————————日期:2数据结构(C 语言版)(第2 版)习题解析揭安全李云清杨庆红编著江西师范大学计算机信息工程学院联系方式:janquan@2009 年12 月2第1章绪论1.1 什么是数据结构?【答】:数据结构是指按一定的逻辑结构组成的一批数据,使用某种存储结构将这批数据存储于计算机中,并在这些数据上定义了一个运算集合。
1.2 数据结构涉及哪几个方面?【答】:数据结构涉及三个方面的内容,即数据的逻辑结构、数据的存储结构和数据的运算集合。
1.3 两个数据结构的逻辑结构和存储结构都相同,但是它们的运算集合中有一个运算的定义不一样,它们是否可以认作是同一个数据结构?为什么?【答】:不能,运算集合是数据结构的重要组成部分,不同的运算集合所确定的数据结构是不一样的,例如,栈与队列它们的逻辑结构与存储结构可以相同,但由于它们的运算集合不一样,所以它们是两种不同的数据结构。
1.4 线性结构的特点是什么?非线性结构的特点是什么?【答】:线性结构元素之间的关系是一对一的,在线性结构中只有一个开始结点和一个终端结点,其他的每一个结点有且仅有一个前驱和一个后继结点。
而非线性结构则没有这个特点,元素之间的关系可以是一对多的或多对多的。
1.5 数据结构的存储方式有哪几种?【答】:数据结构的存储方式有顺序存储、链式存储、散列存储和索引存储等四种方式。
1.6 算法有哪些特点?它和程序的主要区别是什么?【答】:算法具有(1)有穷性(2)确定性(3)0 个或多个输入(4)1 个或多个输出(5)行性等特征。
程序是算法的一种描述方式,通过程序可以在计算机上实现算法。
1.7 抽象数据类型的是什么?它有什么特点?【答】:抽象数据类型是数据类型的进一步抽象,是大家熟知的基本数据类型的延伸和发展。
抽象数据类型是与表示无关的数据类型,是一个数据模型及定义在该模型上的一组运算。
对一个抽象数据类型进行定义时,必须给出它的名字及各运算的运算符名,即函数名,并且规定这些函数的参数性质。
一旦定义了一个抽象数据类型及具体实现,程序设计中就可以像使用基本数据类型那样,十分方便地使用抽象数据类型。
抽象数据类型的设计者根据这些描述给出操作的具体实现,抽象数据类型的使用者依据这些描述使用抽象数据类型。
1.8 算法的时间复杂度指的是什么?如何表示?【答】:算法执行时间的度量不是采用算法执行的绝对时间来计算的,因为一个算法在不同的机器上执行所花的时间不一样,在不同时刻也会由于计算机资源占用情况的不同,使得算法在同一台计算机上执行的时间也不一样,另外,算法执行的时间还与输入数据的状态有关,所以对于算法的时间复杂性,采用算法执行过程中其基本操作的执行次数,称为计算量来度量。
算法中基本操作的执行次数一般是与问题规模有关的,对于结点个数为n 的数据处理问题,用T(n)表示算法基本操作的执行次数。
为了评价算法的执行效率,通常采用大写O 符号表示算法的时间复杂度,大写O 符号给出了函数f 的一个上限。
其它义如下:定义:f (n)=O (g (n)) 当且仅当存在正的常数c 和n0,使得对于所有的n≥n0,有f (n) ≤c g(n)。
3上述定义表明,函数f 顶多是函数g 的c 倍,除非n 小于n0。
因此对于足够大的n (如n≥n0),g 是f 的一个上限(不考虑常数因子c)。
在为函数f 提供一个上限函数g 时,通常使用比较简单的函数形式。
比较典型的形式是含有n 的单个项(带一个常数系数)。
表1-1 列出了一些常用的g 函数及其名称。
对于表1-1 中的对数函数logn,没有给出对数基,原因是对于任何大于1 的常数a 和b 都有log a n =log b n/log b a,所以log a n 和log b n 都有一个相对的乘法系数1/log b a,其中a 是一个常量。
表1-1 常用的渐进函数函数名称1 常数logn 对数n 线性nlogn n 个lognn2 平方n3 立方2n 指数n! 阶乘1.9 算法的空间复杂度指的是什么?如何表示?【答】:算法的空间复杂度是指算法在执行过程中占用的额外的辅助空间的个数。
可以将它表示为问题规模的函数,并通过大写O符号表示空间复杂度。
1.10 对于下面的程序段,分析带下划线的语句的执行次数,并给出它们的时间复杂度T(n)。
(1) i++;(2) for(i=0;i<n;i++)if (a[i]<x) x=a[i];(3)for(i=0;i<n;i++)for(j=0;j<n;j++)printf(“%d”,i+j);(4)for (i=1;i<=n-1;i++){ k=i;for(j=i+1;j<=n;j++)if(a[j]>a[j+1]) k=j;t=a[k]; a[k]=a[i]; a[i]=t;}(5)for(i=0;i<n;i++)for(j=0;j<n;j++){++x;s=s+x;}【答】:(1)O(1);(2)O(n);(3)O(n2);(4)O(n2);(5)O(n2)4第2章线性表及其顺序存储2.1 选择题(1)表长为n 的顺序存储的线性表,当在任何位置上插入或删除一个元素的概率相等时,插入一个元素所需移动元素的平均个数为( E ),删除一个元素所需移动元素的平均个数为( A )。
A.(n−1)/2 B.n C.n+1 D.n−1E.n/2 F.(n+1)/2 G.(n−2)/2(2)设栈S 和队列Q 的初始状态为空,元素e1、e2、e3、e4、e5 和e6 依次通过栈S,一个元素出栈后即进入队列Q,若6 个元素出队的序列为e2、e4、e3、e6、e5 和e1,则栈S 的容量至少应该为( C )。
A.6 B.4 C.3 D.2(3)设栈的输入序列为1、2、3…n,若输出序列的第一个元素为n,则第i 个输出的元素为( B )。
A.不确定B.n−i+1 C.i D.n−i(4)在一个长度为n 的顺序表中删除第i 个元素(1<=i<=n)时,需向前移动( A )个元素。
A.n−i B.n−i+1 C.n−i−1 D.i(5)若长度为n 的线性表采用顺序存储结构存储,在第i 个位置上插入一个新元素的时间复杂度为( A )。
A.O(n) B.O(1) C.O(n2) D.O(n3)(6)表达式a*(b+c)−d 的后缀表达式是( B )。
A.abcd*+− B.abc+*d− C.abc*+d− D.−+*abcd(7)队列是一种特殊的线性表,其特殊性在于( C )。
A.插入和删除在表的不同位置执行B.插入和删除在表的两端位置执行C.插入和删除分别在表的两端执行D.插入和删除都在表的某一端执行(8)栈是一种特殊的线性表,具有( B )性质。
A.先进先出B.先进后出C.后进后出D.顺序进出(9)顺序循环队列中(数组的大小为n),队头指示front 指向队列的第1 个元素,队尾指示rear 指向队列最后元素的后1 个位置,则循环队列中存放了n − 1 个元素,即循环队列满的条件为( B )。
A.(rear+1)%n=front−1 B.(rear+1)%n=frontC.(rear)%n=front D.rear+1=front(10)顺序循环队列中(数组的大小为6),队头指示front 和队尾指示rear 的值分别为3 和0,当从队列中删除1 个元素,再插入2 个元素后,front 和rear 的值分别为( D )。
A.5 和1 B.2 和4 C.1 和5 D.4 和22.2 什么是顺序表?什么是栈?什么是队列?5【答】:当线性表采用顺序存储结构时,即为顺序表。
栈是一种特殊的线性表,它的特殊性表现在约定了在这种线性表中数据的插入与删除操作只能在这种线性表的同一端进行(即栈顶),因此,栈具有先进后出、后进先出的特点。
队列也是一种特殊的线性表,它的特殊性表现在约定了在这种线性表中数据的插入在表的一端进行,数据的删除在表的另一端进行,因此队列具有先进先出,后进后出的特点。
2.3 设计一个算法,求顺序表中值为x 的结点的个数。
【答】:顺序表的存储结构定义如下(文件名seqlist.h):#include <stdio.h>#define N 100 /*预定义最大的数据域空间*/typedef int datatype; /*假设数据类型为整型*/typedef struct {datatype data[N]; /*此处假设数据元素只包含一个整型的关键字域*/int length; /*线性表长度*/} seqlist; /*预定义的顺序表类型*/算法countx(L,x)用于求顺序表L 中值为x 的结点的个数。
int countx(seqlist *L,datatype x){ int c=0;int i;for (i=0;i<L->length;i++)if (L->data[i]==x) c++;return c;}2.4 设计一个算法,将一个顺序表倒置。
即,如果顺序表各个结点值存储在一维数组a 中,倒置的结果是使得数组a 中的a[0]等于原来的最后一个元素,a[1] 等于原来的倒数第2 个元素,…,a 的最后一个元素等于原来的第一个元素。
【答】:顺序表的存储结构定义同题2.3,实现顺序表倒置的算法程序如下:void verge(seqlist *L){int t,i,j;i=0;j=L->length-1;while (i<j){ t=L->data[i];L->data[i++]=L->data[j];L->data[j--]=t;}}2.5 已知一个顺序表中的各结点值是从小到大有序的,设计一个算法,插入一个值为x 的结点,使顺序表中的结点仍然是从小到大有序。
【答】:顺序表的定义同题2.3,实现本题要求的算法程序如下:6void insertx(seqlist *L,datatype x){int j;if (L->length<N){ j=L->length-1;while (j>=0 && L->data[j]>x){ L->data[j+1]=L->data[j];j--;}L->data[j+1]=x;L->length++;}}2.6 将下列中缀表达式转换为等价的后缀表达式。
(1) 5+6*7(2) (5-6)/7(3) 5-6*7*8(4) 5*7-8(5) 5*(7-6)+8/9(6) 7*(5-6*8)-9【答】:(7) 5+6*7 后缀表达式:5 6 7*+(8) (5-6)/7 后缀表达式:5 6-7/(9) 5-6*7*8 后缀表达式:5 6 7*8*-(10)5*7-8 后缀表达式:5 7* 8-(11)5*(7-6)+8/9 后缀表达式:5 7 6-*8 9/+(12)7*(5-6*8)-9 后缀表达式:7 5 6 8*-*9-2.7 循环队列存储在一个数组中,数组大小为n,队首指针和队尾指针分别为front 和rear,请写出求循环队列中当前结点个数的表达式。