北科大数据结构上机题代码

《数据结构》上机题(C语言程序)1.输入数据(设为整型)建立单链表,并求相邻两节点data值之和为最大的第一节点。

例如输入:2 6 4 7 3 0(0为结束符),建立:所求结果=4程序结构:类型说明;建表函数:Creatlist(L); 求值函数:Adjmax(L);main( ){ 变量说明;调用Creatlist(L)建表;调用Adjmax(L)求值;打印数据;释放链表空间;Y 继续?N停止}上机题1:#include<stdio.h>#include<stdlib.h>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("%f",&b)); //判断输入的是否是整数a=(int)b;if(c!=1||a!=b||a>-2^16||a<2^16-1) printf("非法输入!请重新输入!\n");}while(c!=1||a!=b||a>-2^16||a<2^16-1);while(a!=0){P=(Link)malloc(sizeof(Linknode));//申请新节点P->data=a; //存入数据r->next=P; //新节点链入表尾r=P;do{c=(fflush(stdin),scanf("%f",&b)); //判断输入的是否是整数a=(int)b;if(c!=1||a!=b||a>-2^16||a<2^16-1) printf("非法输入!请重新输入!\n");}while(c!=1||a!=b||a>-2^16||a<2^16-1);}r->next=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",a);while(p->next) //释放链表空间{q=p;p=p->next;free(q);}free(p);printf("是否继续输入下一组整数:是:1,否:0\n");scanf("%d",&b);}while(b);}上机题2. 实现算术表达式求值程序(栈的运用)。

设操作数:0,1,2,……,8,9(可扩充);运算符:+,—,*,/,(,),#(#号为结束)。

