第2章 基本数据结构及算法习题参 考答案

合集下载

数据结构第二章参考答案

数据结构第二章参考答案

数据结构第二章参考答案1. 线性表线性表是数据结构中最基本的一种结构,在实际应用中广泛使用。

它是一个有序的数据元素序列,其中每个元素都有唯一的前驱和后继,除了第一个元素没有前驱,最后一个元素没有后继。

2. 顺序存储结构顺序存储结构是线性表最简单的一种实现方式。

它利用一段连续的存储空间依次存储线性表的元素,存储位置是连续的。

在顺序存储结构中,插入和删除操作需要移动大量元素,因此效率较低。

3. 链式存储结构链式存储结构通过指针将线性表的各个元素链接起来。

每个元素都包含一个数据域和一个指针域,数据域用于存储数据元素,指针域用于存储下一个元素的地址。

在链式存储结构中,插入和删除操作只需要修改指针,效率较高。

4. 栈栈是一种特殊的线性表,它只允许在表的一端进行插入和删除操作,这一端称为栈顶。

栈的特点是后进先出,即最后插入的元素最先被删除。

栈的应用场景包括函数调用、表达式求值等。

5. 队列队列也是一种特殊的线性表,它允许在表的一端(队尾)插入元素,在另一端(队首)删除元素。

队列的特点是先进先出,即最先插入的元素最先被删除。

队列的应用场景包括进程调度、打印队列等。

6. 递归递归是一种解决问题的方法,通过调用自身来解决规模较小的子问题。

在数据结构中,递归广泛应用于树和图的操作中。

递归需要注意递归的边界条件和递归的停止条件,以避免无限递归的问题。

7. 树树是一种非线性的数据结构,它由n个节点组成,这些节点通过边连接起来。

树的特点是每个节点最多有一个父节点,但可以有多个子节点。

树的应用场景包括文件系统、组织结构等。

8. 二叉树二叉树是一种特殊的树结构,每个节点最多有两个子节点。

二叉树的遍历有三种方式:前序遍历(根-左-右)、中序遍历(左-根-右)和后序遍历(左-右-根)。

二叉树的应用场景包括查找、排序等。

9. 查找算法查找算法是在数据集合中寻找特定元素的过程。

常用的查找算法有顺序查找、二分查找、哈希查找等。

不同的查找算法有不同的时间复杂度和空间复杂度,对于不同规模的数据集合有不同的效率。

数据结构第2章习题及答案

数据结构第2章习题及答案

7.若某表最常用的操作是在最后一个结点之后插入一个结点或删除最后一个结点。

则采用()存储方式最节省运算时间。

【北京理工大学 2000 一、1(2分)】A.单链表 B.双链表 C.单循环链表 D.带头结点的双循环链表8. 静态链表中指针表示的是(). 【北京理工大学 2001 六、2(2分)】A.内存地址 B.数组下标 C.下一元素地址 D.左、右孩子地址9. 链表不具有的特点是()【福州大学 1998 一、8 (2分)】A.插入、删除不需要移动元素 B.可随机访问任一元素C.不必事先估计存储空间 D.所需空间与线性长度成正比10. 下面的叙述不正确的是()【南京理工大学 1996 一、10(2分)】A.线性表在链式存储时,查找第i个元素的时间同i的值成正比B. 线性表在链式存储时,查找第i个元素的时间同i的值无关C. 线性表在顺序存储时,查找第i个元素的时间同i 的值成正比D. 线性表在顺序存储时,查找第i个元素的时间同i的值无关11. 线性表的表元存储方式有((1))和链接两种。

试指出下列各表中使用的是何种存储方式:表1是((2))存储方式;表2是((3))存储方式;表3是((4))存储方式;表4是((5))存储方式。

表左的s指向起始表元。

供选择的答案:A.连续B.单向链接C.双向链接D.不连接E.循环链接F.树状G.网状H.随机I.顺序J.顺序循环【上海海运学院 1995 二、1(5分)】12.(1) 静态链表既有顺序存储的优点,又有动态链表的优点。

所以,它存取表中第i个元素的时间与i无关。

(2) 静态链表中能容纳的元素个数的最大数在表定义时就确定了,以后不能增加。

(3) 静态链表与动态链表在元素的插入、删除上类似,不需做元素的移动。

