北京理工大学数据结构编程练习答案
北京理工大学数据结构编程练习答案
![北京理工大学数据结构编程练习答案](https://img.taocdn.com/s3/m/9eb7c037a300a6c30d229f0e.png)
1.一元多项式相加(10分)成绩: 10 / 折扣: 0.8题目说明:编写一元多项式加法运算程序。
要求用线性链表存储一元多项式(参照课本)。
该程序有以下几个功能:1. 多项式求和输入:输入三个多项式,建立三个多项式链表Pa、Pb、Pc(提示:调用CreatePolyn(polynomial &P,int m)。
输出:显示三个输入多项式Pa、Pb、Pc、和多项式Pa+Pb、多项式Pa+Pb+Pc (提示:调用AddPolyn(polynomial &Pa, polynomial Pb), 调用PrintPolyn(polynomial P))。
0. 退出输入:根据所选功能的不同,输入格式要求如下所示(第一个数据是功能选择编号,参见测试用例):∙ 1多项式A包含的项数,以指数递增的顺序输入多项式A各项的系数(整数)、指数(整数)多项式B包含的项数,以指数递增的顺序输入多项式B各项的系数(整数)、指数(整数)多项式C包含的项数,以指数递增的顺序输入多项式C各项的系数(整数)、指数(整数)∙0 ---操作终止,退出。
输出:对应一组输入,输出一次操作的结果(参见测试用例)。
∙ 1 多项式输出格式:以指数递增的顺序输出: <系数,指数>,<系数,指数>,<系数,指数>,参见测试用例。
零多项式的输出格式为<0,0>∙0 无输出1.#include<iostream>#include<stdlib.h>using std::cin;using std::cout;using std::endl;struct date{int a;int b;struct date* pnext;};typedef struct date DATE;typedef struct date* PDATE;void output(PDATE p){int f=0;p=p->pnext;while(p!=NULL){if(p->a!=0){f=1;cout<<"<"<<p->a<<","<<p->b<<">";if(p->pnext==NULL)cout<<endl;elsecout<<",";}p=p->pnext;}if(f==0)cout<<"<0,0>"<<endl;}void add(PDATE a,PDATE b,PDATE c){PDATE p1,p2,p3;p1=a;p2=b;p3=c;if(p1!=NULL) p1=p1->pnext; //skip head if(p2!=NULL) p2=p2->pnext;while((p1!=NULL)&&(p2!=NULL)){if(p1->b>p2->b){p3->pnext=(PDATE)malloc(sizeof(DATE));p3=p3->pnext;p3->a=p2->a;p3->b=p2->b;p3->pnext=NULL;p2=p2->pnext;}else if(p1->b<p2->b){p3->pnext=(PDATE)malloc(sizeof(DATE));p3=p3->pnext;p3->a=p1->a;p3->b=p1->b;p3->pnext=NULL;p1=p1->pnext;}else{p3->pnext=(PDATE)malloc(sizeof(DATE));p3=p3->pnext;p3->a=p1->a+p2->a;p3->b=p1->b;p3->pnext=NULL;p1=p1->pnext;p2=p2->pnext;}}//end whileif(p1==NULL)p3->pnext=p2;if(p2==NULL)p3->pnext=p1;}int main(){int flag;int n;PDATE P[6]={NULL};PDATE p=NULL;for(int i=0;i<6;i++){P[i]=(PDATE)malloc(sizeof(DATE));P[i]->a=0;P[i]->b=0;P[i]->pnext=NULL;}cin>>flag;if(flag==1){for(int i=1;i<4;i++){p=P[i];cin>>n;while(n--!=0){p->pnext=(PDATE)malloc(sizeof(DATE));p=p->pnext;cin>>p->a>>p->b;p->pnext=NULL;}output(P[i]);}}add(P[1],P[2],P[4]);output(P[4]);add(P[4],P[3],P[5]);output(P[5]);}0 约瑟夫问题(10分)成绩: 10 / 折扣: 0.80 约瑟夫问题成绩10分折扣0.8(本题要求用循环链表实现)0 ,1, 2, 3题,只能选做三题.约瑟夫问题是一个经典的问题。
北京理工大学《数据结构》试题及答案(B卷)
![北京理工大学《数据结构》试题及答案(B卷)](https://img.taocdn.com/s3/m/eb0bc8f319e8b8f67c1cb9a3.png)
一、单项选择题1.算法必须具备的三个特性是( )。
A.可执行性、可移植性、可扩充性B.可执行性、确定性、有穷性C.确定性、有穷性、稳定性D.易读性、稳定性、安全性2.下列数据中,( )是非线性数据结构。
A.栈B.队列C.完全二叉树D.顺序表3.算法分析的两个方面是( )。
A.空间复杂度和时间复杂度B.正确性和简明性C.可读性和文档性D.数据复杂性和程序复杂性4.非空的循环单链表head的尾结点p满足( )。
A.p->next==head B.p->next==NULLC.p==NULL D.p==head5.在单链表指针为p的结点之后插入指针为s的结点,正确的操作是( )。
A.p->next=s;s->next=p->next; B.s->next=p->next;p->next=s;C.p->next=s;p->next=s->next; D.p->next=s->next;p->next=s;6.按照二叉树的定义,具有3个结点的二叉树有( )种。
A.3 B.4C.5 D.67.在一个有向图中,所有顶点的入度之和是所有顶点的出度之和的( )倍。
A.1/2 B.1C.2 D.48.二叉排序树是( )。
A.每一分支结点的度均为2的二叉树B.中序遍历得到一升序序列的二叉树C.按从左到右顺序编号的二叉树D.每一分支结点的值均小于左子树上所有结点的值,大于右子树上所有结点的值9.若用一个大小为6的数组来实现循环队列,且当前rear和front的值分别为0和3,当从队列中删除一个元素,再加入两个元素后,rear和front的值分别是( )。
A.1和 5 B.2和4C.4和2 D.5和110.下列说法中正确的是( )。
A.堆栈是在两端操作、先进后出的线性表B.堆栈是在一端操作、先进先出的线性表C.队列是在一端操作、先进先出的线性表D.队列是在两端操作、先进先出的线性表11.不带头结点的单链表head为空的判定条件是( )。
数据结构第2章习题及答案
![数据结构第2章习题及答案](https://img.taocdn.com/s3/m/d678dbe619e8b8f67d1cb909.png)
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的结点,正确的操作是:()。
奥鹏北理工《数据结构与算法》在线作业标准答案
![奥鹏北理工《数据结构与算法》在线作业标准答案](https://img.taocdn.com/s3/m/cf26e3e625c52cc58bd6beef.png)
C数组的读、写运算只能读取或修改一个数据元素的一部分
D数组的读、写运算只能读取或修改一个数据元素整体
【答案】:B
14.用链接方式存储的队列,在进行插入运算时()。
【选项】:
A仅修改头指针
B头、尾指针都要修改
C仅修改尾指针
D头、尾指针可能都要修改
D队列是在两端操作、后进先出的线性表
【答案】:
3.以下关于线性表的说法不正确的是()。
【选项】:
A线性表中的数据元素可以是数字、字符、记录等不同类型
B线性表中包含的数据元素个数不是任意的
C线性表中的每个结点都有且只有一个直接前趋和直接后继
D存在这样的线性表:表中各结点都没有直接前趋和直接后继
【答案】:C
【选项】:
A栈顶
B栈底
C任意位置
D指定位置
【答案】:A
32.下列排序方法中,排序趟数与序列的原始状态有关的方法是()。
【答案】:D
15.下列说法哪个是不正确的()。
【选项】:
A快速排序属于不稳定排序。
B希尔排序属于不稳定排序。
C直接插入排序属于不稳定排序。
D堆排序属于不稳定排序。
【答案】:
16.设有一个二维数A[m][n],以行序为主序存储。假设A[0][0]存放位置在644(10),A[2][2]存放位置在676(10),每个元素占一个空间,则A[4][5]在()位置,(10)表明用10进数表示。
D选择排序
【答案】:C
29.当待排序列基本有序时,下列排序方法中()最好。
【选项】:
A直接插入排序
B快速排序
C堆排序
D归并排序
数据结构与算法设计-习题1-3
![数据结构与算法设计-习题1-3](https://img.taocdn.com/s3/m/8d2ce36758fb770bf78a55a0.png)
int
data;
struct Lnode *next;
// 数据域 // 指针域
} LNode, *LinkList; LinkList la, lb; // 单链表的头指针 请用 la 和 lb 中的结点合并生成一个新的非 递增的有序单链表 lc。合并完成后,原来的 la 和 lb 成为空链表。
作者 (时间 2000年) 北京理工大学计算机科学工程系 秦怀青 email qinhq010@
正确且高效的算法如下: Status DeleteK(SqList &a ,int i, int k) {//设线性表元素从a.base[1]起存储,从第i个元素起
删除k个元素。
if ( i<1|| k< 0 || (i+k)>a.length) return ERROR;
for ( j=i+k;j<=a.length; ++j)
操作步骤
1) 建空表 Lc; 2) 依次从 La 或 Lb 中“摘取”元素值较小的
结点插入到 Lc 表中第一个结点之前直至其 中一个表变空为止; 3) 继续将 La 或 Lb 其中一个表的剩余结点插 入在 Lc 表的表头结点之后; 4) 释放 La 表和 Lb 表的表头结点。
作者 (时间 2000年) 北京理工大学计算机科学工程系 秦怀青 email qinhq010@
单链表中逻辑上相邻的元素的物理位置 不一定 紧邻。
(3)在单链表中,除了头结点外,任一结点的存储位置 由 该结点的直接前趋 指示。
(4)在单链表中设置头结点的作用是
在表的第一个元素结点之前插入新元素结点或删除 第一个元素结点不需修改头作指者 针(时间 2000年)
数据结构试题大题编程及参考答案
![数据结构试题大题编程及参考答案](https://img.taocdn.com/s3/m/b6cefad6e87101f69f319559.png)
数据结构考试题参考答案1、设顺序表L中的数据元素递增有序。
试写一算法,将数据元素x插入到顺序表L的适当位置,以保持该表的有序性。
解:存储结构为:typedef struct SeqList{ DataType *data;int MaxLen;int len;}SeqList;算法如下:void insertLx(SeqList &L, DataType x){ if(L.len==L.maxlen) return;int i=L.len-1;while(i>=0 && x<L.data[i]){ L.data[i+1]=L.data[i]; i=i-1;}L.data[i+1]=x; L.len++;}2、试写一个算法,在带头结点的单链表L的元素x前插入一个结点y。
解:存储结构如下:typedef struct Lnode{ElemType data;struct Lnode *next;}Lnode, *LinkList;算法如下:void insert_y_before_x(LinkList L, ElemType x, ElemType y){ Lnode *q, *p=L;while(p->next && p->next->data!=x) p=p->next; //找x的前驱结点p;if(!p->next) return; // 若不存在结点x,则返回;q=new Lnode;q->data=y; q->next=p->next; p->next=q;}3、试写一个算法,统计带头指针的单链表L的元素个数。
解:存储结构如下:typedef struct Lnode{ElemType data;struct Lnode *next;}Lnode, *LinkList;算法如下:int length(LinkList L){ int len=0;Lnode *p=L;while(p) { len++; p=p->next; }return len;}注:如果单链表是带头结点的,则算法如下:int length(LinkList L){ int len=0;Lnode *p=L->next;;while(p) { len++; p=p->next; }return len;}4、试写一个算法,在带头结点的单链表L的第k个结点后插入一个结点x。
奥鹏北理工《数据结构与算法》在线作业1标准答案
![奥鹏北理工《数据结构与算法》在线作业1标准答案](https://img.taocdn.com/s3/m/a3a5462eb0717fd5360cdcee.png)
B.链式存储结构
C.线性链表
D.栈
正确答案:A
13.以下关于线性表的说法不正确的是()。
A.线性表中的数据元素可以是数字、字符、记录等不同类型
B.线性表中包含的数据元素个数不是任意的
C.线性表中的每个结点都有且只有一个直接前趋和直接后继
D.存在这样的线性表:表中各结点都没有直接前趋和直接后继
正确答案:A
20.设有50行60列的二维数组A[50][60],其元素长度为4字节,按行优先顺序存储,基地址为200,则元素A[18][25]的存储地址为()。
A.3700
B.4376
C.3900
D.4620
正确答案:D
21.在线性表顺序存储结构下,在第i个元素之前插入新元素一般需要()
A.移动元素
A.692(10)
B.626(10)
C.709(10)
D.724(10)
正确答案:C
8.具有2000个结点的二叉树,其高度至少为()。
A.9
B.10
C.11
D.12
正确答案:C
9.若已知一棵二叉树先序序列为ABCDEFG,中序序列为CBDAEGF,则其后序序列为()。
A.CDBGFEA
B.CDBFGEA
A.只有一棵
B.有一棵或多棵
C.一定有多棵
D.可能不存在
正确答案:B
28.设有7000个无序的元素,希望用最快的速度挑选出其中前5个最大的元素,最好选用()法。
A.冒泡排序
B.快速排序
C.堆排序
D.基数排序
正确答案:C
29.一个栈的入栈序列是abcde,则栈的不可能的输出序列是()。
A.edcba
北京理工大学数据结构试题及答案
![北京理工大学数据结构试题及答案](https://img.taocdn.com/s3/m/b21a174d6529647d272852dc.png)
北京理工大学数据结构 10 年期末试题数据结构试卷(一)、单选题(每题 2 分,共 20 分)1. 栈和队列的共同特点是 ()。
A. 只允许在端点处插入和删除元素B. 都是先进后出C. 都是先进先出D. 没有共同点2. 用链接方式存储的队列,在进行插入运算时 ().A. 仅修改头指针B. 头、尾指针都要修改C.仅修改尾指针D.头、尾指针可能都要修改10.设有 6个结点的无向图,该图至少应有 ()条边才能确保是一个连通图。
A.5B.6C.7D.8二、填空题(每空 1 分,共 26 分)1. 通常从四个方面评价算法的质量: ____________ 、 ________ 、 ________ 和 __________ 。
2. 一个算法的时间复杂度为(n 3+n 2log 2n +i4n )/n 2,其数量级表示为 ____________ 。
3. 假定一棵树的广义表表示为A ( C ,D ( E ,F ,G ),H ( I ,J )),则树中所含的结点数为 __________ 个,树的深度为 ____________ 树的度为 __________ 。
4. 后缀算式 9 2 3 +- 10 2 / -的值为 _________ 。
中缀算式( 3+4X ) -2Y/3 对应的后缀算式 为 ________________________________ 。
5.若用链表存储一棵二叉树时, 每个结点除数据域外, 还有指向左孩子和右孩子的两个指 针。
在这种存储结构中, n 个结点的二叉树共有 ___________ 个指针域,其中有 ________ 个 指针域是存放了地址,有 __________________ 个指针是空指针。
3. 4. 5. 以下数据结构中哪一个是非线性结构? ()A. 队列B. 栈C. 线性表D. 二叉树设有一个二维数组 A [m ][n ],假设A [0][0]存放位置在644伽A [2][2]存放位置在676(io ), 每个元素占一个空间,问A .688B . 树最适合用来表示 (A.有序数据元素A [3][3](IO )存放在什么位置?脚注(io 表示用10进制表示。
北理工计算机体系结构习题解答
![北理工计算机体系结构习题解答](https://img.taocdn.com/s3/m/162bf3d685868762caaedd3383c4bb4cf7ecb7e0.png)
*1
32000 *
2
15000
*
2
8000
*
2)
*
(
40
1 *106
)
3.875*103秒
21
1-11 假设在一台40MHz处理机上运营200,000条指令旳目旳代码,程序主要
由四种指令构成。根据程序跟踪试验成果,已知指令混合比和每种指令所 需旳指令数如下:
指令类型
CPI
指令混合比
算术和逻辑
1
6
第1章 基础知识
仿真
用一种机器(A)旳微程序直接解 释 实 现 另 一 种 机 器 ( B) 旳 指 令 系 统,从而实现软件移植旳措施
被仿真旳机器称为目旳机,进行 仿真旳机器称为宿主机,解释微 程序机器称为仿真微程序
7
第1章 基础知识
并行性
指能够同步进行运算或操作旳特 征,它有两重含义:
40
第2章
(1)最优Huffman H=- ∑Pi×log2Pi
=0.25×2+0.20×2.322+0.15×2.737+ ……
=2.96
41
I10
I9
I8
I7
I6
I5
I4
I3
I2
0.02
0.03
0.04
0.05
0.08
0.08
0.10
0.15
0.20
1
1 0
0
0.05
0.09
1
0
1
0
0.17
原来存在旳事物或属性,从某个角 度看却好象不存在
软件兼容
程序能够不加修改地运营在各档机 器上,区别仅在于运营时间不同
北理工大数据结构作业2
![北理工大数据结构作业2](https://img.taocdn.com/s3/m/b75bd7ff6137ee06eff91888.png)
第三章作业1、写出下列程序段的输出结果。
viod main ( ){ Stack S;char x, y;InitStack (S);x=’c’; y=’k’;Push(S, x); Push(S, ’a’); Push(S, y);Pop(S, x); Push(S, ’t’); Push(S, x);Pop(S, x); Push(S, ’s’);while ( ! StackEmpty(S) ){ Pop(S, y);printf (y);}printf(x);}答:stack2、简述下列算法的功能(栈的元素类型SElemType为int)。
(1)Ststus algo1(Stack S){ int I, n, A[255];n=0;while ( ! StackEmpty(S) ){ n++; Pop(S, A[n]);}for ( i=1; i<=n; i++ )Push(S, A[n]);}答:实现栈中元素的逆置(2)Status algo2(Stack S, int e){ Stack T; int d;InitStack (T);while ( ! StackEmpty(S) ){ Pop(S, d);if ( d!=e ) Push(T, d);}while ( ! StackEmpty(T) ){ Pop (T, d);Push (S, d);}}答:通过栈T的辅助删除栈S中所有值为e的元素3、设有4个元素1、2、3、4依次进栈,而出栈操作可随时进行(进出栈可任意交错进行,但要保证进栈次序不破坏1、2、3、4的相对次序),请写出所有可能的出栈次序。
答:共14种情况,顺序如下:1234,1243,1324,1342,1432,2134,2143,2314,2341,2431,3421,3241,3214,4321。
4、写出下列程序段的输出结果(队列中的元素类型QelemType为char)。
北理工《数据结构与算法》在线作业满分答案
![北理工《数据结构与算法》在线作业满分答案](https://img.taocdn.com/s3/m/71fb883fabea998fcc22bcd126fff705cc175c15.png)
北理工《数据结构与算法》在线作业满分答案
北理工《数据结构与算法》在线作业
试卷总分:100 得分:100
一、单选题
1. 在数据结构中,与所使用的计算机无关的是数据的()结构
A. 逻辑
B. 存储
C. 逻辑和存储
D. 物理
正确答案:A
2.一个n*n对称矩阵,如果以行或列为主序存入内存,则其容量为()。
A. n*n
B. n*n/2
C. n*(n+1)/2
D. (n+1)*(n+1)/2
正确答案:C
3.一个数组第一个元素的存储地址是100,每个数组元素的长度为2,则第5个元素的地址是()。
A. 110
B. 108
C. 100
D. 120
正确答案:B
4.如果结点a有三个兄弟,而且b为a的双亲,则b的度为()。
A. 3
B. 4
C. 5
D. 2
正确答案:B
5. 下面四种内排序方法中,要求容量最大的是()。
A. 插入排序
B. 选择排序
C. 快速排序
D. 归并排序
正确答案:D
6. 采用顺序搜索方法查找长度为n的顺序表时,搜索成功的平均搜索长度为()。
A. n
B. n/2
C. (n-1)/2
D. (n+1)/2
正确答案:D
7. 图的存储结构不包括()
A. 数组表示
B. 邻接表
C. 邻接多重表。
北京理工大学数据结构模拟题答案
![北京理工大学数据结构模拟题答案](https://img.taocdn.com/s3/m/96813cd64028915f804dc2d5.png)
本资料由理硕教育整理,理硕教育是全国唯一专注于北理工考研辅导的学校,相对于其它机构理硕教育有得天独厚的优势。
丰富的理工内部资料资源与人力资源确保每个学员都受益匪浅,确保理硕教育的学员初试通过率89%以上,复试通过率接近100%,理硕教育现开设初试专业课VIP一对一,初试专业课网络小班,假期集训营,复试VIP一对一辅导,复试网络小班,考前专业课网络小班,满足学员不同的需求。
因为专一所以专业,理硕教育助您圆北理之梦。
详情请查阅理硕教育官网数据结构试卷(一)参考答案一、选择题(每题2分,共20分)1.A2.D3.D4.C5.C6.D7.D8.C9.D 10.A二、填空题(每空1分,共26分)1.正确性易读性强壮性高效率2.O(n)3.9 3 34.-1 3 4 X * + 2 Y * 3 / -5.2n n-1 n+16.e 2e7.有向无回路8.n(n-1)/2 n(n-1)9.(12,40)()(74)(23,55,63)10.增加111.O(log2n) O(nlog2n)12.归并三、计算题(每题6分,共24分)1.线性表为:(78,50,40,60,34,90)2.邻接矩阵:邻接表如图11所示:图113. 用克鲁斯卡尔算法得到的最小生成树为: (1,2)3, (4,6)4, (1,3)5, (1,4)8, (2,5)10, (4,7)204. 见图12四、读算法(每题7分,共14分) 1. (1)查询链表的尾结点(2)将第一个结点链接到链表的尾部,作为新的尾结点(3)返回的线性表为(a 2,a 3,…,an ,a 1) 2. 递归地后序遍历链式存储的二叉树。
五、法填空(每空2分,共8 分) true BST->left BST->right 六、编写算法(8分)int CountX(LNode* HL,ElemType x) { int i=0; LNode* p=HL;//i 为计数器 while(p!=NULL) { if (P->data==x) i++; p=p->next;}//while, 出循环时i 中的值即为x 结点个数 return i; }//CountX数据结构试卷(二)参考答案一、选择题1.D2.B3.C4.A5.A6.C7.B8.C二、填空题1.构造一个好的HASH函数,确定解决冲突的方法2.stack.top++,stack.s[stack.top]=x3.有序4.O(n2),O(nlog2n)5.N0-1,2N0+N16.d/27.(31,38,54,56,75,80,55,63)8.(1,3,4,5,2),(1,3,2,4,5)三、应用题1.(22,40,45,48,80,78),(40,45,48,80,22,78)2.q->llink=p; q->rlink=p->rlink; p->rlink->llink=q; p->rlink=q;3.2,ASL=91*1+2*2+3*4+4*2)=25/94.树的链式存储结构略,二叉树略5.E={(1,3),(1,2),(3,5),(5,6),(6,4)}6.略四、算法设计题1.设有一组初始记录关键字序列(K1,K2,…,K n),要求设计一个算法能够在O(n)的时间复杂度内将线性表划分成两部分,其中左半部分的每个关键字均小于K i,右半部分的每个关键字均大于等于K i。
最新北京理工大学级数据结构b试题(a卷)-答案
![最新北京理工大学级数据结构b试题(a卷)-答案](https://img.taocdn.com/s3/m/793e6c0d376baf1ffd4fad2d.png)
一、选择题1、从逻辑结构上可以把数据结构分为【 C 】。
A、动态结构和静态结构B、紧凑结构和非紧凑结构C、线性结构和非线性结构D、内部结构和外部结构2、在一个长度为n的顺序存储的线性表中,向第i个元素(1≤i≤n+1)之前插入一个新元素时,需要从后向前依次后移【 B 】个元素。
A、n-iB、n-i+1C、n-i-1D、i3、链表结构不具有下列【 B 】特点。
A、插入和删除无需移动元素B、可随机访问链表中的任意元素C、无需实现分配存储空间D、所需空间与结点个数成正比。
4、在一个单链表中,已知q所指结点是p所指结点的前驱结点,若在q和p之间插入s结点,则执行【C】。
A、s->next = p->next; p->next = s;B、p->next = s->next; s->next = p;C、q->next = s; s->next = p;D、p->next = s; s->next = q;5、一个栈的入栈序列是1,2,3,4,5,则栈不可能输出的序列是【 C 】。
A、54321B、45321C、43512D、123456、判断一个队列Q(元素最多为M个)为空的条件是【 C 】。
A、Q->rear – Q->front = MB、Q->rear – Q->front -1 ==MC、Q->rear == Q->frontD、Q->rear + 1 == Q->front7、在一个链队列中,假设f和r分别指向队首和队尾,则插入s所指结点的运算是【 A 】。
A、r->next = s; r=s;B、f->next = s; f=s;C、s->next = r; r=s;D、s->next = f; f=s;8、深度为5的二叉树至多有【 A 】个结点。
A、31B、32C、16D、109、在一非空二叉树的中序遍历序列中,根结点的右边【 A 】。
北京理工大学数据结构作业(全)
![北京理工大学数据结构作业(全)](https://img.taocdn.com/s3/m/e767212103020740be1e650e52ea551810a6c937.png)
北京理工大学数据结构作业(全)北理工数据结构作业第二章作业1、在什么情况下用顺序表比链表好?(题集2.3)需要对线性表进行随机存取时,顺序表比链表好。
2、已知L是带表头结点的非空单链表,且P结点既不是首元结点,也不是尾元结点,试从下列提供的答案中选择合适的语句序列。
(题集2.7)a.删除P结点的直接后继结点的语句序列是11 3 14。
b.删除P结点的直接前驱结点的语句序列是10 12 8 3 14。
c.删除P结点的语句序列是10 12 7 3 14。
d.删除首元结点的语句序列是12 11 3 14。
e.删除尾元结点的语句序列是12 11 3 14。
(1)p = p->next;(2)p->next = p;(3)p->next = p->next->next;(4)p = p->next->next;(5)while ( p!=NULL ) p=p->next;(6)while ( q->next!=NULL ) { p=q; q=q->next; }(7)while ( p->next!=q ) p=p->next;(8)while ( p->next->next!=q ) p=p->next;(9)while ( p->next->next!=NULL ) p=p->next;(10)q=p;(11)q=p->next;(12)p=l;(13)l=l->next;(14)free(q);3、算法设计。
设顺序表va中的数据元素递增有序,请设计一算法,将x插入到顺序表的适当位置,以保持该表的有序性。
(题集2.11)typedef struct{ElemType *elem;int length;int listsize;}Sqlist;Status ListInsert_Sq(Sqlist &va , ElemType x){if(va.length==va.listsize) return ERROR;for(i=va.length-1;i>=0&&xva.elem[i+1]=x;va.length++;return OK;}4、算法设计。
北京理工大学智慧树知到“计算机科学与技术”《数据结构与算法》网课测试题答案5
![北京理工大学智慧树知到“计算机科学与技术”《数据结构与算法》网课测试题答案5](https://img.taocdn.com/s3/m/f26871eb85254b35eefdc8d376eeaeaad1f316f1.png)
北京理工大学智慧树知到“计算机科学与技术”《数据结构与算法》网课测试题答案(图片大小可自由调整)第1卷一.综合考核(共15题)1.设有一个二维数A[m][n],以行序为主序存储。
假设A[0][0]存放位置在644(10),A[2][2]存放位置在676(10),每个元素占一个空间,则A[4][5]在()位置,(10)表明用10进数表示。
A.692(10)B.626(10)C.709(10)D.724(10)2.对线性表进行二分查找时,要求线性表必须()。
A.以顺序方式存储B.以链接方式存储C.以顺序方式存储,且结点按关键字有序排列D.以链接方式存储,且结点按关键字有序排列3.对于经常要存取线性表任意指定位置元素的应用,线性表应采用()存储结构。
A.顺序存储结构B.链式存储结构C.线性链表D.栈4.用链接方式存储的队列,在进行插入运算时()。
A.仅修改头指针B.头、尾指针都要修改C.仅修改尾指针D.头、尾指针可能都要修改5.下述几种排序方法中,平均查找长度最小的是()。
A.插入排序B.选择排序C.快速排序D.归并排序6.在线性表顺序存储结构下,在第i个元素之前插入新元素一般需要()A.移动元素B.修改头指针C.队头指针D.申请新的结点空间7.有一个有序表为{1,3,9,12,32,41,45,62,75,77,82,95,100},当采用折半查找值为82的节点时,()次比较后查找成功。
A.1B.2C.4D.88.若采用邻接矩阵法存储一个n个顶点的无向图,则该邻接矩阵是一个()。
A.上三角矩阵B.稀疏矩阵C.对角矩阵D.对称矩阵9.任何一个无向连通图的最小生成树()。
A.只有一棵B.有一棵或多棵C.一定有多棵D.可能不存在10.下列关于AOE网的叙述中,不正确的是()。
A.关键活动不按期完成就会影响整个工程的完成时间B.任何一个关键活动提前完成,那么整个工程将会提前完成C.所有的关键活动提前完成,那么整个工程将会提前完成D.某些关键活动提前完成,那么整个工程将会提前完成11.栈与一般的线性表的区别在于()。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.一元多项式相加(10分)成绩: 10 / 折扣: 0.8题目说明:编写一元多项式加法运算程序。
要求用线性链表存储一元多项式(参照课本)。
该程序有以下几个功能:1. 多项式求和输入:输入三个多项式,建立三个多项式链表Pa、Pb、Pc(提示:调用CreatePolyn(polynomial &P,int m)。
输出:显示三个输入多项式Pa、Pb、Pc、和多项式Pa+Pb、多项式Pa+Pb+Pc (提示:调用AddPolyn(polynomial &Pa, polynomial Pb), 调用PrintPolyn(polynomial P))。
0. 退出输入:根据所选功能的不同,输入格式要求如下所示(第一个数据是功能选择编号,参见测试用例):∙ 1多项式A包含的项数,以指数递增的顺序输入多项式A各项的系数(整数)、指数(整数)多项式B包含的项数,以指数递增的顺序输入多项式B各项的系数(整数)、指数(整数)多项式C包含的项数,以指数递增的顺序输入多项式C各项的系数(整数)、指数(整数)∙0 ---操作终止,退出。
输出:对应一组输入,输出一次操作的结果(参见测试用例)。
∙ 1 多项式输出格式:以指数递增的顺序输出: <系数,指数>,<系数,指数>,<系数,指数>,参见测试用例。
零多项式的输出格式为<0,0>∙0 无输出1.#include<iostream>#include<stdlib.h>using std::cin;using std::cout;using std::endl;struct date{int a;int b;struct date* pnext;};typedef struct date DATE;typedef struct date* PDATE;void output(PDATE p){int f=0;p=p->pnext;while(p!=NULL){if(p->a!=0){f=1;cout<<"<"<<p->a<<","<<p->b<<">";if(p->pnext==NULL)cout<<endl;elsecout<<",";}p=p->pnext;}if(f==0)cout<<"<0,0>"<<endl;}void add(PDATE a,PDATE b,PDATE c){PDATE p1,p2,p3;p1=a;p2=b;p3=c;if(p1!=NULL) p1=p1->pnext; //skip head if(p2!=NULL) p2=p2->pnext;while((p1!=NULL)&&(p2!=NULL)){if(p1->b>p2->b){p3->pnext=(PDATE)malloc(sizeof(DATE));p3=p3->pnext;p3->a=p2->a;p3->b=p2->b;p3->pnext=NULL;p2=p2->pnext;}else if(p1->b<p2->b){p3->pnext=(PDATE)malloc(sizeof(DATE));p3=p3->pnext;p3->a=p1->a;p3->b=p1->b;p3->pnext=NULL;p1=p1->pnext;}else{p3->pnext=(PDATE)malloc(sizeof(DATE));p3=p3->pnext;p3->a=p1->a+p2->a;p3->b=p1->b;p3->pnext=NULL;p1=p1->pnext;p2=p2->pnext;}}//end whileif(p1==NULL)p3->pnext=p2;if(p2==NULL)p3->pnext=p1;}int main(){int flag;int n;PDATE P[6]={NULL};PDATE p=NULL;for(int i=0;i<6;i++){P[i]=(PDATE)malloc(sizeof(DATE));P[i]->a=0;P[i]->b=0;P[i]->pnext=NULL;}cin>>flag;if(flag==1){for(int i=1;i<4;i++){p=P[i];cin>>n;while(n--!=0){p->pnext=(PDATE)malloc(sizeof(DATE));p=p->pnext;cin>>p->a>>p->b;p->pnext=NULL;}output(P[i]);}}add(P[1],P[2],P[4]);output(P[4]);add(P[4],P[3],P[5]);output(P[5]);}0 约瑟夫问题(10分)成绩: 10 / 折扣: 0.80 约瑟夫问题成绩10分折扣0.8(本题要求用循环链表实现)0 ,1, 2, 3题,只能选做三题.约瑟夫问题是一个经典的问题。
已知n个人(不妨分别以编号1,2,3,…,n 代表)围坐在一张圆桌周围,从编号为 k 的人开始,从1开始顺时针报数1, 2, 3, ...,顺时针数到m 的那个人,出列并输出。
然后从出列的下一个人开始,从1开始继续顺时针报数,数到m的那个人,出列并输出,…依此重复下去,直到圆桌周围的人全部出列。
输入:n,k,m输出:按照出列的顺序依次输出出列人的编号,编号中间相隔一个空格,每10个编号为一行。
非法输入的对应输出如下a)输入::n、k、m任一个小于1输出:n,m,k must bigger than 0.b)输入:k>n输出:k should not bigger than n.例输入9,3,2输出4 6 8 1 3 7 2 9 5#include<stdio.h>#include<stdlib.h>#include<math.h>struct date{int a;struct date* next;};typedef struct date DATE;typedef struct date* PDATE;PDATE setnew(PDATE p,int a){PDATE pt;pt=(PDATE) malloc (sizeof(DATE));pt->a=a;pt->next=p->next;p->next=pt;return pt;}int count;PDATE del(PDATE p0){if(!count){printf("\n");count=10;}printf("%d ",p0->a);PDATE p=p0->next;p0->a=p->a;p0->next=p->next;free(p);count--;return p0;}int main(){count=10;int n=0,k=0,m=0;scanf("%d,%d,%d",&n,&m,&k);if(!(n>0&&m>0&&k>0))printf("n,m,k must bigger than 0.\n");else if(m>n)printf("k should not bigger than n.\n");else{PDATE p=NULL;PDATE head=(DATE *)malloc(sizeof(DATE));head->next=head;head->a=1;p=head;for(int i=2;i<=n;i++)p=setnew(p,i);while(p->a!=m)p=p->next;while(n){// int temp=k;int temp=k%n+n;while(--temp)p=p->next;del(p);n--;}printf("\n");}}2. 综教楼后的那个坑成绩: 10 / 折扣: 0.8描述在 LIT 综教楼后有一个深坑,关于这个坑的来历,有很多种不同的说法。
其中一种说法是,在很多年以前,这个坑就已经在那里了。
这种说法也被大多数人认可,这是因为该坑有一种特别的结构,想要人工建造是有相当困难的。
从横截面图来看,坑底成阶梯状,由从左至右的 1..N 个的平面构成(其中1 ≤ N ≤ 100,000),如图:** :** :** 8**** 7**** 6**** 5********** 4 <- 高度********** 3************** 2************** 1平面| 1 |2| 3 |每个平面 i 可以用两个数字来描述,即它的宽度 Wi 和高度 Hi,其中 1 ≤Wi ≤1,000、1 ≤ Hi ≤ 1,000,000,而这个坑最特别的地方在于坑底每个平面的高度都是不同的。
每到夏天,雨水会把坑填满,而在其它的季节,则需要通过人工灌水的方式把坑填满。
灌水点设在坑底位置最低的那个平面,每分钟灌水量为一个单位(即高度和宽度均为 1)。
随着水位的增长,水自然会向其它平面扩散,当水将某平面覆盖且水高达到一个单位时,就认为该平面被水覆盖了。
请你计算每个平面被水覆盖的时间。
灌水水满后自动扩散| |*| * * | * ***V * * V * *** * * .... **~~~~~~~~~~~~** ** * *~~~~** : **~~~~**~~~~~~** ** * *~~~~** : **~~~~**~~~~~~** ** * *~~~~**~~~~~~* * ~~~~**~~~~~~** ********* *~~~~********* *~~~~* *********~~~~********* *~~~~********* *~~~~**** ******************* ************** ********* ******************* ************** ********* *****4 分钟后26 分钟后50 分钟后平面 1 被水覆盖平面 3 被水覆盖平面 2 被水覆盖输入输入的第一行是一个整数 N,表示平面的数量。