北科大数据结构上机题代码
北京科技大学C++上机作业答案

特别注意事项:仅供参考1,文件名“40862533_王小小_数学0801_实验1.doc”中的实验1指的是第几次上机实验,与“实验指导书”中的实验几没有关系;2,文件名“40862533_王小小_数学0801_实验1.doc”中的doc是文件扩展名,请注意不要提交如“*******.doc.doc”的文件;3,上机实验作业一律以word形式提交;4,若上机实验有多个作业,请按照下列加粗方式给每个作业命名,如:实验1_1,实验1_25,实验作业的word文件的页眉不可少,请每次注意修改;6,每个实验作业均要给出比较详细的程序说明,且程序说明位于程序之后。
程序说明是特别重点考察的部分,请按照你的理解进行撰写;7,该部分“特别注意事项”可以随同作业一并提交,请提交作业前进行对照。
实验1_1/***********************************程序功能: 输出一个字符串***********************************/#include "stdafx.h"#include<iostream>using namespace std;void main(){cout<<"This is a C++ program.\n";}程序说明:该程序由一个main函数构成,main函数中的语句cout是一个函数调用语句,其基本功能是实现标准的输出。
实验1_2/***********************************程序功能:比较两个数字大小***********************************/#include "stdafx.h"#include <iostream>using namespace std;int max(int,int);//定义main函数void main(){int a,b,c;cout<<"input two number"<<endl;cin>>a>>b;c=max(a,b);cout<<"max="<<c<<endl;}int max(int x,int y)//输入xy 两个参数{int z;if(x>y) z=x;else z=y;//简单的if else语句,通过这语句,将xy中较大的赋给zreturn(z);}程序说明:先是输入两个数字,比较大小,并输出。
2022年北京科技大学计算机科学与技术专业《数据结构与算法》科目期末试卷A(有答案)