以上错误的是()【南京理工大学 2000 一、3(1.5分)】A.(1),(2) B.(1) C.(1),(2),(3) D.(2)13. 若长度为n的线性表采用顺序存储结构,在其第i个位置插入一个新元素的算法的时间复杂度为()(1Rlink=p;p->Llink->Rlink=q;q->Llink=q;B. p->Llink=q;p->Llink->Rlink=q;q->Rlink=p;q->Llink=p->Llink;C. q->Rlink=p;q->Llink=p->Llink;p->Llink->Rlink=q;p->Llink=q;D. q->Llink=p->Llink;q->Rlink=q;p->Llink=q;p->Llink=q;24.在单链表指针为p的结点之后插入指针为s的结点,正确的操作是:()。

第2章 基本数据结构及算法习题参 考答案

第2章 基本数据结构及算法习题参 考答案
if(a[i]<=b[j])
c[k++]=a[i++];
else c[k++]=b[j++];
while(i<m)
c[k++]=a[i++];
while(j<n)
c[k++]=b[j++];
}
6.设有两个有序线性单链表,头指针分别为ah与bh。试写出将这两个有序线性单链表合并为一个头指针为ch的有序线性单链表的算法。
(2)在栈中插入一个元素X;
(3)在栈中插入一个元素Y;
(4)删除栈顶元素;
(5)在栈中插入一个元素Z;
(6)在栈中插入一个元素W;
(7)栈初始化。
top

Y
top

X
X
top

栈空
在栈中插入一个元素X
在栈中插入一个元素Y
top

W
top

Z
Z
top

