复旦大学数据结构教程课后习题答案第一章
数据结构1-4章习题答案

第1章概论习题参考解答一、填空题1、数据的逻辑结构是数据元素之间的逻辑关系,通常有下列4类:()、()、()、()。
【答】集合、线性结构、树型结构和图状结构。
2、数据的存储结构是数据在计算机存储器里的表示,主要有4种基本存储方法:()、()、()、()。
【答】顺序存储方法、链接存储方法、索引存储方法和散列存储方法。
二、选择题1、一个算法必须在执行有穷步之后结束,这是算法的()。
(A)正确性(B)有穷性(C)确定性(D)可行性【答】B。
2、算法的每一步,必须有确切的定义。
也就是说,对于每步需要执行的动作必须严格、清楚地给出规定。
这是算法的()。
(A)正确性(B)有穷性(C)确定性(D)可行性【答】C。
3、算法原则上都是能够由机器或人完成的。
整个算法好像是一个解决问题的“工作序列”,其中的每一步都是我们力所能及的一个动作。
这是算法的()。
(A)正确性(B)有穷性(C)确定性(D)可行性【答】D。
三、简答题1、算法与程序有何异同?【答】尽管算法的含义与程序非常相似,但两者还是有区别的。
首先,一个程序不一定满足有穷性,因此它不一定是算法。
例如,系统程序中的操作系统,只要整个系统不遭受破坏,它就永远不会停止,即使没有作业要处理,它仍处于等待循环中,以待一个新作业的进入。
因此操作系统就不是一个算法。
其次,程序中的指令必须是计算机可以执行的,而算法中的指令却无此限止。
如果一个算法采用机器可执行的语言来书写,那么它就是一个程序。
2、什么是数据结构?试举一个简单的例子说明。
【答】数据结构是指数据对象以及该数据对象集合中的数据元素之间的相互关系(即数据元素的组织形式)。
例如,队列的逻辑结构是线性表(先进先出);队列在计算机中既可以采用顺序存储也可以采用链式存储;对队列可进行删除、插入数据元素以及判断是否为空队列、将队列置空等操作。
3、什么是数据的逻辑结构?什么是数据的存储结构?【答】数据元素之间的逻辑关系,也称为数据的逻辑结构。
数据结构课后习题答案第1章

数据结构课后习题答案第1章第 1 章绪论2005-07-14第 1 章绪论课后习题讲解1. 填空⑴()是数据的基本单位,在计算机程序中通常作为⼀个整体进⾏考虑和处理。
【解答】数据元素⑵()是数据的最⼩单位,()是讨论数据结构时涉及的最⼩数据单位。
【解答】数据项,数据元素【分析】数据结构指的是数据元素以及数据元素之间的关系。
⑶从逻辑关系上讲,数据结构主要分为()、()、()和()。
【解答】集合,线性结构,树结构,图结构⑷数据的存储结构主要有()和()两种基本⽅法,不论哪种存储结构,都要存储两⽅⾯的内容:()和()。
【解答】顺序存储结构,链接存储结构,数据元素,数据元素之间的关系⑸算法具有五个特性,分别是()、()、()、()、()。
【解答】有零个或多个输⼊,有⼀个或多个输出,有穷性,确定性,可⾏性⑹算法的描述⽅法通常有()、()、()和()四种,其中,()被称为算法语⾔。
【解答】⾃然语⾔,程序设计语⾔,流程图,伪代码,伪代码⑺在⼀般情况下,⼀个算法的时间复杂度是()的函数。
【解答】问题规模⑻设待处理问题的规模为n,若⼀个算法的时间复杂度为⼀个常数,则表⽰成数量级的形式为(),若为n*log25n,则表⽰成数量级的形式为()。
【解答】Ο(1),Ο(nlog2n)【分析】⽤⼤O记号表⽰算法的时间复杂度,需要将低次幂去掉,将最⾼次幂的系数去掉。
2. 选择题⑴顺序存储结构中数据元素之间的逻辑关系是由()表⽰的,链接存储结构中的数据元素之间的逻辑关系是由()表⽰的。
A 线性结构B ⾮线性结构C 存储位置D 指针【解答】C,D【分析】顺序存储结构就是⽤⼀维数组存储数据结构中的数据元素,其逻辑关系由存储位置(即元素在数组中的下标)表⽰;链接存储结构中⼀个数据元素对应链表中的⼀个结点,元素之间的逻辑关系由结点中的指针表⽰。
⑵假设有如下遗产继承规则:丈夫和妻⼦可以相互继承遗产;⼦⼥可以继承⽗亲或母亲的遗产;⼦⼥间不能相互继承。
数据结构课后习题及解析第一章