2022年北京科技大学计算机科学与技术专业《数据结构与算法》科目期末试卷A(有答案)一、选择题1、用有向无环图描述表达式(A+B)*((A+B)//A),至少需要顶点的数目为()。
A.5B.6C.8D.92、若需在O(nlog2n)的时间内完成对数组的排序,且要求排序是稳定的,则可选择的排序方法是()。
A.快速排序B.堆排序C.归并排序D.直接插入排序3、线性表的顺序存储结构是一种()。
A.随机存取的存储结构B.顺序存取的存储结构C.索引存取的存储结构D.Hash存取的存储结构4、循环队列A[0..m-1]存放其元素值,用front和rear分别表示队头和队尾,则当前队列中的元素数是()。
A.(rear-front+m)%mB.rear-front+1C.rear-front-1D.rear-front5、已知有向图G=(V,E),其中V={V1,V2,V3,V4,V5,V6,V7}, E={<V1,V2>,<V1,V3>,<V1,V4>,<V2,V5>,<V3,V5>, <V3,V6>,<V4,V6>,<V5,V7>,<V6,V7>},G的拓扑序列是()。
A.V1,V3,V4,V6,V2,V5,V7B.V1,V3,V2,V6,V4,V5,V7C.V1,V3,V5,V2,V6,V7D.V1,V2,V5,V3,V4,V6,V76、已知字符串S为“abaabaabacacaabaabcc”,模式串t为“abaabc”,采用KMP算法进行匹配,第一次出现“失配”(s!=t)时,i=j=5,则下次开始匹配时,i和j的值分别()。
A.i=1,j=0 B.i=5,j=0 C.i=5,j=2 D.i=6,j=27、下列叙述中,不符合m阶B树定义要求的是()。
A.根结点最多有m棵子树 B.所有叶结点都在同一层上C.各结点内关键字均升序或降序排列 D.叶结点之间通过指针链接8、已知一棵二叉树的前序遍历结果为ABCDEF,中序遍历结果为CBAEDF,则后序遍历结果为()。
(NEW)北京科技大学871计算机综合一(含计算机组成原理、数据结构)历年考研真题汇编

(C)内存 (D)闪存 【答案】B
6 关于DRAM刷新的说法中错误的是( )
(A)刷新是通过对存储单元进行“读但不输出数据”的操作来实现的 (B)刷新时指对DRAM中的存储电容重新充电 (C)由于DRAM内部设有专门的刷新电路,所以访存期间允许刷新 (D)刷新是按行进行的 【答案】C 【解析】DRAM访期间可以刷新,存储期间不可以
2013年北京科技大学869计算机组 成原理考研真题及答案详解
一、选择(满分20分,每题1分) 1 计算机中采用补码运算的目的是为了( ) (A)与手工运算方式保持一致 (B)提高运算速度 (C)简化计算机的设计 (D)提高运算的精度 【答案】C 【解析】化减为加,简化计算机的设计
目 录
871计算机综合一(含计算机组成原理、数据结构)考试大纲及参考书 1998年北京科技大学数据结构考研真题及答案 1999年北京科技大学计算机组成原理考研真题 1999年北京科技大学数据结构考研真题及答案 2000年北京科技大学计算机组成原理考研真题 2000年北京科技大学数据结构考研真题及答案 2001年北京科技大学计算机组成原理考研真题 2001年北京科技大学数据结构考研真题及答案 2002年北京科技大学数据结构考研真题及答案 2003年北京科技大学数据结构考研真题及答案 2004年北京科技大学468数据结构及软件工程考研真题及数据结构部分 答案 2005年北京科技大学468数据结构及软件工程考研真题及数据结构部分 答案 2006年北京科技大学416计算机组成原理及数据结构考研真题及答案 2007年北京科技大学416计算机组成原理及数据结构考研真题及答案
案
2007年北京科技大学416计算机组 成原理及数据结构考研真题及答
北京科技大学2015年数据结构与算法分析试卷+答案

装 订 线 内 不 得 答 题自觉遵 守考 试 规 则,诚 信 考 试,绝 不作 弊(A) 空或只有一个结点 (B) 高度等于其结点数(C) 任一结点无左孩子 (D) 任一结点无右孩子6.一趟排序结束后不一定能够选出一个元素放在其最终位置上的是( )。
(A) 堆排序 (B) 冒泡排序 (C) 快速排序 (D) 希尔排序7.设某棵二叉树中只有度数为0和度数为2的结点且度数为0的结点数为n,则这棵二叉中共有()个结点。
(A) 2n (B) n+l (C) 2n-1 (D) 2n+l8.顺序查找不论在顺序线性表中还是在链式线性表中的时间复杂度为( )。
(A) O(n) (B) O(n2) (C) O(n1/2) (D) O(1og2n)9. 下列程序段的时间复杂度为()。
i=0,s=0; while (s<n) {s=s+i;i++;}(A) O(n1/2) (B) O(n1/3) (C) O(n) (D) O(n2)10. 深度为k的完全二叉树中最少有( )个结点。
(A) 2k-1-1 (B) 2k-1 (C) 2k-1+1 (D) 2k-111.设指针变量front表示链式队列的队头指针,指针变量rear表示链式队列的队尾指针,指针变量s指向将要入队列的结点X,则入队列的操作序列为( )。
(A) front->next=s;front=s; (B) s->next=rear;rear=s;(C) rear->next=s;rear=s; (D) s->next=front;front=s;12.设某无向图中有n个顶点e条边,则建立该图邻接表的时间复杂度为( )。
(A) O(n+e) (B) O(n2) (C) O(ne) (D) O(n3)13.设某哈夫曼树中有199个结点,则该哈夫曼树中有( )个叶子结点。
(A) 99 (B) 100 (C) 101 (D) 10214.设无向图G中的边的集合E={(a,b),(a,e),(a,c),(b,e),(e,d),(d,f),(f,c)},则从顶点a出发进行深度优先遍历可以得到的一种顶点序列为()。
北京科技大学数据结构上机考试

《认识实习》数学信计15考试报告(2017.07.14)N = Convert.ToInt32(textBox1.Text);k = new int[N, myn];sum = new int[this.N];ave = new float[this.N];float num = 0f;Random random = new Random();Brush brush = new SolidBrush(Color.Red);for (int i = 0; i < N; i++){sum[i] = 0;for (int j = 0; j < myn; j++){float num2 = (float)random.NextDouble();float num3 = 0f;for (int k = 0; k < mym; k++){if (k == 0){num3 = P0[0];}else{num3 += P0[k];}if (num2 <= num3){this.k[i, j] = k + 1;break;}}sum[i] += k[i, j];}num += (float)this.sum[i];ave[i] = num / (float)(i + 1);m2.Clear(Color.White);lenx = (float)this.pictureBox2.ClientSize.Width / m2.DpiX;leny = (float)this.pictureBox2.ClientSize.Height / m2.DpiY;Pen pen = new Pen(Color.YellowGreen, 1f / m2.DpiY);float num4;for (int k = 1; k < mym; k++){num4 = (float)k * leny / (float)this.mym;m2.DrawLine(pen, 0f, num4, lenx, num4);}float num5;for (int j = 1; j < myn; j++){num5 = (float)j * lenx / (float)this.myn;m2.DrawLine(pen, num5, 0f, num5, leny);}for (int j = 0; j < myn; j++){num5 = ((float)j + 0.5f) * lenx / (float)this.myn;num4 = ((float)this.k[i, j] - 0.5f) * leny / (float)this.mym;m2.FillEllipse(brush, num5, num4, 0.2f, 0.2f);}lenx = (float)this.pictureBox1.ClientSize.Width / m1.DpiX;leny = (float)this.pictureBox1.ClientSize.Height / m1.DpiY;num5 = ((float)i + 0.5f) * lenx / (float)this.N;num4 = ((float)(this.sum[i] - myn) + 0.5f) * leny / (float)(this.mym * myn - myn + 1); m1.FillEllipse(brush, num5, num4, 0.05f, 0.05f);Pen pen2 = new Pen(Color.Gold, 1f / m3.DpiY);if (i > 0){float num6 = (float)(this.mym * myn - myn + 1) - ave[i - 1];float num7 = (float)(this.mym * myn - myn + 1) - ave[i];m3.DrawLine(pen2, (float)(((double)i - 0.5) * (double)this.X3), num6 * Y3, (float)(((double)i + 0.5) * (double)this.X3), num7 * Y3);}if (this.checkBox1.Checked){Thread.Sleep((int)Convert.ToInt16(this.textBox2.Text));}}5.在左下角,画出横线为随机变量的期望,累计平均值Count(this.textBox5.Text);maxy = 0f;for (int i = 1; i <= myn; i++){for (int j = 1; j <= mym * i; j++){if (this.Pn[j - 1, i - 1] > maxy){maxy = Pn[j - 1, i - 1];}}}m4 = pictureBox4.CreateGraphics();m4.Clear(Color.White);m4.PageUnit = GraphicsUnit.Inch;lenx = (float)this.pictureBox4.ClientSize.Width / m4.DpiX;leny = (float)this.pictureBox4.ClientSize.Height / m4.DpiY; X4 = lenx / (float)(this.mym * myn);Y4 = leny / maxy;Brush brush = new SolidBrush(Color.FromArgb(255, 0, 0, 255));PointF pt = new PointF(0f, 0f);PointF pt2 = new PointF(0f, 0f);for (int i = 1; i <= myn; i++){m4.Clear(Color.White);for (int j = i; j <= mym * i; j++){if ((double)this.Pn[j - 1, i - 1] > 0.001){pt.X = (float)j * X4;pt.Y = (this.maxy - Pn[j - 1, i - 1]) * Y4;m4.FillRectangle(brush, pt.X, pt.Y, X4 / 2f, Pn[j - 1, i - 1] * Y4); }}Thread.Sleep(500);}float啊 = this.啊;float哦 = this.哦;float num = 0.1f;int num2 = (int)(6.0 * Math.Sqrt((double)哦) / (double)num) + 1;PointF[] array = new PointF[num2];Pen pen = new Pen(Color.FromArgb(255, 255, 0, 0), 2f / m4.DpiY);int num3 = 0;int num4 = 0;for (float num5 = (float)((double)啊 - 3.0 * Math.Sqrt((double)哦)); num5 <= (float)((double)啊 + 3.0 * Math.Sqrt((double)哦)); num5 += num){float num6 = 1f / (float)Math.Sqrt(6.2831852 * (double)哦) *(float)Math.Exp((double)(-(double)(num5 - 啊) * (num5 - 啊) / (2f * 哦)));float x = num5 * X4;float y = (this.maxy - num6) * Y4;array[num3].X = x;array[num3].Y = y;num3++;if (num4 == 0){pt.X = x;pt.Y = y;num4 = 1;}else{pt2.X = x;pt2.Y = y;m4.DrawLine(pen, pt, pt2);pt.X = pt2.X;pt.Y = pt2.Y;}Thread.Sleep(10);}。
北科大C语言程序设计试验报告8指针_练习题代码2次上机课内容-

.
说明:
完成。
本次上机内容分两次上机1.
”,按照本说明完成以下实验内容;班级_姓名__Lab8.doc2.将本文档改名为“学号周周日前通过课程中心提交本文档。
3.在16P148)
(实验指导实验内容和实验要求练习题一1.运
练习题二2.ARR_SIZE
改为STU纠错:int FindMax( int score[][STU], int n, int m, int *pRow, int *pCol ) 运行结果截图:
.. .
..
.
3.练习题三运行结果截图:
思考题及问题:①答案:.. .
②答案:
练习题四4.运行结果截图:
..
.
练习题五5.运行结果截图:
..
.
练习题六6.运行结果截图:.. .
思考题及问题:
②答案:..
.
源程序文本(修改部分红色字体标注)
自测练习自测练习一1.源程序文本:
运行结果截图:
自测练习二2.源程序文本:
运行结果截图:..
.
自测练习三3.源程序文本:
自测练习四4.源程序文本:
自测练习五5.修改后的源程序文本(修改部分红色字体标注):
运行结果截图:..
.
自测练习六(选做)6.
..。
《数据结构》第一次上机测试代码部分(最新版)

第一次《数据结构》上机测试代码题目分配:本次测试一共三个大题目,包括A)顺序表的基本操作,B)单链表的基本操作及C)栈和队列的操作。
1、题目一有3个小题目,每位同学只需做其中一题即可,做题序号由学号后两位模3决定。
若模出来结果为1,则做第1道;结果为2,则做第2道;结果为0,做第3道。
2、题目二也有3个小题目,每位同学只需做其中一题即可,做题序号同题目一。
3、题目三所有同学都做。
该题目有2个测试用例,测试用例由学号后一位模2决定。
若模出来结果为1,则用第1个测试用例;结果为0,则用第2个测试用例。
注意事项:1、每个同学在D:盘下新建一个文件夹,以“班级+学号+姓名”形式命名,如:2班20120102张三。
该文件夹中应该包含三个子文件夹,包括了所有作业。
2、三个子文件夹分别对应三个试题,分别命名为:1)顺序表、2)链表、及3)栈和队列。
将相应题目的工程建于各文件夹下。
(也即,顺序表文件夹应该有顺序表的操作的工程文件)3、考试结束,请各位同学在座位上,等待监考老师确认你的考题之后方可签字离开。
第一部分线性表题目一:*************头文件sequential.h***********************#ifndef _FUNC_H#define _FUNC_H//函数结果状态代码#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2#define LIST_INIT_SIZE 100#define LISTINCREMENT 10typedef int Status;//Status是函数的类型,其值是函数结果状态代码typedef int ElemType;//数据元素的类型ElemType为inttypedef struct {ElemType * elem;int length;int listsize;}SqList;extern Status InitList_sq (SqList &L);//初始化一个空的顺序表Lextern Status BuildList_sq (SqList &L, int n);//构造由n个元素构成的顺序表Lextern Status ListInsert_sq (SqList &L, int i, ElemType e);//在顺序表L中第i个位置插入新元素e,插入成功,返回1(OK),否则返回0(ERROR)extern Status ListDelete_sq (SqList &L, int i, ElemType &e);//在顺序线性表L中删除第i个元素,并用e 返回其值,删除成功,返回1(OK),否则返回0(ERROR)extern Status LocateElem_sq (SqList &L,ElemType e); //定位元素e,定位成功,函数返回该元素在顺序表中的位置,否则返回0extern Status ClearList_sq(SqList &L); //清空顺序表extern Status ListTraverse_sq (SqList L);//遍历顺序表extern void menu();//选择菜单#endif************************************************************************************** *********************************************************************************************************功能函数function.cpp*********************#include <stdlib.h>#include "stdio.h"#include "sequential.h"Status InitList_sq (SqList &L){//初始化一个空的顺序表LL.elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType));if (! L.elem) return ERROR;L.length = 0;L.listsize = LIST_INIT_SIZE;return OK;}//end of InitListStatus BuildList_sq(SqList &L, int n){//构造由n个元素构成的顺序表Lif (L.length >= L.listsize){ElemType * newbase = (ElemType *)realloc(L.elem,(L.listsize + LISTINCREMENT) * sizeof(ElemType));if (!newbase) return ERROR;L.elem = newbase;L.listsize += LISTINCREMENT;}ElemType e;for (int i = 0; i<n; i++){printf("第%d个元素的值为:",i+1);scanf("%d", &e);L.elem[i]=e;}return OK;}//依次访问L中的每个数据元素并输出其值Status ListTraverse_sq (SqList L){int i = 0;if (! L.elem) return ERROR;while (i < L.length){printf("%d ", L.elem[i]);i++;}printf("\n");return OK;}Status ClearList_sq(SqList &L){//清空顺序表if (! L.elem) return ERROR;L.elem = NULL;L.length = 0;L.listsize = 0;return OK;}Status ListInsert_sq (SqList &L, int i, ElemType e){//在顺序表L中第i个位置插入新元素e,插入成功,返回1(OK),否则返回0(ERROR)return OK;}//end of ListInsertStatus ListDelete_sq (SqList &L, int i, ElemType &e){//在顺序线性表L中删除第i个元素,并用e返回其值,删除成功,返回1(OK),否则返回0(ERROR)return OK;}Status LocateElem_sq(SqList &L, ElemType e){ //定位元素e,定位成功,函数返回该元素在顺序表中的位置,否则返回0return 0;}//打印菜单void menu(){printf("\n请选择操所\n");printf("1.插入元素\n");printf("2.删除元素\n");printf("3.定位元素\n");printf("4.遍历顺序表\n");printf("0.清空线性表,并退出\n");}************************************************************************************** ************************************************************************************** *****************主函数sequential.cpp**************************#include <stdio.h>#include "sequential.h"void main(){SqList L;int i=0;ElemType e = 0;if (!InitList_sq(L)) printf("建立空线性表失败,请重启程序\n");else{printf("请输入需要建立的元素个数,输入0表示退出\n");scanf("%d", &L.length);printf("请逐个输入整数型元素:\n");if (!BuildList_sq(L, L.length)) printf("建立线性表失败,请重新输入\n");else{char choice = 1;while(choice){menu();scanf("%d", &choice);switch(choice){case 1:break;case 2:break;case 3:break;case 4:ListTraverse_sq(L);break;}//end of switch} //end of while}//end of buildlist}//end of initlist}题目二:******* 头文件linked .h****************************** #ifndef _FUNC_H#define _FUNC_H//函数结果状态代码#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2#define LIST_INIT_SIZE 100#define LISTINCREMENT 10//Status是函数的类型,其值是函数结果状态代码typedef int Status;typedef int ElemType;typedef struct LNode {ElemType data; // 数据域struct LNode *next; // 指针域} LNode, *LinkList;extern Status ListInsert_L(LinkList L, int i, ElemType e);//向链表的i位置中插入元素e,如果插入成功,函数返回1,否则返回0:extern Status ListDelete_L(LinkList L, int i, ElemType &e);//删除链表i位置元素,并用e返回,如果删除成功,函数返回1,否则返回0:extern Status LocateElem(LinkList L,ElemType e);//定位元素e在链表中的位置,存在返回该元素的位序,否则返回0;extern void ClearList(LinkList &L);//清空链表extern void CreateListe_L(LinkList &L,int n );//创建链表extern Status ListTravel_L(LinkList L);//遍历链表extern void menu();//菜单#endif************************************************************************************** ************************************************************************************* ********功能函数function.cpp***************************#include <stdlib.h>#include "stdio.h"#include "linked .h"void CreateListe_L(LinkList &L,int n ){//生成链表L=(LinkList)malloc(sizeof(LNode));L->next=NULL;LinkList q=L;for (int i=1;i<=n;i++){LinkList p=(LinkList)malloc(sizeof(LNode));scanf("%d",&p->data);q->next=p;q=p;}q->next=NULL;}Status ListTravel_L(LinkList L){//遍历链表LinkList p;if (!L) return ERROR;printf("链表为:");p=L->next;while (p){printf("%d ",p->data);p=p->next;}return OK;}void ClearList(LinkList &L){//清除链表while ( L->next){LinkList p=L->next;L->next = p->next;free(p);}}Status ListInsert_L(LinkList L, int i, ElemType e){//向链表的i位置中插入元素e,如果插入成功,函数返回1,否则返回0return OK;}//end of ListInsertStatus ListDelete_L(LinkList L, int i, ElemType &e){//删除链表i位置元素,并用e返回,如果删除成功,函数返回1,否则返回0 return OK;}Status LocateElem(LinkList L,ElemType e){//定位元素e在链表中的位置,存在返回该元素的位序,否则返回0}void menu(){//菜单printf("\n**********************\n");printf("1.插入元素\n");printf("2.删除元素\n");printf("3.定位元素\n");printf("4.遍历链表\n");printf("0.清空链表,并退出\n");printf("\n**********************\n");}************************************************************************************** ************************************************************************************** *****************主函数linked .cpp*******************************#include <stdio.h>#include <stdlib.h>#include " linked.h"void main(){LinkList L=(LinkList)malloc(sizeof (LNode));L->next = NULL;int i;int n;ElemType e = 0;char choice = 1;printf("请输入要建立的链表元素个数:");scanf("%d", &n);CreateListe_L(L, n);while(choice){menu();scanf("%d", &choice);switch(choice){case 1:break;case 2:break;case 3:break;case 4:break;}//end of switch} //end of while}题目三:***********************头文件3.h*******************************#ifndef _FUNC_H#define _FUNC_H#define STACK_SIZE 3 //顺序栈的深度为3typedef char SElemType;//栈元素的类型为chartypedef struct {SElemType *base;SElemType *top;int stacksize;} SqStack;//顺序栈extern int InitStack (SqStack &s);//构造栈extern int POP (SqStack &s, SElemType &e);//S栈顶元素出栈,赋给变量e;extern int PUSH (SqStack &s, SElemType e);//元素e入S栈;extern int StackEmpty(SqStack s);//判S栈是否为空extern int EnQueue(SqStack &S1, SqStack &S2,SElemType x);//利用两量栈S1,S2实现元素x的入对列extern int QueueEmpty(SqStack S1,SqStack S2);//判队列是否为空算法extern int DeQueue(SqStack &S2,SqStack &S1,SElemType &x);//利用两量栈S1,S2实现元素x的出对列,成功返回1,否则返回0extern void menu();//菜单extern void TravelQueue(SqStack S1, SqStack S2);//遍历队列#endif************************************************************************************** ************************************************************************************** *****************功能函数function.h**************************************#include <stdio.h>#include <stdlib.h>#include "3.h"int InitStack (SqStack &s){//初始化顺序栈ss.base=(SElemType*)malloc(STACK_SIZE * sizeof (SElemType));if (!s.base) return 0; //存储分配失败s.top = s.base;s.stacksize = STACK_SIZE;return 1;}int POP (SqStack &s, SElemType &e) {// 出栈操作,并用e返回栈顶if (s.top == s.base) return 0; // 若栈空,返回ERRORe = *--s.top; //不空,用形参e返回其值return 1; //返回OK;}int PUSH (SqStack &s, SElemType e) {// 入栈操作if (s.top - s.base >= s.stacksize) return 0; //栈满,返回ERROR*s.top++ = e; //*S.top=e;S.top++;return 1;}int StackEmpty(SqStack s){//判断栈S是否为空,为空,返回OK,否则返回ERRORif (s.base == s.top) return 1;return 0;}void menu(){//菜单printf("\n**********************\n");printf("1:入队列\n");printf("2:出队列\n");printf("3:判空\n");printf("4:遍历\n");printf("0.退出\n");printf("\n**********************\n");}//遍历队列void TravelQueue(SqStack S1, SqStack S2){SElemType *p_S1, *p_S2;printf("队列中的元素为:\n");for( p_S2=S2.top-1; p_S2>=S2.base; p_S2--)printf("%c--",*p_S2);for(p_S1=S1.base ; p_S1<S1.top ; p_S1++)printf("%c--",*p_S1);}//利用两量栈S1,S2实现元素x的入对列int EnQueue(SqStack &S1, SqStack &S2,SElemType x){//将x入队列,若入队列成功返回1,否则返回0。
北京科技大学20数据结构与算法分析试卷答案