X
X
X
删除栈顶元素
在栈中插入一个元素Z
在栈中插入一个元素W
p->next=NULL;
if(head==NULL)
head=p;
else
q->next=p;
q=p;
}
return(head);
}
node *delst( node *head)
{
node *p,*q,*r;
p=head;
r=p;
while(p!=NULL)
{
q=p->next;
while(q!=NULL)

数据结构与算法课后习题解答

数据结构与算法课后习题解答

数据结构与算法课后习题解答数据结构与算法课后习题解答第一章绪论(参考答案)1.3 (1) O(n)(2) (2) O(n)(3) (3) O(n)(4) (4) O(n1/2)(5) (5) 执行程序段的过程中,x,y值变化如下:循环次数x y0(初始)91 1001 92 1002 93 100。

9 100 10010 101 10011 9112。

20 9921 91 98。

30 101 9831 91 97到y=0时,要执行10*100次,可记为O(10*y)=O(n)数据结构与算法课后习题解答1.5 2100 , (2/3)n , log2n , n1/2 , n3/2 , (3/2)n , nlog2n , 2 n , n! , n n第二章线性表(参考答案)在以下习题解答中,假定使用如下类型定义:(1)顺序存储结构:#define ***** 1024typedef int ElemType;// 实际上,ElemTypetypedef struct{ ElemType data[*****];int last; // last}sequenlist;(2*next;}linklist;(3)链式存储结构(双链表)typedef struct node{ElemType data;struct node *prior,*next;数据结构与算法课后习题解答}dlinklist;(4)静态链表typedef struct{ElemType data;int next;}node;node sa[*****];2.1 la,往往简称为“链表la”。

是副产品)2.2 23voidelenum个元素,且递增有序,本算法将x插入到向量A中,并保持向量的{ int i=0,j;while (ielenum A[i]=x) i++; // 查找插入位置for (j= elenum-1;jj--) A[j+1]=A[j];// 向后移动元素A[i]=x; // 插入元素数据结构与算法课后习题解答} // 算法结束24void rightrotate(ElemType A[],int n,k)// 以向量作存储结构,本算法将向量中的n个元素循环右移k位,且只用一个辅助空间。

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

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

A .大于 1
B.等于 1
C. 小于 1 D.不能确定
( 8)将两个各有 n 个元素的有序表归并成一个有序表,其最少的比较次数是(
)。
A.n
B .2n-1
C. 2n
D .n-1
( 9)在一个长度为 n 的顺序表中,在第 i 个元素( 1≤ i≤ n+1 )之前插入一个新元素时
须向后移动( )个元素。
(15) 在双向循环链表中,在 p 指针所指的结点后插入 q 所指向的新结点,其修改指针 的操作是( )。
A . p->next=q; q->prior=p; p->next->prior=q; q->next=q; B. p->next=q; p->next->prior=q; q->prior=p; q->next=p->next; C. q->prior=p; q->next=p->next; p->next->prior=q; p->next=q; D. q->prior=p; q->next=p->next; p->next=q; p->next->prior=q;
第 1 章 绪论
习题
1.简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储 结构、抽象数据类型。
2.试举一个数据结构的例子,叙述其逻辑结构和存储结构两方面的含义和相互关系。 3.简述逻辑结构的四种基本关系并画出它们的关系图。
4.存储结构由哪两种基本的存储方法实现?
5.选择题
( 1)在数据结构中,从逻辑上可以把数据结构分成(
( 5)以下与数据的存储结构无关的术语是(

数据结构+算法+第二版+课后+答案+部分

数据结构+算法+第二版+课后+答案+部分

算法与数据结构课后习题答案第一章一、选择题CCADB二、判断题FFFFT三、简答题5.(1) n-1 (2)1 (3)n(n+1)/2 (4)if(a<b) n , a++ n/2(5)if(x>100) 11*100-1, x-=10;y-- 1006.(1)O(log3n) (2) O(n2) (3) O(n2)第二章一、选择题1~5: AADCD 6~10:BCBAD 11~12:BD二、判断题1~5:FTFTF 6~10:TFTTF 11~12:FF三、算法设计题1.#define arrsize 100int Inserseqx(datatype A[ ], int *elenum, datatype x ) { int i=*elenum-1;if(*elenum==arrsize) return 0;while(i>=0&&A[i]>=x ){ A[i+1]=A[i]; i--; }A[i+1]=x; *elenum ++;return 1;}6.typedef struct node{ dataype data;struct node *next;}LNode, *LinkList;int Inserlinkx(LinkList L,datatype x ){ LNode *p=L,*s;s=(LNode *)malloc(sizeof(LNode));if(!s) return 0;s->data=x;while(p->next&&p->next->data<=x) p=p->next;s->next=p->next; p->next=s;return 1;}第三章一、选择题1~5:CBDBB 6~10: CBDCC二、判断题1~5:TTTFF三、简答题4. 共14种顺序:4321 3214 3241 3421 2134 2143 23142341 2431 1234 1243 1324 1342 1432四、简答题1.#define MAXSIZE 1000typedef struct{datatype data[MAXSIZE];int top;}SeqStack;SeqStack *Init_SeqStack(); /*栈初始化*/int Empty_SeqStack(SeqStack *s);/*判栈空*/int Push_SeqStack(SeqStack *s,datatype x); /*x入栈*/ int Pop_SeqStack(SeqStack *s,datatype *x); /*出栈*/int judgehuiwen(char *str)/*返回1表示是回文,否则不是*/{ SeqStack *s=Init SeqStack( );char *ch=str,ch1;while(*ch!=’@’){Push_SeqStack(s, *ch);ch++;}ch=str;while(!Empty_SeqStack(s)){ Pop_SeqStack(s,&ch1);if(*ch!=ch1) return 0;ch++;}return 1;}5.#define MAXSIZE 1000typedef struct{datatype data[MAXSIZE];int top;}SeqStack;SeqStack *Init_SeqStack(); /*栈初始化*/int Empty_SeqStack(SeqStack *s);/*判栈空*/int Push_SeqStack(SeqStack *s,datatype x); /*x入栈*/ int Pop_SeqStack(SeqStack *s,datatype *x); /*出栈*/ int judge(char *str)/*返回1表示是匹配,否则不是*/{ SeqStack *s=Init SeqStack( );char *ch=str,ch1;while(*c h!=’\0’){ if(*ch==’(‘) Push_SeqStack(s, *ch);else if(*ch==’)‘)if(!Pop_SeqStack(s,&ch1)) return 0;ch++;}if(Empty_SeqStack(s)) return 1;else return 0;}4.typedef struct node{ dataype data;struct node *next;}Lqnode, *LqList;置空:LqList Init_lq(){ LqList rear=(LqList *)malloc(sizeof(LqList)); rear->next=rear;return rear;}入队:int in_lq(LqList *rear, datatype x){ Lqnode *p=(LqList *)malloc(sizeof(LqList)); if(!p) return 0;p->data=x;p->next=*rear->next; *rear->next=p; *rear=p; return 1;}出队:int out_lq(LqList *rear, datatype x){ Lqnode *p;if(*rear->next==*rear) return 0;p=*rear->next->next;if(p==*rear){*rear=*rear->next;*rear->next=*rear;} else *rear->next->next=p->next;free(p);return 1;}第四章一、选择题1-3:CBA 4:DAB 5:CCC 6:C二、判断题FTFFFFF三、简答题2.4. k=i+j-2+(i+1)%2 或k=i+j-1+i%26.第五章一、选择题:1~5:CCBBB 6~10:CBDAD 11~15:DCBDB3 5 6 7 98 13 17二、判断题:1~5:FTFFT 6~10:FFFTF 11~15:TFTFF 16~20:FTFFT 三、简答题:((2)4、条件:森林中既没有孩子也没有右边的兄弟的结点11. 最大值:2h-1 最小值:2h-116.0.31 0.16 0.10 0.08 0.11 0.20 0.04 0.12 0.21 0.28 0.410.59a b c d e f ga:01 b:001 c:110 d:0000 e:111 f:10 g:0001四、算法设计题:typedef struct bitnode{ datatype data;struct bitnode *lchild, *rchild;}BiTNode, *BiTree;1.计算结点数目int counttotal(BiTree bt){ if(bt==NULL) return 0;return counttotal(bt->lchild)+counttotal(bt->rchild)+1;}计算度为1的结点数目:int countdegree1(BiTree bt){ if(bt==NULL) return 0;if( bt->lchild==NULL&& bt->rchild==NULL) return 0;if( bt->lchild==NULL|| bt->rchild==NULL)return countdegree1(bt->lchild)+ countdegree1(bt->rchild)+1; return countdegree1(bt->lchild)+ countdegree1(bt->rchild);}3.求深度;int depth(BiTree bt){ int ld,rd;if(bt==NULL) return 0;ld= depth(bt->lchild); rd=depth(bt->rchild);if( ld>=rd) return ld+1;return rd+1;}第6章作业讲评一、选择题1-4:BABC 5:BD 6-10:DBACB二、判断题1-5:FTTFF 6-10:TTFFT 11-15:FTFFF三、简答题1.(1)ID(1)=2 OD(1)=1ID(2)=2 OD(2)=2ID(3)=1 OD(3)=3ID(4)=3 OD(4)=0ID(5)=2 OD(5)=3ID(6)=1 OD(6)=2(2)0 0 0 1 0 0 1 0 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 0 1 0 0 0 1 0 0 1 0(3) (4)54 3 2 1 0 54 3 2 1 0(5) 2. (1)0 1 1 0 0 0 0 1 0 0 1 0 0 0 1 0 0 1 0 0 0 0 1 1 0 1 1 0 0 0 0 1 0 0 1 0 0 0 1 0 0 1 0 0 0 0 1 1 0(2)(4)(5)v1 v2 v3 v4 v5 v6 v73. 邻接矩阵表示图时,与顶点个数有关,与边的条数无关。

数据结构 第2章 答案(已核)

数据结构 第2章 答案(已核)

第2章1. 名词解释(1)线性表具有相同数据类型的n(n>=0)个数据元素的有限序列,排列方式为“一个接一个的排列”。

通常记为:(a1,a2,… a i-1,a i,a i+1,…a n)其中,n为表长,n=0时称为空表。

(2)顺序表用顺序存储方式存放的线性表叫顺序表,顺序存储是指在内存中用地址连续的一块存储空间顺序存放线性表的各元素。

特点:①用物理上的相邻实现数据元素逻辑关系上的相邻;②可实现随机存取。

(3)线性单链表用链式存储方式存放的线性表叫链表。

链表是通过一组任意的存储单元来存储线性表中的数据元素,对每个数据元素a i,除了存放数据元素的自身的信息a i之外,还需要存放其后继a i+1 所在的存贮单元的地址,这两部分信息组成一个“结点”,存放数据元素信息的称为数据域data,存放其后继地址的称为指针域next。

因此n个元素的线性表通过每个结点的指针域联成了一个“链子”,称之为链表。

其中:线性、单向链结构的叫线性单链表;线性、双向链结构的叫线性双向链表;环形、单向链结构的叫单循环链表;环形、双向链结构的叫双循环链表。

(4)单循环链表在单链表的基础上,链表最后一个结点的指针域不为空,而是指向第一个结点,使得链表头尾结点相连,整个链表形成一个环。

单循环链表特点:从表中任何一个结点出发均可找到其它结点。

(单链表特点:要找链表中任何一个结点,必须从头结点开始遍历该结点以前的整个链表。

)2. 判断题(在各题后填写“√”或“×”)(1) 线性表若采用链式存储表示时所有存储结点之间的地址可连续可不连续( √ )(2) 链式存储在插入和删除时需要保持数据元素原来的物理顺序,不需要保持原来的逻辑顺序。

(×)(3) 链表中每个结点都是两个域。

(×)解析:单链表中每个结点都是两个域,双链表不是两个域。

(4) 在顺序表中,逻辑上相邻的元素在物理位置上不一定相邻。

(×)(5) 顺序表可以按下标随机(或直接)访问,顺序表还可以从某一指定元素开始,向前或向后逐个元素顺序访问。

数据结构第2章习题参考答案

数据结构第2章习题参考答案

数据结构第2章习题参考答案1. 简答题1.1 什么是数据结构?数据结构是指相互之间存在一种或多种特定关系的数据元素的集合,它包括数据的逻辑结构和物理结构。

1.2 数据结构的分类有哪些?数据结构可以分为线性结构和非线性结构。

线性结构包括线性表、栈、队列和串;非线性结构包括树和图。

1.3 数据结构的逻辑结构有哪些?数据结构的逻辑结构包括线性结构、树形结构和图形结构。

1.4 数据结构的物理结构有哪些?数据结构的物理结构包括顺序存储结构和链式存储结构。

1.5 什么是算法?算法是指求解问题的具体步骤和方法。

1.6 算法的特性有哪些?算法应具有有穷性、确定性、可行性和输入输出性。

2. 选择题2.1 在栈的顺序存储结构中,栈的存储位置是:A. 自顶向下递增B. 自底向上递增C. 自底向上递减D. 自顶向下递减答案:D2.2 下列哪个数据结构不适合表示有父子关系的数据?A. 二叉树B. 图C. 链表D. 堆答案:D2.3 对于一棵完全二叉树,叶子节点的个数为n,则树中节点的总数为:A. 2nB. 2n + 1C. nD. n + 1答案:A2.4 假设有一个长度为10的栈,初始时栈为空,若对该栈连续执行5次入栈操作,然后执行4次出栈操作,最后执行1次入栈操作,则栈中剩余的元素个数为:A. 0B. 1C. 4D. 6答案:D3. 编程题3.1 实现一个栈数据结构的基本操作,包括入栈、出栈、获取栈顶元素和判断栈是否为空。

```Pythonclass Stack:def __init__(self):self.items = []def is_empty(self):return len(self.items) == 0def push(self, item):self.items.append(item)def pop(self):if self.is_empty():return Nonereturn self.items.pop()def peek(self):if self.is_empty():return Nonereturn self.items[-1]```3.2 实现一个队列数据结构的基本操作,包括入队、出队、获取队首元素和判断队列是否为空。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(3)在栈中插入一个元素Y;
(4)删除栈顶元素;
(5)在栈中插入一个元素Z;
(6)在栈中插入一个元素W;
(7)栈初始化。
top

Y
top

X
X
top

栈空
在栈中插入一个元素X
在栈中插入一个元素Y
top

W
top

Z
Z
top

X
X
X
删除栈顶元素
在栈中插入一个元素Z
在栈中插入一个元素W
top
→→
栈初始化
{
r->next=q->next;
delete q;
q=r->next;
}
else
{
r=q;
q=q->next;
}
}
p=p->next;
}
return(head);
}
void print( node *head)
{
node *p,*q;
p=head;
while(p!=NULL)
{
cout<<p->d<<' ';
struct node
{char d;
struct node *next
};
invlst(struct node **head)
{struct node *p,*q,*r;
if(*head!=NULL)
{p=*head;q=p->next;
p->next=NULL;
while(q!=NULL)
{r=q->next;q->next=p;
{node *pa,*pb,*pc,*ch,*q;
pa=ah;pb=bh;ch=NULL;
while(pa!=NULL&&pb!=NULL)
{pc=new node;
if(pa->data<=pb->data)
{pc->data=pa->data;
pa=pa->next;
}
else
{pc->data=pb->data;
else q->rchild=p;
}
return(t); //插入成功返回t
}
void main()
{int key;
btree *t=NULL;
cin>>key;
while(key!=0)
{
t=insertree(t,key);
cin>>key;
};
}
21.设有5个结点为K1,K2,K3,K4,K5,其权值分别为16,2,18,16,23。请构造一棵Huffman树。
p=q;q=r;
}
*head=p;
}
}
8.写出计算线性链表长度的算法。
参考答案:
struct node /*定义线性单链表结点类型*/
{ET d; /*定义线性单链表结点数据类型*/
struct node *next;/*结点指针*/
};
intlen(struct node *head)
{int n;
}
int gcd(int x, int y)
{int a, b, t, r;
a=x; b=y;
if (a<b)
{ t=a; a=b; b=t; }
if(a%b==0) return b;
else gcd(b, a%b);
}
2.编写将一个十进制整数转换成二进制数的递归算法。
参考答案:
void dec_to_bin(int num,int base)//base为2
while(j<n)
c[k++]=b[j++];
}
6.设有两个有序线性单链表,头指针分别为ah与bh。试写出将这两个有序线性单链表合并为一个头指针为ch的有序线性单链表的算法。
参考答案:
structnode
{int data;
structnode* next;
};
node *merge(node *ah,node *bh)
if(top>0) tag=0;
}
13.现有如下的稀疏矩阵,要求写出其三元组表示。
参考答案:
14.现有一个稀疏矩阵的三元组表示如下,试写出其对应的稀疏矩阵。
参考答案:
15.编写一个算法,将给定的m×n稀疏矩阵转换成三元组表示。
参考答案:
int change(int m,int n,int a[ ][M],int b[ ][3])
习题
1.分别写出求两个正整数最大公约数的递推与递归算法。
参考答案:
int gcd(int x, int y)
{int a, b, t, r;
a=x; b=y;
if (a<b)
{t=a; a=b; b=t;}
r=a%b;
while (r!=0)
{a=b; b=r; r=a%b; }
return(b);
22.对下列有向图,求出每个顶点的度、入度和出度以及图的度,并给出其邻接矩阵及邻接表的表示。
解1:
顶点入度出度vi的度
1)303
2)213
3)224
4)134
5)134
6)112
图的度为4。
解2:有向图1的邻接矩阵
000000
100000
100100
010011
111000
001000
第i行非零元素的个数为第i个顶点的出度,
head=p;
else
q->next=p;
q=p;
}
return(head);
}
node *delst( node *head)
{
node *p,*q,*r;
p=head;
r=p;
while(p!=NULL)
{
q=p->next;
while(q!=NULL)
{
if( (q->d)%(p->d)==0)
(1)请还原该二叉树;
(2)写出先序遍历结果。
(1)
(2)ABDFGHIEC
19.依次输入元素序列{ 37,81,43,75,20,10,14,26 },试构造一棵二叉查找树。在这棵二叉查找树中查找33,需要比较多少次?
需要比较3次
20.写出构造二叉查找树的算法,如输入序列:23, 45, 11, 98, 16, 67, 35, 73, 53, 56, 78, 34, 0,输入为0表示序列结束。
第i列非零元素的个数为第i个顶点的入度。
解3:邻接表
顶点vi的出度是第i个链表中的结点个数,
顶点vi的入度,是所有链表中其邻接点域的值为i的结点的个数。
{ if (n = =m) printf("overflow");
else
{ if (n= =0) a[n]= b;
else
{ i=n-1;
while((i>=0)&&(a[i]>b))
{ a[i+1]=a[i];i=i-1;}
a[i+1]= b;
}
n=n+1;
}
return n;
}
5.编写一个算法,将两个线性表合并成一个有序表。
}
16.设一棵完全二叉树具有500个结点。问该完全二叉树有多少个叶子结点?有多少个度为2的结点?有多少个度为1的结点?若完全二叉树有501个结点,再回答上述问题,并说明理由。
(1)叶子结点:250
度为2的结点:249
度为1的结点:1
因为总的结点数是偶数,第一层为一个结点,中间各层均为偶数个结点,因此最后一层是奇数个结点,可知叶子结点只有1个。由性质知,度为0的结点数比度为2的结点数多1,则可推导出上述结论。
{int i,j,k=1,t=0;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
if(a[i][j]!=0)
{t=t+1;
b[k][0]=i;
b[k][1]=j;
b[k++][2]=a[i][j];
}
b[0][0]=m;b[0][1]=n;b[0][2]=t;
return k; //k为三列二维数组中的行数
struct node *p;
n=0;
p=head;
while(p!=NULL)
{n++;
p=p->next;
}
return n;
}
9.用筛选法求1000以内的素数。用单链表存放2~1000的值,编写一个函数删除该单链表中非素数的结点(即剩下的结点中的值均为素数)。
#include <iostream.h>
{
int *p,*q;
q=&a[n/2];
p=a;
if(n==1) return a[0];
else return min(minnum(p,n/2),minnum(q,n/2));
}
4.试写出将一个元素插入到有序线性表中的算法。
参考答案:
int insert(int a[ ], int b, int n ,int m)
参考答案:
btree *insertree(btree *t,int key)
{btree *p,*q;
p=new btree; //申请结点,并插入之
p->data=key;
相关文档
最新文档