数据结构课后习题及解析第一章第一章习题一、问答题1.什么是数据结构?2.叙述四类基本数据结构的名称与含义。
3.叙述算法的定义与特性。
4.叙述算法的时间复杂度。
5.叙述数据类型的概念。
6.叙述线性结构与非线性结构的差别。
7.叙述面向对象程序设计语言的特点。
8.在面向对象程序设计中,类的作用是什么?9.叙述参数传递的主要方式及特点。
10.叙述抽象数据类型的概念。
二、判断题(在各题后填写“√”或“某”)1.线性结构只能用顺序结构来存放,非线性结构只能用非顺序结构来存放。
()2.算法就是程序。
()3.在高级语言(如C或PASCAL)中,指针类型是原子类型。
()三、计算下列程序段中某=某+1的语句频度for(i=1;i<=n;i++)for(j=1;j<=i;j++)for(k=1;k<=j;k++)某=某+1;四、试编写算法,求一元多项式Pn(某)=a+a某+a2某2+a3某3+…an某n的值Pn(某),并确定算法中的每一语句的执行次数和整个算法的时间复杂度,要求时间复杂度尽可能小,规定算法中不能使用求幂函数。
注意:本题中的输入ai(i=0,1,…,n),某和n,输出为Pn(某)。
通常算法的输入和输出可采用下列两种方式之一:(1)通过参数表中的参数显式传递。
(2)通过全局变量隐式传递。
试讨论这两种方法的优缺点,并在本题算法中以你认为较好的一种方式实现输入和输出。
实习题设计实现抽象数据类型“有理数”。
基本操作包括有理数的加法、减法、乘法、除法,以及求有理数的分子、分母。
第一章答案1.3计算下列程序中某=某+1的语句频度for(i=1;i<=n;i++)for(j=1;j<=i;j++)for(k=1;k<=j;k++)某=某+1;【解答】某=某+1的语句频度为:T(n)=1+(1+2)+(1+2+3)+……+(1+2+……+n)=n(n+1)(n+2)/61.4试编写算法,求pn(某)=a0+a1某+a2某2+…….+an某n的值pn(某0),并确定算法中每一语句的执行次数和整个算法的时间复杂度,要求时间复杂度尽可能小,规定算法中不能使用求幂函数。
数据结构第一章课后习题与答案资料

数据结构第一章课后习题与答案资料1.什么是数据结构?答:数据结构是指数据对象以及数据对象之间的关系、操作和约束的一种逻辑结构。
它关注如何将数据以及数据之间的关系组织起来,以便更高效地进行操作和使用。
2.数据结构的分类有哪些?答:数据结构可以分为线性数据结构和非线性数据结构。
线性数据结构包括数组、链表、栈和队列;非线性数据结构包括树和图。
3.什么是算法?答:算法是指解决特定问题的一系列步骤和规则。
它可以描述为一个有限的指令集,用于将输入数据转换为输出结果。
4.算法的特征有哪些?答:算法具有以下特征:•输入:算法必须有输入,可以是零个或多个。
•输出:算法必须有输出,可以是零个或多个。
•有穷性:算法必须在有限步骤内结束。
•确定性:算法的每一步骤必须明确且无歧义。
•可行性:算法的每一步骤必须可行,即可以执行。
5.算法的时间复杂度是什么?如何表示时间复杂度?答:算法的时间复杂度是指算法执行所需的时间。
它通常用大O符号表示。
常见的时间复杂度有O(1)、O(n)、O(n^2)等。
6.算法的空间复杂度是什么?如何表示空间复杂度?答:算法的空间复杂度是指算法执行所需的额外空间。
它通常用大O符号表示。
常见的空间复杂度有O(1)、O(n)、O(n^2)等。
7.什么是数据的逻辑结构?答:数据的逻辑结构是指数据对象之间的关系。
常见的逻辑结构有线性结构、树形结构和图形结构。
8.什么是数据的存储结构?答:数据的存储结构是指数据在计算机内存中的表示方式。
常见的存储结构有顺序存储结构和链式存储结构。
9.顺序存储结构和链式存储结构有什么区别?答:顺序存储结构将数据存储在一块连续的内存空间中,可以随机访问元素,但插入和删除操作需要移动大量元素。
链式存储结构将数据存储在不连续的内存空间中,通过指针相连,插入和删除操作只需要修改指针,但访问元素需要遍历链表。
10.数组和链表的区别是什么?答:数组是一种顺序存储结构,元素在内存中连续存储,可以通过下标直接访问元素;链表是一种链式存储结构,元素在内存中不连续存储,通过指针相连。
数据结构教程(含习题和答案)