北京科技大学 2015--2016学年 第 1 学期数据结构与算法分析 试卷院(系) 班级 学号 姓名试卷卷面成绩占课程考核成绩70% 平时成绩占30% 课程考核成绩 题号 一 二 三 四 五 六 七 小计 得分一、(30分)选择题 1.设一组权值集合W={2,3,4,5,6},则由该权值集合构造的哈夫曼树中带权路径长度之和为( )。
(A) 20 (B) 30 (C) 48 (D) 452.执行一趟快速排序能够得到的序列是( )。
(A) [41,12,34,45,27] 55 [72,63] (B) [45,34,12,41] 55 [72,63,27] (C) [63,12,34,45,27] 55 [41,72] (D) [12,27,45,41] 55 [34,63,72]3. 设指针变量p 指向单链表中结点A ,若删除单链表中结点A ,则需要修改指针的操作序列为( )。
(A) q=p->next ;p->data=q->data ;p->next=q->next ;free(q); (B) q=p->next ;q->data=p->data ;p->next=q->next ;free(q); (C) q=p->next ;p->next=q->next ;free(q); (D) q=p->next ;p->data=q->data ;free(q);4.时间复杂度不受数据初始状态影响而恒为O(nlog2n)的是( )。
(A) 堆排序 (B) 冒泡排序 (C) 希尔排序 (D) 快速排序5.设二叉树的先序遍历序列和后序遍历序列正好相反,则该二叉树满足的条件是( )。
得 分装 订 线 内 不 得 答 题自觉遵 守考 试 规 则,诚 信 考 试,绝 不作 弊(A) 空或只有一个结点 (B) 高度等于其结点数(C) 任一结点无左孩子 (D) 任一结点无右孩子6.一趟排序结束后不一定能够选出一个元素放在其最终位置上的是( )。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
北科大数据结构上机题代码《数据结构》上机题1、输入数据建立单链表,并求相邻两节点data值之和为最大的第一节点。
例如输入:26473 0,建立:所求结果=4 程序结构:类型说明;建表函数:Creatlist(L); 求值函数:Adjmax(L);main( ){ 变量说明;调用Creatlist(L)建表;调用Adjmax(L)求值;打印数据;释放链表空间;Y继续?N停止 } 上机题1:#include #include typedef int datatype;//设当前数据元素为整型 typedef struct node//节点类型 { datatype data;//节点的数据域struct node *next;//节点的后继指针域 }Linknode,*Link;//linknode为节点说明符,link为节点指针说明符 Link Createlist()//创建单链表的算法 { int a,c;float b; Link H,P,r;//H,P,r分别为表头,新节点和表尾节点指针H=(Link)malloc(sizeof(Linknode)); //建立头节点 r=H; do{ c=(fflush(stdin),scanf(\ //判断输入的是否是整数a=(int)b; if(c!=1||a!=b||a>-2^16||a-2^16||adata=a;//存入数据 r->next=P;//新节点链入表尾r=P; do { c=(fflush(stdin),scanf(\ //判断输入的是否是整数 a=(int)b; if(c!=1||a!=b||a>-2^16||a-2^16||anext=NULL;//将尾节点的指针域置空 return(H);//返回已创建的头节点 } Link Adjmax(Link H)//求链表中相邻两节点data值之和为最大的第一节点的指针的算法 { Link p,p1,q; int i,j; p=p1=H->next; if(p1==NULL) return(p1); //表空返回 q=p->next; if(q==NULL)return(p1); //表长=1时返回 i=p->data+q->data;//相邻两节点data值之和 while(q->next){ p=q;q=q->next;//取下一对相邻节点的指针j=p->data+q->data; if(j>i){p1=p;i=j;//取和为最大的第一节点指针} } return (p1); } void main()//主函数 { Link A,B,p,q; int a,b; do { printf(\请输入一组整数(以0为结束符,数之间回车):\\n\ p=A=Createlist();//创建新链表 B=Adjmax(A);//求链表中相邻两节点data值之和为最大的第一节点的指针a=(int)(B->data);//取第一节点的data值printf(\第一节点的data值为:%d\\n\ while(p->next)//释放链表空间{q=p;p=p->next;free(q);} free(p); printf(\是否继续输入下一组整数:是:1,否:0\\n\scanf(\}while(b); } 上机题2、实现算术表达式求值程序。
设操作数:0,1,2,,8,9;运算符:+,2)*3 #,将其转换成后缀表达式:542—3*+#,然后计算,本例结果为11。
程序结构:类型说明;两套:Clearstack(S)、Emptystack(S)、Getstop(S)、 Push(S)、Pop(S);中缀到后缀转换的函数:Mid-post(E[n],B[n]);后缀表达式求值的函数:Postcount(B[n]);main{变量说明;输入中缀表达式,存入E[n];调用Mid-post(E,B);调用Postcount(B);打印表达式结果;Y继续?N停止 } 上机题2:#include #include #include typedef struct node { char data; struct node *next; }snode,*slink; typedef structnode1 { int data; struct node1 *next; }snode1,*slink1;void Clearstack(slink s)//置栈空 { s=NULL; } int Emptystack(slink s)//判断栈是否为空 { if(s==NULL)return(1); //栈空返回1 else return(0);//栈非空返回0 } char Getstop(slink s)//取栈顶元素 { if(s!=NULL)return (s->data);return (0);} void Push(slink*s,char x)//元素x进栈 { slink p;p=(slink)malloc(sizeof(snode)); //生成进栈p节点 p->data=x;//存入新元素 p->next=*s;//p节点作为新的栈顶链入 *s=p; } char Pop(slink*s)//出栈 { char x; slink p; if(Emptystack(*s))return (-1); //栈空,返回-1 else { x=(*s)->data; p=*s; *s=(*s)->next; free(p); return (x);//成功 } } void Push1(slink1*s,int x)//元素x进栈 { slink1 p;p=(slink1)malloc(sizeof(snode1)); //生成进栈p节点 p->data=x;//存入新元素 p->next=*s;//p节点作为新的栈顶链入 *s=p; } int Pop1(slink1*s)//出栈 { int x; slink1 p; if(Emptystack1(*s))return (-1); //栈空,返回-1 else { x=(*s)->data; p=*s; *s=(*s)->next; free(p); return (x);//成功 } } int Emptystack1(slink1 s)//判断栈是否为空 { if(s==NULL)return(1); //栈空返回1 else return(0);//栈非空返回0 } void Clearstack1(slink1 s)//置栈空 { s=NULL; } int Getstop1(slink1 s)//取栈顶元素 { if(s!=NULL)return (s->data);return (0);} int Precede(char x,char y){ int a,b; switch(x){ case #://case (: case (:a=0;break; case +:case:b=1;break; case *: case /:b=2;break;//case 与x比较{E[j++]= ;E[j++]=Pop(&s);}//E[j++]= ;Push(&s,x);//Q1 int Ecount(char E)//后缀表达式求值 { int i=0,g=0,k=0,d=0,d1,g1; char x; int z,a,b; slink1 s=NULL; while(E[i]!=#){ x=E[i]; switch(x){case :break;case +:b=Pop1(&s);a=Pop1(&s);z=a+b;Push1(&s,z);break;caseb;Push1(&s,z);break;case *:b=Pop1(&s);a=Pop1(&s);z=a*b;Push1(&s,z);break;case /:b=Pop1(&s);a=Pop1(&s);z=a/b;Push1(&s,z);break;default:{g=0;g1=0;while(E[i]!= ){g1=E[i]-0;g=g*10+g1;i++;}Push1(&s,g);} } i++; } if(!Emptystack1(s))return(Getstop1(s)); Clearstack1(s); } int pd(char B) { int i=0,c,j,k;c=strlen(B); while(B[i]!=#){switch(B[i]){case :break;case 0:case1:case2:case3:case4:case5:case6:case7:case8:case9:{ j=i+1;if(B[j]== ){while(B[j]== )j++;switch(B[j]){case 0:case1:case2:case3:case4:case5: case6:case7:case8: case9:printf(\非法输入!请重新输入!\\n\ }}}break;case +:case1;while(B[j]== )j--;switch(B[j]){case +:case:case *:case /:case ):case #:printf(\非法输入!请重新输入!\\n\ }}break;case (:{j=i-1;while(B[j]== )j--;switch(B[j]){case 0:case1:case2: case3:case4:case5:case6:case7:case8:case #:case ):printf(\非法输入!请重新输入!\\n\ }k=i+1;while(B[k]== )k++;switch(B[k]){case +:case1;while(B[j]== )j--;switch(B[j]){case (:printf(\非法输入!请重新输入!\\n\ }k=i+1;while(B[k]== )k++;switch(B[k]){case1:case2:case3:case4:case5:case6:case7:case8: case9:printf(\非法输入!请重新输入!\\n\} }break; case \\0:break; default:printf(\非法输入!请重新输入!\\n\} i++; } if(B[0]==#){ printf(\表达式为空!请重新输入!\\n\} else if (B[c-1]!=#){ printf(\非法输入!请重新输入!\\n\ } } void main(){ int a,b,c,d; char B[100],E[100]; do { do {printf(\请输入中缀表达式:\\n\ B[100]=fflush(stdin);gets(B);while(B[0]==\\0){B[100]=fflush(stdin);gets(B);}b=pd(B);}while(b==0);Mid_post(E,B);printf(\后缀表达式为:\\n\printf(\a=Ecount(E);printf(\结果=%d\\n\printf(\是否继续?是:1否:0\\n\scanf(\}while(c==1); } 上机题3、实现链式队列运算程序。