输入中缀表达式,如:5+(4—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<stdio.h>#include<stdlib.h>#include<string.h>typedef struct node{char data;struct node *next;}snode,*slink;typedef struct node1{int data;struct node1 *next;}snode1,*slink1;void Clearstack(slink s) //置栈空{s=NULL;}int Emptystack(slink s) //判断栈是否为空{if(s==NULL) return(1); //栈空返回1else 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); //栈空,返回-1else{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); //栈空,返回-1else{x=(*s)->data;p=*s;*s=(*s)->next;free(p);return (x); //成功}}int Emptystack1(slink1 s) //判断栈是否为空{if(s==NULL) return(1); //栈空返回1else 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 '-':a=1;break;case '*':case '/':a=2;break;}switch(y){case '+':case '-':b=1;break;case '*':case '/':b=2;break;//case '(':case '(':b=3;break;}if(a>=b) return (1);else return (0);}void Mid_post(char E[],char B[]) //中缀表达式B到后缀表达式E的转换{int i=0,j=0;char x; int a;slink s=NULL; //置空栈Clearstack(s);Push(&s,'#'); //结束符入栈do{x=B[i++]; //扫描当前表达式分量xswitch(x){case ' ':break;case '#':{while(!Emptystack(s)){E[j++]=' '; //栈非空时E[j++]=Pop(&s);}}break;case ')':{while(Getstop(s)!='('){E[j++]=' ';E[j++]=Pop(&s);} //反复出栈直到遇到'('Pop(&s); //退掉'('}break;case '+':case '-':case '*':case '/':case '(':{while(Precede(Getstop(s),x)) //栈顶运算符(Q1)与x比较{E[j++]=' ';E[j++]=Pop(&s);}//E[j++]=' ';Push(&s,x); //Q1<x时,x进栈E[j++]=' ';}break;default:E[j++]=x;}}while(x!='#');E[j]='\0';Clearstack(s);}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;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;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':case '1':case '2':case '3':case '4':case '5':case '6':case '7':case '8':case '9':{ j=i+1;if(B[j]==' '){while(B[j]==' ') j++;switch(B[j]){case '0':case '1':case '2':case '3':case '4':case '5':case '6':case '7':case '8':case '9':printf("1非法输入!请重新输入!\n");return(0);break;}}}break;case '+':case '-':case '*':case '/':{j=i-1;while(B[j]==' ') j--;switch(B[j]){case '+':case '-':case '*':case '/':case '(':case '#':printf("2非法输入!请重新输入!\n");return(0);break;}k=i+1;while(B[k]==' ') k++;switch(B[k]){case '+':case '-':case '*':case '/':case ')':case '#':printf("3非法输入!请重新输入!\n");return(0);break;}}break;case '(':{j=i-1;while(B[j]==' ') j--;switch(B[j]){case '0':case '1':case '2':case '3':case '4':case '5':case '6':case '7':case '8':case '9':case '#':case ')':printf("4非法输入!请重新输入!\n");return(0);break;}k=i+1;while(B[k]==' ') k++;switch(B[k]){case '+':case '-':case '*':case '/':case '#':printf("5非法输入!请重新输入!\n");return(0);break;}}break;case ')':{j=i-1;while(B[j]==' ') j--;switch(B[j]){case '(':printf("6非法输入!请重新输入!\n");return(0);break;}k=i+1;while(B[k]==' ') k++;switch(B[k]){case '0':case '1':case '2':case '3':case '4':case '5':case '6':case '7':case '8':case '9':printf("7非法输入!请重新输入!\n");return(0);break;}}break;case '\0':break;default:printf("8非法输入!请重新输入!\n");return(0);}i++;}if(B[0]=='#'){printf("表达式为空!请重新输入!\n");return(0);}else if (B[c-1]!='#'){printf("9非法输入!请重新输入!\n");return(0);}}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("%s\n",E);a=Ecount(E);printf("结果=%d\n",a);printf("是否继续?是:1否:0\n");scanf("%d",&c);}while(c==1);}上机题3. 实现链式队列运算程序(队列的运用)。

合集下载

北京科技大学C++上机作业答案

北京科技大学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(有答案)

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,则后序遍历结果为()。

北科大数据结构上机题代码

北科大数据结构上机题代码

北科大数据结构上机题代码《数据结构》上机题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、实现算术表达式求值程序。

北京科技大学2015年数据结构与算法分析试卷+答案

北京科技大学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次上机课内容-

北科大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。

最新数据结构经典题目及c语言代码.pdf

《数据结构》课程设计题目(程序实现采用C语言)题目1:猴子选王(学时:3)一堆猴子都有编号,编号是1,2,3 ...m,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第n个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。

要求:m及n要求从键盘输入,存储方式采用向量及链表两种方式实现该问题求解。

//链表#include <stdio.h>#include <stdlib.h>// 链表节点typedef struct _RingNode{int pos;struct _RingNode *next;}RingNode, *RingNodePtr;// 创建约瑟夫环,pHead:链表头指针,count:链表元素个数void CreateRing(RingNodePtr pHead, int count){RingNodePtr pCurr = NULL, pPrev = NULL;int i = 1;pPrev = pHead;while(--count > 0){pCurr = (RingNodePtr)malloc(sizeof(RingNode));i++;pCurr->pos = i;pPrev->next = pCurr;pPrev = pCurr;}pCurr->next = pHead; // 构成环状链表}void KickFromRing(RingNodePtr pHead, int n){RingNodePtr pCurr, pPrev;int i = 1; // 计数pCurr = pPrev = pHead;while(pCurr != NULL){if (i == n){// 踢出环printf("\n%d", pCurr->pos); // 显示出圈循序pPrev->next = pCurr->next;free(pCurr);pCurr = pPrev->next;i = 1;}pPrev = pCurr;pCurr = pCurr->next;if (pPrev == pCurr){// 最后一个printf("\nKing is %d", pCurr->pos); // 显示出圈循序free(pCurr);break;}i++;}}int main(){int n = 0, m = 0;RingNodePtr pHead = NULL;printf("M(person count) = ");scanf("%d", &m);printf("N(out number) = ");scanf("%d", &n);if(m <= 0 || n <= 0){printf("Input Error\n");return 0;}// 建立链表pHead = (RingNodePtr)malloc(sizeof(RingNode));pHead->pos = 1;pHead->next = NULL;CreateRing(pHead, m);// 开始出圈printf("\nKick Order: ");KickFromRing(pHead, n);printf("\n");system("pause");return 0;}//数组做:#include<stdio.h>#include<stdlib.h>#include<string.h>void SelectKing(int MonkeyNum, int CallNum);void main(){int MonkeyNum;int CallNum;/* 输入猴子的个数*/printf("Monkey Num = ");scanf("%d", &MonkeyNum);/* 输入M的值*/printf("Call Num = ");scanf("%d", &CallNum);SelectKing(MonkeyNum, CallNum);}void SelectKing(int MonkeyNum, int CallNum){int *Monkeys; // 申请一个数组,表示所有的猴子;int counter = 0; //计数,当计数为猴子个数时表示选到最后一个猴子了;int position = 0; // 位置,数组的下标,轮流遍历数组进行报数;int token = 0; // 令牌,将报数时数到M的猴子砍掉;// 申请猴子个数大小的数组,把桌子摆上。

北京科技大学数据结构试验报告(附录含代码)

一、1)功能描述输入数据(设为整型)建立单链表,并求相邻两节点data值之和为最大的第一节点。