第一章:概论(包括习题与答案及要点)本章的重点是了解数据结构的逻辑结构、存储结构、数据的运算三方面的概念及相互关系,难点是算法复杂度的分析方法。
需要达到<识记>层次的基本概念和术语有:数据、数据元素、数据项、数据结构。
特别是数据结构的逻辑结构、存储结构及数据运算的含义及其相互关系。
数据结构的两大类逻辑结构和四种常用的存储表示方法。
需要达到<领会>层次的内容有算法、算法的时间复杂度和空间复杂度、最坏的和平均时间复杂度等概念,算法描述和算法分析的方法、对一般的算法要能分析出时间复杂度。
--------------------------------------------------------------------------------对于基本概念,仔细看书就能够理解,这里简单提一下:数据就是指能够被计算机识别、存储和加工处理的信息的载体。
数据元素是数据的基本单位,有时一个数据元素可以由若干个数据项组成。
数据项是具有独立含义的最小标识单位。
如整数这个集合中,10这个数就可称是一个数据元素.又比如在一个数据库(关系式数据库)中,一个记录可称为一个数据元素,而这个元素中的某一字段就是一个数据项。
数据结构的定义虽然没有标准,但是它包括以下三方面内容:逻辑结构、存储结构、和对数据的操作。
这一段比较重要,我用自己的语言来说明一下,大家看看是不是这样。
比如一个表(数据库),我们就称它为一个数据结构,它由很多记录(数据元素)组成,每个元素又包括很多字段(数据项)组成。
那么这张表的逻辑结构是怎么样的呢? 我们分析数据结构都是从结点(其实也就是元素、记录、顶点,虽然在各种情况下所用名字不同,但说的是同一个东东)之间的关系来分析的,对于这个表中的任一个记录(结点),它只有一个直接前趋,只有一个直接后继(前趋后继就是前相邻后相邻的意思),整个表只有一个开始结点和一个终端结点,那我们知道了这些关系就能明白这个表的逻辑结构了。
数据结构第1章习题解答

第1章习题解答1.1什么是数据结构?一个数据结构结构的二元组定义形式是什么样的?举例解释其含义。
[解答]概括地说,数据结构是互相有关联的数据元素的集合。
也就是说,数据结构是由某个数据元素的集合和该集合中的数据元素之间的关系组成的,因此数据结构可以用一个二元组来表示。
例如,B=(D,R),其中D是某一数据元素的集合,R是D上的关系的有限集。
R所表示的是集合D的数据元素之间的逻辑关系,它表示的可能是数据元素之间客观存在的某种联系,也可能是为了处理问题的需要而人为组织的数据元素之间的某种关系,因此,称之为数据的逻辑结构。
例如,一个农历节气表,就构成了一个数据结构,其数据元素是一年的农历二十四节气,数据元素之间的关系是节气的时间先后关系。
又如,一个某年级学生的成绩排序表,也是一个数据结构,其数据元素是包含成绩项的该年级的学生记录,数据元素之间的关系是学生之间的成绩高低关系。
为了在计算机中进行数据处理,必须把从实际问题中抽象出来的数据的逻辑结构映象到计算机的存储器中,即要把抽象出来的数据元素集合D 和数据元素之间的关系存储到计算机的存储器中,称之为数据的物理结构或存储结构,它是数据的逻辑结构在计算机中的表示。
1.2假设R是集合M上的一个关系,R的定义是什么?对实际问题而言,其含义是什么?[解答]如果R是对集合M自身的笛卡尔积所取的一个子集,那么我们就说“R是集合M上的一个关系”。
对实际问题而言,它表示的是集合M中元素的某种相关性。
例如,对于参加一个羽毛球比赛的运动员集合,可以用一个二元关系表示出各场比赛的胜负关系。
对于一组课程的集合,可以用一个二元关系表示出各门课程之间的先修和后续关系等等。
1.3设有集合M={d1,d2,d3,d4,d5}上的一个关R={(d1,d2),(d2,d4),(d4,d5),(d2,d5),(d1,d4),(d1,d5),(d3,d5),(d1,d3)},试说明关系R具有什么样的性质。
数据结构第1章-答案