2)详细设计遵循链表建立的基本思想,建立一个新的链表,H为表头,r为新节点,p为表尾节点指针,没存入一个新的数据则申请一个新的节点,知道没有数据输入,利用循环和打擂台法,比较和的大小,并输出。

3)测试分析程序调试完成后,选取两组数据进行测试,都得出了正确结果(数据以0为结束符,若有相同和,则取第一组)结果截图4)心得体会通过做第一题,学习到链表的建立以及链表里指针的使用,并且复习了比较法里面的打擂台法。

二、1)功能描述实现算术表达式求值程序(栈的运用),输入中缀表达式,可将其转换成后缀表达式2)详细设计本题目的程序是根据课本上的程序改进之后得出的,课本上有完整的程序,但是有bug,按照课本上的程序,结果会出现“烫烫烫烫烫”,原因是对于优先级的比较没有处理好,因此加了两行代码,将优先级的比较处理好,即现在的程序.3)测试分析程序调试完成后,选取题目所给的式子进行测试,得出了正确后缀表达式结果结果截图4)心得体会通过做第二题,对于课本上的知识表示得出“实践出真知”的真理,即使书上的东西也不一定就是正确的,尤其是代码,最好是个人自己真正实践一下。

三、1)功能描述实现链式队列运算程序(队列的运用)2)详细设计本题目是队列相关应用,队列和栈是相反的,队列是先进的先出,因此输入12345,先出的是1,本着队列的这一特性,根据课本所学的队列的算法,设计了如下程序。

3)测试分析程序调试完成后,选取12345进行测试,后缀加0,则一个字符出队,只输入0,则继续出队,输入@,则打印剩余全部元素。

结果截图4)心得体会通过做第三题,对于队列的特点有了更加深刻的认识,尤其区分队列与栈的不同点,需要特别注意。

四、1)功能描述①构造关于F的Huffman树;②求出并打印D总各字符的Huffman编码.2)详细设计本题目是Huffman树的应用以及Huffman编码的应用,参照课本上关于Huffman树的建立以及Huffman编码的应用的实现,将所给数据依权值最小原则建立Huffman树,并实现Huffman编码.3)测试分析程序调试完成后,给出数据abcdefgh,相应频率为12345678,运行代码得出结果如图.同时选取另一组数据测试也得出了正确结论结果截图4)心得体会通过做第四题,对于Huffman树有了更加深刻的体会,同时练习也使得对课本知识进行实践,有助于更好的理解Huffman树的算法。

2016北科大计算机技术(专业学位)考研专业目录招生人数参考书目历年真题复试分数线答题方法复习经验指导


更多资料请到易研官网 下载
9 .中断周期前的 CPU 工作周期是 。 10.移码表示法主要用于表示 作中比较大小。
,中断周期后的 CPU 工作周期是 ,以利于在加减运算的 操
11.某机指令字长 24 位,定长操作码,共能完成 129 种操作,采用单地址格式 可直接寻址的范围是 __________ ,采用二地址格式指令,可直接寻址范围是 __________。 12.用 74181 和 74182 组成 64 位多重进位运算器,则需____________片 74181 和____________片 74182。 13.寄存器间接寻址方式中,操作数存放在 是 。 。 寄存器中,运算结果 寄存器中。 ,寄存器中存放的
3.若浮点数用补码表示,则判断运算结果是否为规格化数的方法是 A.阶符与数符相同为规格化数 B.阶符与数符相异为规格化数
更多资料请到易研官网 下载
C.数符与尾数小数点后第一位数字相异为规格化数 D.数符与尾数小数点后第一位数字相同为规格化数 4.假定下列字符码中有奇偶校验位,但没有数据错误,采用偶校验的字符码是 。 A.11001011 B.11010110 C.11001001 。 D.11000001 5.计算机的存储器采用分级方式是为了 A.减少主机箱的体积 B.解决容量、速度、价格三者之间的矛盾 C.存储大量数据方便 D.操作方便 6.下面所述不正确的是 。 A.RAM 可随机存取信息,掉电后信息丢失 B.访问 RAM 时,访问时间与单元的物理位置无关 C.内存中存储的信息均是不可改变的 D.随机存储器和只读存储器可统一编址 7. 某计算机字长 32 位, 存储容量为 4MB, 若按半字编址, 它的寻址范围是______。 A.4M B.3M C.2M D.1M 来实现。 B.补码运算的二进制减法器 D.补码运算的二进制加法器 。 8.在定点二进制运算器中,减法运算一般通过 A.原码运算的二进制减法器 C.补码运算的十进制加法器
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档