一、填空题01、数据结构是一门研究非数值计算的程序设计问题中计算机的(操作对象)以及它们之间的(关系和运算)等的学科。
02、数据结构被形式地定义为(D,R),其中D是(数据元素)的有限集合,R是D上的(关系)有限集合。
03、数据结构包括数据的(逻辑结构)、数据的(存储结构)和数据的(运算)这三个方面的内容。
04、数据结构按逻辑结构可分为两大类,它们分别是(线性结构)和(非线性结构)。
05、线性结构中元素之间存在(一对一)关系,树形结构中元素之间存在(一对多)关系,图形结构中元素之间存在(多对多)关系。
06、在线性结构中,第一个结点(没有)前驱结点,其余每个结点有且只有1个前驱结点;最后一个结点(没有)后续结点,其余每个结点有且只有1个后续结点。
07、在树形结构中,树根结点没有(前驱)结点,其余每个结点有且只有(1)个前驱结点;叶子结点没有(后续)结点,其余每个结点的后续结点数可以(任意多个)。
08、在图形结构中,每个结点的前驱结点数和后续结点数可以(任意多个)。
09、数据的存储结构可用四种基本的存储方法表示,它们分别是(顺序)、(链式)、(索引)、(散列)。
10、对于给定的n个元素,可以构造出的逻辑结构有(集合)、(线性结构)、(树形结构)、(图状结构)四种。
11、数据的运算最常用的有5种,它们分别是(插入)、(删除)、(修改)、(查找)、(排序)。
12、一个算法的效率可分为(时间)效率和(空间)效率。
13、数据结构中评价算法的两个重要指标是算法的(时间复杂度)和(空间复杂度)。
14、一个数据结构在计算机中的(映射)称为存储结构。
15、算法的五个重要特性是(有穷性)、(确定性)、(可行性)、输入、输出。
16、已知如下程序段for (i=n; i>=1; i--) //语句1{ x++; //语句2for (j=n; j>=i; j--) //语句3y++; //语句4}语句 1 执行的频度为(n+1);语句2执行的频度为(n);语句3执行的频度为(n(n+3)/2);语句4执行的频度为(n(n+1)/2)。
数据结构第1章绪论习题答案

Ch1绪论1.下列与数据元素有关的叙述中,哪一个是不正确的(B)。
A.数据元素是数据的基本单位,即数据集合中的个体B.数据元素是有独立含义的数据最小单位C.数据元素又称结点D.数据元素又称作记录2.下列关于数据的逻辑结构的叙述中,哪一个是正确的(A)。
A.数据的逻辑结构是数据间关系的描述B.数据的逻辑结构反映了数据在计算机中的存储方式C.数据的逻辑结构分为顺序结构和链式结构D.数据的逻辑结构分为静态结构和动态结构3.数据的基本单位是(数据元素),在计算机中通常作为一个(整体)进行处理。
4.所有能输入到计算机中并被计算机程序处理的(符号)称为数据。
5.数据结构是一门研究非数值计算的程序设计问题中计算机的(①A)以及它们之间的(②B)和运算等的学科。
① A.数据元素 B.计算方法 C.逻辑存储 D.数据映像② A.结构 B.关系 C.运算 D.算法6.数据结构被形式的定义为(K,R),其中K是(①B)的有限集,R是K上的(②D)有限集。
① A.算法 B.数据元素 C.数据操作 D.逻辑结构② A.操作 B.映像 C.存储 D.关系7.具有线性结构的数据结构是(D)。
A.树B.图C.广义表D.栈8.在数据结构中,从逻辑上可以把数据结构分为(D)。
A.动态结构和静态结构B.紧凑结构和非紧凑结构C.内部结构和外部结构D.线性结构和非线性结构9.线性结构中元素之间存在(A)关系。
A.一对一B.一对多C.多对一D.多对多10.数据逻辑结构包括(集合)、(线性结构)、(树形结构)和(图状结构)四种类型,树形结构和图形结构合称为(非线性结构)。
11.在线性结构中,第一个结点(没有)前驱结点,其余每个结点有且只有(1)个前驱结点,最后一个结点(没有)后继结点,其余每个结点有且只有(1)个后继结点。
12.在树形结构中,树根结点没有(前驱)结点,其余每个结点有且只有(1)个前驱结点,叶子结点没有(后继)结点,其余每个结点的后继结点可以(任意多个)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ch='y'; for(i=0;ch=='y'||ch=='Y';i++) {q=(NODE*)malloc(sizeof(NODE)); if(p==NULL) root=q; else p->next=q; printf("\nPlease input the DATA of node %d:\n",i); scanf("%d",&(q->data)); getchar(); printf("Please input the EXP of node %d:\n",i); scanf("%d",&(q->exp)); getchar(); printf("Do you want to continue(Y/N)?\n"); scanf("%c",&ch); getchar(); p=q; } p->next=NULL; return(root); } void print(NODE *root) {int i=0; if(!root) printf("\n0"); while(i++,root!=NULL) {printf("\nNODE %d:\tDATA:%d\tEXP:%d",i,root->data,root->exp); root=roo一个求解给定多项式在 X=Xo(Xo 为指定的某个值)时的值的 C 函数。 存储法:定义结构数组 struct node { int exp; float coef; }; typedef struct node TERM #define max 100
NODE a[max]; 算法步骤:1 令 sum=0, i=0 2 算出第 i 项的值,并与 sum 相加。 3 若 i<n, 则转 2,否则 return(sum) 程序: float cal ( float x, TERM a[ ], int n ) { float sum; int i, j, k; for ( i=0; i<n; i++ ) { for ( k=1, j=1; j<= a[i ]. Exp; j++) k=k*x; sum+= a[i ].coef*k; } return(sum); } 测试用例: 令 x=2; 多项式为 3x6+8x4+5x2+9 结果为 349。
print(b); c=multi(a,b); printf("\n\n\nC:\n"); print(c); } 五:测试数据: 输入: A:5X^6+3X^4+2X B:7X^3+3X^2+5 输出: C:35X^9+15X^8+21X^7+34X^6+29X^4+6X^3+10X 输入: A:0 B:5X^3+2X^2 输出:0 输入: A:3X^2+5X^1 B:3X^1-5 C:0
NODE *multi(NODE *a,NODE *b) {NODE *pa,*pb,*pc,*qc,*p,*c=NULL; int exp,data,flag; for(pa=a;pa!=NULL;pa=pa->next) for(pb=b;pb!=NULL;pb=pb->next) {exp=pa->exp+pb->exp;data=pa->data*pb->data; if(data) {flag=search(exp,c,&pc,&qc); if(flag) if(!(data+qc->data)) {pc->next=qc->next;free(qc);} else (qc->data)+=data; else {p=(NODE *)malloc(sizeof(NODE)); p->data=data;p->exp=exp; if(!pc) c=p; else pc->next=p; p->next=qc; } } } return(c); }
1.1:比较 2 个线性链表的 C 函数
1. 存储法:用两个数组存放线性表。 2. 存储结构:一般的顺序存储方式。 3. 源程序: int comp(int a[],int as,int b[],int bs) { int tmp=as>bs?as:bs; int i; for(i=0;i<tmp;i++) { if(a[i]>b[i]) return 1; if(a[i]<b[i]) return -1; } if(as>bs) return 1; if(bs>as) return -1; return 0; } 4.测试用例: 1. A[3]={1,2,3} B[3]={1,2,3} output : 0; 2. A[3]={1.2.3} B[3]={1,1,3} output: 1; 3. A[3]={1,2,3} B[3]={1,2,4} output: -1 4. A[3]={1,2,3} B[4]={1,2,3,0} output: -1; 5. A[4]={1,2,3,0} B[3]={1,2,3} output: 1; 6. A[4]={1,2,3,0} B[3]={1,3,2} output:-1;
NODE* creat() {NODE *root,*p,*q; char ch; int i; printf("Do you want to creat a null one(Y/N)?\n"); scanf("%c",&ch); getchar(); if(ch=='y'||ch=='Y') return(NULL); p=NULL;
main() { char ch; NODE *a,*b,*c; clrscr(); printf("Now please input A:\n"); a=creat(); printf("Now please input B:\n"); b=creat(); printf("\nA:\n"); print(a); printf("\nB:\n");
int search(int exp,NODE *c,NODE **pc,NODE **qc) { *pc=NULL; *qc=c; if(c==NULL) return(0); while((*qc)->exp>exp) {*pc=*qc;*qc=(*qc)->next;} if((*qc)->exp==exp) return(1); return(0); }
1.2
写一个倒置顺序存贮的线性表的 C 函数。要求用最少的附加存贮空间来完成。 分析:假设用数组 a 存贮一组 int 类型的数据,每次将 a[0]取出,其余数依次前移,然后 将 a[0]放到 尚未倒置的数据元素的最后,直至整个数组完成倒置。 (1)取 t=a[0],余下的 a[1],a[2],...a[n-1]依次前移一个位置; (2)a[n-1]=t; 算法: (3)对由 a[0],a[1]...a[n-2]组成的数组重复上述步骤。 程序: # include<stdio.h> # define N 10 void reverse(a,n) int a[]; int n; {int t,i,j=0; while(j<n-1) {t=a[0]; for(i=0;i<n-j-1;i++) a[i]=a[i+1];
a[i]=t; j++; } } void main( ) {int a[N]; int i; printf("Input the array:\n"); for(i=0;i<N;i++) scanf("%d", &a[i]); reverse(a,N); printf("The reversed array:\n"); for(i=0;i<N;i++); printf("%d ",a[i]); printf("\n"); } Sample: Input the array: 0123456789 The reversed array: 9876543210
1.5
实现多项式乘法 一:存储结构: 多项式以线性链表存储,以增加其插入删除的效率。结果多项式与所给多项式采取 相同的存储结构,以方便实现多项式的连乘。 二:分析 多项式的加法书上有源程序,而乘法与加法相似,只是由于乘法的规则与加法 不同,因此我用了一个双重循环来实现(详见源程序) ,得到一个结果项之后,查找结 果链表,若已有,则看是否相加之后为 0,若为 0,则将该项删去,否则,就直接改系 数,若没有,则直接链上。 原本想用数组加链表的索引法来实现,但据分析后,认为并不能显著提高效率, 显得得不偿失,因此,我就使用了最原始的方法,请老师同学多多指教。 三:输入/输出 输入:先输入 A、B 多项式(根据提示) 输出:A、B、C(A×B) 四:源程序 #include<stdio.h> struct node{ int exp; int data; struct node *next; }; typedef struct node NODE;
1.3
在具有 n 个结点的顺序存贮的线性表中,对值相同的结点只保留一个,把多余的结点删 除掉,使线性表中没有值相同的结点。试编写一个实现上述操作的 C 函数,并分析该程序的 执行时间。 解答: 首先应对线性表中每一个结点进行搜索, 找到和他值相同的结点就把其删除, 同时改变 原结点的个数。主要运用两层循环:最外层对线性表中的第 0 到第 n-2 个元素进行扫描,第 二层是对于第一层的每一个元素从其后面一个元素开始扫描, 检查是否有和该元素值相同的 元素若有则删除该元素,若无则循环关键值+1 进行下一个元素比较,直到线性表最后一个 元素,然后在回到上层循环。如此继续,直到跳出所有循环时,所得线性表即为题目要求的 线性表。 下面给出实现的函数。Sq_delete()为删除一个结点的函数,i 表示所要删除的结点的 下标,del()为删除线性表中所有相同结点的函数。其中 list[]为进行操作的线性表,*p_m 和*p_n 在两个函数中都表示线性表中结点个数。 #include<stdio.h> #define M 100 int sq_delete(int list[],int *p_m,int i) { int j; if(i<0||i>=*p_m) return(1); for(j=i+1;j<*p_m;j++)