吉林大学数据结构_图
- 格式:pptx
- 大小:489.67 KB
- 文档页数:11
计算机专业基础综合数据结构(图)历年真题试卷汇编4(总分58, 做题时间90分钟)6. 综合题1.已知一图如下图所示:(1)写出全部拓扑排序;(2)以V1为源点,以V8为终点,给出所有事件允许发生的最早时间和最晚时间,并给出关键路径;(3)求V1结点到各点的最短距离。
【北京邮电大学2000五(15分)】SSS_TEXT_QUSTI2.(1)对于有向无环图,叙述求拓扑有序序列的步骤;(2)对于以下的图,写出它的四个不同的拓扑有序序列。
【南开大学1998二(12分)】SSS_TEXT_QUSTI3.有向图的拓扑排序能否用图的深度搜索模式来查找?若能,请简述方法;若不能,请简述原因。
【西北大学2000二、8(5分)】SSS_TEXT_QUSTI4.下图是带权的有向图G的邻接表表示法,求:(1)以结点V1出发深度遍历图G 所得的结点序列;(2)以结点V1出发广度遍历图G所得的结点序列;(3)从结点V1到结点V8的最短路径;(4)从结点V1到结点V8的关键路径。
【中国海洋大学1999四(10分)】SSS_TEXT_QUSTI5.下表给出了某工程各工序之间的优先关系和各工序所需时间。
(1)画出相应的AOE网; (2)列出各事件的最早发生时间,最迟发生时间;(3)找出关键路径并指明完成该工程所需最短时间。
【山东大学2002七(15分)】【北京交通大学1995六(15分)】SSS_TEXT_QUSTI6.请写出应填入下列叙述中( )内的正确答案。
某一工程作业的网络图如图所示,其中箭头表示作业,箭头边的数字表示完成作业所需的天数。
箭头前后的圆圈表示事件,圆圈中的数字表示事件的编号。
用事件编号的序列(例如0一2—7—9一11)表示进行作业的路径。
完成此工程的关键路径是(A),完成此工程所需的最少天数为(B)天,此工程中具有最大充裕天数的事件是(C),充裕天数是(D)。
关键路径上的事件的充裕天数是(E)。
【上海大学2002三(10分)】SSS_TEXT_QUSTI7.求出下面AOE网中的关键路径(要求给出各个顶点的最早发生时间和最迟发生时间,并画出关键路径)。
计算机专业基础综合数据结构(图)历年真题试卷汇编1(总分:60.00,做题时间:90分钟)一、单项选择题(总题数:20,分数:40.00)1.下列关于无向连通图特性的叙述中,正确的是( )。
【2009年全国试题7(2分)】I.所有顶点的度之和为偶数Ⅱ.边数大于顶点个数减1Ⅲ.至少有一个顶点的度为1(分数:2.00)A.只有I √B.只有ⅡC.I和ⅡD.I和Ⅲ解析:解析:无向图中一条边要连接两个顶点,因此顶点的度数之和必为偶数。
n个顶点的无向连通图至少需要n-1条边。
无向连通图并不要求“至少有一个顶点的度为1”。
2.若无向图G=(V,E)中含有7个顶点,要保证图G在任何情况下都是连通的,则需要的边数最少是( )。
【2010年全国试题7(2分)】(分数:2.00)A.6B.15C.16 √D.21解析:解析:要保证n个顶点的无向图G在任何情况下都是连通的,则需要先由n-1个顶点组成完全图,从第n个顶点引一条到n-1任一顶点的边,则图肯定是连通的。
本题先由6个顶点组成完全图,需要6(6-1)/2=15条边,故按题目要求“需要的边数最少”是15+1=16。
3.对下图进行拓扑排序,可以得到不同拓扑序列的个数是( )。
【2010年全国试题8(2分)(分数:2.00)A.4B.3 √C.2D.1解析:4.下列关于图的叙述中,正确的是( )。
【2011年全国试题8(2分)】I.回路是简单路径Ⅱ.存储稀疏图,用邻接矩阵比邻接表更省空间Ⅲ.若有向图中存在拓扑序列,则该图不存在回路(分数:2.00)A.仅ⅡB.仅I、ⅡC.仅Ⅲ√D.仅I、Ⅲ解析:解析:图中第1个顶点和最后一个顶点相同的路径称为回路或环。
序列中所有顶点不重复出现的路径称为简单路径,邻接矩阵的大小只和顶点个数相关,存储稀疏图,用邻接表比邻接矩阵更省空间。
拓扑序列成功的前提是有向图中不存在回路。
5.对有n个结点、e条边且使用邻接表存储的有向图进行广度优先遍历,其算法时间复杂度是( )。
目录目录 (1)Graph 图论 (3)|DAG的深度优先搜索标记 (3)|无向图找桥 (3)|无向图连通度(割) (3)|最大团问题DP+DFS (3)|欧拉路径O(E) (3)|D IJKSTRA数组实现O(N^2) (3)|D IJKSTRA O(E* LOG E) (4)|B ELLMAN F ORD单源最短路O(VE) (4)|SPFA(S HORTEST P ATH F ASTER A LGORITHM) (4)|第K短路(D IJKSTRA) (5)|第K短路(A*) (5)|P RIM求MST (6)|次小生成树O(V^2) (6)|最小生成森林问题(K颗树)O(MLOGM) (6)|有向图最小树形图 (6)|M INIMAL S TEINER T REE (6)|T ARJAN强连通分量 (7)|弦图判断 (7)|弦图的PERFECT ELIMINATION点排列 (7)|稳定婚姻问题O(N^2) (7)|拓扑排序 (8)|无向图连通分支(DFS/BFS邻接阵) (8)|有向图强连通分支(DFS/BFS邻接阵)O(N^2) (8)|有向图最小点基(邻接阵)O(N^2) (9)|F LOYD求最小环 (9)|2-SAT问题 (9)Network 网络流 (11)|二分图匹配(匈牙利算法DFS实现) (11)|二分图匹配(匈牙利算法BFS实现) (11)|二分图匹配(H OPCROFT-C ARP的算法) (11)|二分图最佳匹配(KUHN MUNKRAS算法O(M*M*N))..11 |无向图最小割O(N^3) (12)|有上下界的最小(最大)流 (12)|D INIC最大流O(V^2*E) (12)|HLPP最大流O(V^3) (13)|最小费用流O(V*E* F).......................................13|最小费用流O(V^2* F). (14)|最佳边割集 (15)|最佳点割集 (15)|最小边割集 (15)|最小点割集(点连通度) (16)|最小路径覆盖O(N^3) (16)|最小点集覆盖 (16)Structure 数据结构 (17)|求某天是星期几 (17)|左偏树合并复杂度O(LOG N) (17)|树状数组 (17)|二维树状数组 (17)|T RIE树(K叉) (17)|T RIE树(左儿子又兄弟) (18)|后缀数组O(N* LOG N) (18)|后缀数组O(N) (18)|RMQ离线算法O(N*LOG N)+O(1) (19)|RMQ(R ANGE M INIMUM/M AXIMUM Q UERY)-ST算法(O(NLOGN +Q)) (19)|RMQ离线算法O(N*LOG N)+O(1)求解LCA (19)|LCA离线算法O(E)+O(1) (20)|带权值的并查集 (20)|快速排序 (20)|2台机器工作调度 (20)|比较高效的大数 (20)|普通的大数运算 (21)|最长公共递增子序列O(N^2) (22)|0-1分数规划 (22)|最长有序子序列(递增/递减/非递增/非递减) (22)|最长公共子序列 (23)|最少找硬币问题(贪心策略-深搜实现) (23)|棋盘分割 (23)|汉诺塔 (23)|STL中的PRIORITY_QUEUE (24)|堆栈 (24)|区间最大频率 (24)|取第K个元素 (25)|归并排序求逆序数 (25)|逆序数推排列数 (25)|二分查找 (25)|二分查找(大于等于V的第一个值) (25)|所有数位相加 (25)Number 数论 (26)|递推求欧拉函数PHI(I) (26)|单独求欧拉函数PHI(X) (26)|GCD最大公约数 (26)|快速GCD (26)|扩展GCD (26)|模线性方程 A * X = B (% N) (26)|模线性方程组 (26)|筛素数[1..N] (26)|高效求小范围素数[1..N] (26)|随机素数测试(伪素数原理) (26)|组合数学相关 (26)|P OLYA计数 (27)|组合数C(N, R) (27)|最大1矩阵 (27)|约瑟夫环问题(数学方法) (27)|约瑟夫环问题(数组模拟) (27)|取石子游戏1 (27)|集合划分问题 (27)|大数平方根(字符串数组表示) (28)|大数取模的二进制方法 (28)|线性方程组A[][]X[]=B[] (28)|追赶法解周期性方程 (28)|阶乘最后非零位,复杂度O(NLOGN) (29)递归方法求解排列组合问题 (30)|类循环排列 (30)|全排列 (30)|不重复排列 (30)|全组合 (31)|不重复组合 (31)|应用 (31)模式串匹配问题总结 (32)|字符串H ASH (32)|KMP匹配算法O(M+N) (32)|K ARP-R ABIN字符串匹配 (32)|基于K ARP-R ABIN的字符块匹配 (32)|函数名: STRSTR (32)|BM算法的改进的算法S UNDAY A LGORITHM (32)|最短公共祖先(两个长字符串) (33)|最短公共祖先(多个短字符串)...............................33Geometry 计算几何.. (34)|G RAHAM求凸包O(N* LOG N) (34)|判断线段相交 (34)|求多边形重心 (34)|三角形几个重要的点 (34)|平面最近点对O(N* LOG N) (34)|L IUCTIC的计算几何库 (35)|求平面上两点之间的距离 (35)|(P1-P0)*(P2-P0)的叉积 (35)|确定两条线段是否相交 (35)|判断点P是否在线段L上 (35)|判断两个点是否相等 (35)|线段相交判断函数 (35)|判断点Q是否在多边形内 (35)|计算多边形的面积 (35)|解二次方程A X^2+B X+C=0 (36)|计算直线的一般式A X+B Y+C=0 (36)|点到直线距离 (36)|直线与圆的交点,已知直线与圆相交 (36)|点是否在射线的正向 (36)|射线与圆的第一个交点 (36)|求点P1关于直线LN的对称点P2 (36)|两直线夹角(弧度) (36)ACM/ICPC竞赛之STL (37)ACM/ICPC竞赛之STL简介 (37)ACM/ICPC竞赛之STL--PAIR (37)ACM/ICPC竞赛之STL--VECTOR (37)ACM/ICPC竞赛之STL--ITERATOR简介 (38)ACM/ICPC竞赛之STL--STRING (38)ACM/ICPC竞赛之STL--STACK/QUEUE (38)ACM/ICPC竞赛之STL--MAP (40)ACM/ICPC竞赛之STL--ALGORITHM (40)STL IN ACM (41)头文件 (42)线段树 (43)求矩形并的面积(线段树+离散化+扫描线) (43)求矩形并的周长(线段树+离散化+扫描线) (44)Graph 图论/*==================================================*\| DAG的深度优先搜索标记| INIT: edge[][]邻接矩阵; pre[], post[], tag全置0;| CALL: dfstag(i, n); pre/post:开始/结束时间\*==================================================*/int edge[V][V], pre[V], post[V], tag;void dfstag(int cur, int n){ // vertex: 0 ~ n-1pre[cur] = ++tag;for (int i=0; i<n; ++i) if (edge[cur][i]) {if (0 == pre[i]) {printf("Tree Edge!\n");dfstag(i,n);} else {if (0 == post[i]) printf("Back Edge!\n");else if (pre[i] > pre[cur])printf("Down Edge!\n");else printf("Cross Edge!\n");}}post[cur] = ++tag;}/*==================================================*\| 无向图找桥| INIT: edge[][]邻接矩阵;vis[],pre[],anc[],bridge 置0;| CALL: dfs(0, -1, 1, n);\*==================================================*/int bridge, edge[V][V], anc[V], pre[V], vis[V];void dfs(int cur, int father, int dep, int n){ // vertex: 0 ~ n-1if (bridge) return;vis[cur] = 1; pre[cur] = anc[cur] = dep;for (int i=0; i<n; ++i) if (edge[cur][i]) {if (i != father && 1 == vis[i]) {if (pre[i] < anc[cur])anc[cur] = pre[i];//back edge}if (0 == vis[i]) { //tree edgedfs(i,cur,dep+1,n);if (bridge) return;if (anc[i] < anc[cur]) anc[cur] = anc[i];if (anc[i] > pre[cur]) { bridge = 1; return; } }}vis[cur] = 2;}/*==================================================*\| 无向图连通度(割)| INIT: edge[][]邻接矩阵;vis[],pre[],anc[],deg[]置为0;| CALL: dfs(0, -1, 1, n);| k=deg[0], deg[i]+1(i=1…n-1)为删除该节点后得到的连通图个数| 注意:0作为根比较特殊!\*==================================================*/int edge[V][V], anc[V], pre[V], vis[V], deg[V];void dfs(int cur, int father, int dep, int n){// vertex: 0 ~ n-1int cnt = 0;vis[cur] = 1; pre[cur] = anc[cur] = dep;for (int i=0; i<n; ++i) if (edge[cur][i]) {if (i != father && 1 == vis[i]) {if (pre[i] < anc[cur])anc[cur] = pre[i];//back edge}if (0 == vis[i]) { //tree edgedfs(i,cur,dep+1,n);++cnt; // 分支个数if (anc[i] < anc[cur]) anc[cur] = anc[i];if ((cur==0 && cnt>1) ||(cnt!=0 && anc[i]>=pre[cur]))++deg[cur];// link degree of a vertex }}vis[cur] = 2;} /*==================================================*\| 最大团问题 DP + DFS| INIT: g[][]邻接矩阵;| CALL: res = clique(n);\*==================================================*/int g[V][V], dp[V], stk[V][V], mx;int dfs(int n, int ns, int dep){if (0 == ns) {if (dep > mx) mx = dep;return 1;}int i, j, k, p, cnt;for (i = 0; i < ns; i++) {k = stk[dep][i]; cnt = 0;if (dep + n - k <= mx) return 0;if (dep + dp[k] <= mx) return 0;for (j = i + 1; j < ns; j++) {p=stk[dep][j];if (g[k][p]) stk[dep + 1][cnt++] = p;}dfs(n, cnt, dep + 1);}return 1;}int clique(int n){int i, j, ns;for (mx = 0, i = n - 1; i >= 0; i--) {// vertex: 0 ~ n-1for (ns = 0, j = i + 1; j < n; j++)if (g[i][j]) stk[1][ ns++ ] = j;dfs(n, ns, 1); dp[i] = mx;}return mx;}/*==================================================*\| 欧拉路径O(E)| INIT: adj[][]置为图的邻接表; cnt[a]为a点的邻接点个数;| CALL: elpath(0); 注意:不要有自向边\*==================================================*/int adj[V][V], idx[V][V], cnt[V], stk[V], top;int path(int v){for (int w ; cnt[v] > 0; v = w) {stk[ top++ ] = v;w = adj[v][ --cnt[v] ];adj[w][ idx[w][v] ] = adj[w][ --cnt[w] ];// 处理的是无向图—-边是双向的,删除v->w后,还要处理删除w->v}return v;}void elpath (int b, int n){ // begin from b int i, j;for (i = 0; i < n; ++i) // vertex: 0 ~ n-1 for (j = 0; j < cnt[i]; ++j)idx[i][ adj[i][j] ] = j;printf("%d", b);for (top = 0; path(b) == b && top != 0; ) {b = stk[ --top ];printf("-%d", b);}printf("\n");}/*==================================================*\| Dijkstra数组实现O(N^2)| Dijkstra --- 数组实现(在此基础上可直接改为STL的Queue实现)| lowcost[] --- beg到其他点的最近距离| path[] -- beg为根展开的树,记录父亲结点\*==================================================*/#define INF 0x03F3F3F3Fconst int N;int path[N], vis[N];void Dijkstra(int cost[][N], int lowcost[N], int n, int beg){ int i, j, min;memset(vis, 0, sizeof(vis));vis[beg] = 1;for (i=0; i<n; i++){lowcost[i] = cost[beg][i]; path[i] = beg;}lowcost[beg] = 0;path[beg] = -1; // 树根的标记int pre = beg;for (i=1; i<n; i++){min = INF;dist[v] = dist[u] + c;for (j=0; j<n; j++)// 下面的加法可能导致溢出,INF 不能取太大if (vis[j]==0 &&lowcost[pre]+cost[pre][j]<lowcost[j]){lowcost[j] =lowcost[pre] + cost[pre][j]; path[j] = pre; } for (j=0; j<n; j++) if (vis[j] == 0 && lowcost[j] < min){ min = lowcost[j]; pre = j; } vis[pre] = 1; } } /*==================================================*\ | Dijkstra O(E * log E) | INIT: 调用init(nv, ne)读入边并初始化; | CALL: dijkstra(n, src); dist[i]为src 到i 的最短距离 \*==================================================*/ #define typec int // type of cost const typec inf = 0x3f3f3f3f; // max of cost typec cost[E], dist[V]; int e, pnt[E], nxt[E], head[V], prev[V], vis[V]; struct qnode { int v; typec c; qnode (int vv = 0, typec cc = 0) : v(vv), c(cc) {} bool operator < (const qnode& r) const { return c>r.c; } }; void dijkstra(int n, const int src){ qnode mv; int i, j, k, pre; priority_queue<qnode> que; vis[src] = 1; dist[src] = 0; que.push(qnode(src, 0)); for (pre = src, i=1; i<n; i++) { for (j = head[pre]; j != -1; j = nxt[j]) { k = pnt[j]; if (vis[k] == 0 && dist[pre] + cost[j] < dist[k]){ dist[k] =dist[pre] + cost[j]; que.push(qnode(pnt[j], dist[k])); prev[k] = pre; } } while (!que.empty() && vis[que.top().v] == 1) que.pop(); if (que.empty()) break ; mv = que.top(); que.pop(); vis[pre = mv.v] = 1; } } inline void addedge(int u, int v, typec c){ pnt[e] = v; cost[e] = c; nxt[e] = head[u]; head[u] = e++; } void init(int nv, int ne){ int i, u, v; typec c; e = 0;memset(head, -1, sizeof (head));memset(vis, 0, sizeof (vis));memset(prev, -1, sizeof (prev));for (i = 0; i < nv; i++) dist[i] = inf;for (i = 0; i < ne; ++i) {scanf("%d%d%d", &u, &v, &c);// %d: type of cost addedge(u, v, c); // vertex: 0 ~ n-1, 单向边 }}/*==================================================*\| BellmanFord 单源最短路O(VE)| 能在一般情况下,包括存在负权边的情况下,解决单源最短路径问题| INIT: edge[E][3]为边表| CALL: bellman(src);有负环返回0;dist[i]为src 到i 的最短距| 可以解决差分约束系统: 需要首先构造约束图,构造不等式时>=表示求最小值, 作为最长路,<=表示求最大值, 作为最短路 (v-u <= c:a[u][v] = c )\*==================================================*/#define typec int // type of costconst typec inf=0x3f3f3f3f; // max of costint n, m, pre[V], edge[E][3];typec dist[V];int relax (int u, int v, typec c){if (dist[v] > dist[u] + c) {pre[v] = u; return 1; } return 0; } int bellman (int src){ int i, j;for (i=0; i<n; ++i) { dist[i] = inf; pre[i] = -1; } dist[src] = 0; bool flag; for (i=1; i<n; ++i){ flag = false; // 优化 for (j=0; j<m; ++j) { if( 1 == relax(edge[j][0], edge[j][1], edge[j][2]) ) flag = true; } if( !flag ) break; } for (j=0; j<m; ++j) { if (1 == relax(edge[j][0], edge[j][1], edge[j][2])) return 0; // 有负圈 } return 1; } /*==================================================*\ | SPFA(Shortest Path Faster Algorithm) Bellman-Ford 算法的一种队列实现,减少了不必要的冗余计算。
[考研类试卷]计算机专业基础综合数据结构(图)历年真题试卷汇编9 一、综合题1 下面的邻接表表示一个给定的无向图。
(1)给出从顶点v1开始,对图G用深度优先搜索法进行遍历时的顶点序列;(2)给出从顶v1,1开始,对图G用广度优先搜索法进行遍历时的顶点序列。
【复旦大学1998六(10分)】1 给出图G:2 画出G的邻接表表示图;3 根据你画出的邻接表,以顶点①为根,画出G的深度优先生成树和广度优先生成树。
【南开大学1997五(14分)】【烟台大学2007四、3(15分)】4 已知一个有向图如图所示,则从顶点a出发进行深度优先遍历,写出所有可能得到的DFS序列。
【北京交通大学2006四、4(5分)】4 解答下面的问题:【西安电子科技大学2000计算机应用六(10分)】5 如果每个指针需要4字节,每个顶点的标号占2字节,每条边的权值占2字节。
下图采用哪种表示法所需的空间较多?为什么?6 写出下图从顶点1开始的:DFS树。
7 如下所示的连通图,请画出:(1)以顶点①为根的深度优先生成树;(5分)(2)如果有关节顶点,请找出所有的关节顶点。
(5分)【清华大学l 998七(10分)】7 某田径赛中各选手的参赛项目表如下:设项目A,B,…,F各表示一数据元素,若两项目不能同时举行,则将其连线(约束条件)。
8 根据此表及约束条件画出相应的图状结构模型,并画出此图的邻接表结构;9 写出从元素A出发按“广度优先搜索”算法遍历此图的元素序列。
【北京科技大学1999五2000五(12分)】10 考虑下图:(1)从顶点A出发,求它的深度优先生成树。
(2)从顶点E出发,求它的广度优先生成树。
(3)根据普利姆(Prim)算法,求它的最小生成树。
【上海交通大学1999六(12分)】11 在什么情况下,Prim算法与Kruskual算法生成不同的MST?【西安电子科技大学2000计算机应用一、11(5分)】12 已知一个无向图如下图所示,要求分别用Prim和Kruskal算法生成最小生成树(假设以①为起点,试画出构造过程)。
计算机考研专业课大纲——专业学位第一部分概述一、考查目标计算机学科专业综合考试包括《数据结构》和《高级语言程序设计》学科专业基础课程。
要求考生比较系统地掌握上述专业基础课程的概念,理论、技能和方法,能够运用所学的知识判断和解决相关的理论问题和实际问题。
二、考试形式和试卷结构试卷满分及考试时间本试卷满分为150分,考试时间为180分钟答题方式:闭卷、笔试三、试卷内容结构数据结构75分高级语言程序设计75分四、试卷题型结构第二部分《数据结构》第三部分《高级语言程序设计》第二部分《数据结构》考查目标1. 熟悉数据结构的相关概念及其分类,数据结构与算法的关系。
掌握线性表、堆栈和队列,数组和字符串等数据结构的存储、操作和应用,树与二叉树的性质与应用算法,图的存储结构和相关算法,排序与查找的典型算法。
2. 掌握算法时空复杂性分析和正确性验证的基本方法。
3.能够综合运用数据结构、算法、数学等多种知识,对问题进行分析、建模,选择或构建合适的数据结构,设计较优算法。
题型结构:包括问答题与算法设计题具体内容:一、绪论(1)数据、数据元素、数据逻辑结构和存储结构的定义及其关系;(2)数据逻辑结构及其分类;(3)算法的定义和特征;(4)算法的正确性证明方法;(5)算法的时间和空间复杂性分析方法及复杂性函数的渐进表示。
二、线性表、堆栈和队列(1)线性结构的概念和特点;(2)顺序存储和链式存储线性表的基本操作;(3)堆栈的定义和两种存储结构下堆栈的基本操作;(4)堆栈在括号匹配和递归中的应用;(5)队列的定义和两种存储结构下队列的基本操作;(6)队列的应用。
三、数组和字符串(1)二维及多维数组的存储原理及寻址方式;(2)矩阵的存储及基本操作;(3)三元组表和十字链表存储的稀疏矩阵的基本操作;(4)字符串的存储及基本操作;(5)模式匹配算法。
四、树与二叉树(1)树的概念、相关术语和表示方法;(2)二叉树的定义和性质;(3)二叉树的顺序存储结构和链接存储结构;(4)二叉树遍历的递归与非递归算法;(5)线索二叉树的定义和操作;(6)树与二叉树的转换;(7)树的链接存储结构,树和森林的遍历算法;(8)树的顺序存储结构;(9)树在并查集实现中的应用。
吉林大学2019-2020学年第2学期《数据结构》课程设计C题Normal Track六子棋锦标赛五子棋起源于中国,发展在日本,是一类经典的棋类博弈项目。
随着传统的五子棋被证明存在先手必胜的公平性问题,六子棋逐渐发展起来。
六子棋规则与五子棋类似,且能保证公平性,是“中国大学生计算机博弈大赛暨中国计算机博弈锦标赛”的正式比赛项目。
在本题中,你的任务是编写六子棋AI程序,即让程序自动下棋,并与其他同学对战博弈,进而决出冠军及名次。
游戏规则:六子棋的规则与五子棋非常相似,玩家有黑白两方,各持黑子与白子,黑方先行。
采用19 19的棋盘。
具体玩法:除了第一次黑方下一子外,之后白黑双方轮流每次各下两子(即第一步黑方下一子、然后白方下两子、黑方下两子、白方下两子……)。
直的、横的、斜的连成6子(或以上)者获胜。
若全部棋盘填满仍未分出胜负,则为和局。
不允许在棋盘同一位置重复下子,若一方在已有棋子的位置下子,则视为非法操作,直接判负。
图1为黑方获胜。
图1代码实现:学生无需掌握图形界面编程技术,只需使用C/C++语言,在给定的“框架程序”chess.cpp 中填写核心代码即可,对战平台负责图形显示。
本题采用中国大学生计算机博弈大赛官方对战平台。
允许使用STL。
(1)棋盘坐标设定19 19的二维棋盘分为横轴和纵轴两个维度,以左上角为坐标原点。
坐标系如图2所示。
在框架程序中,棋盘信息存储在数组int Board[19][19]中,下标从0开始,元素Board[x][y]有0、1、2三种可能取值,分别表示棋盘(x, y)处为黑子、白子、空白(没有任何棋子)。
图2 棋盘坐标系图3 对战平台与博弈程序通信示例(2)学生程序与对战平台的通信原理了解本小节内容有助于理解框架程序的运行原理和流程。
若不想或无法理解本节内容,可直接跳过本节看(3),对完成本题没有影响。
学生程序与对战平台程序是两个不同的进程,两个进程间的通信通过匿名管道技术与标准输入输出重定向来实现。
数据结构单选题:1.线性链表中各结点之间的地址()。
4.连续与否无所谓2 线性表是具有n个( )的有限序列。
3.数据元素3 若长度为n的线性表采用顺序存储结构,在其第i个位置插入一个新元素的算法的时间复杂度为( )。
(1?i ?n+1)3.O(n)4.不带头结点的单链表head为空的判断条件是( )。
1.head==NULL5.线性表的长度是指()3.表中的元素个数6.某数组第一个元素的存储地址为200,每个元素的长度为4,则第五个元素的地址是()。
3.2167.链栈和顺序栈相比,有一个较明显的优点是( )。
1.通常不会出现栈满的情况8 带头结点的单链表head为空的判断条件是( )。
2.head->next==NULL9 在单链表中增加头结点的目的是为了( )。
1.方便运算的实现11 若某链表最常用的操作是在最后一个结点之后插入一个结点和删除最后一个结点,则采用( )存储方式最节省空间。
3.带头结点的双循环链表12.单链表的存储密度()。
3.小于113 非空的循环单链表head的尾结点(由p指针所指)满足( )。
3.p->next==head14 在一个单链表中,已知(*q)结点是(*p)结点的前驱结点,若在(*q)和(*p)之间插入(*s) 结点,则执行( )。
3.q->next=s ; s->next=p ;15 在一个单链表中,若删除(*p)结点的后继结点,则执行( )。
1.p->next=p->next->next ;16 设输入序列为的1,2,3,4,借助一个栈可以得到的输出序列是( )。
1.1,3,4,217.以下叙述正确的是( )。
3.顺序存储的线性表可以随机存取18.设输入序列为的A,B,C,D,借助一个栈不可以得到的输出序列是( )。
4.D,A,B,C19 栈和队列都是()3.限制存取点的线性结构20.设输入序列为1,2,3,4,5,借助一个栈可以得到的输出序列是( )。
学生成绩管理系统一. 系统功能结构图二. 数据结构的设计及用法说明数据结构设计:本程序利用c 语言结构体及链表等数据结构完成对学生成绩的动态管理。
将一个学生当作一个结点,这个结点的类型为结构体,结构体中的域表示学生的属性,每个结点除了存放属性外,还存放结点之间的关系,即存放指向后继结点的指针。
所以定义表结点结构如下: #define N 4typedef struct s1{char no[11];char name[15];char sex[7];char age[3];int score[N];float sum;float average;int order;struct s1 *next;}STUDENT;三. 程序流程图 ( 见附录 II )四. 模块功能Main ()主函数主函数是程序的入口,采用模块化设计。
首先声明必要的变量,然后进行链表的初始化,完成程序入口。
init()初始化单链表需要一个头指针指向表的第一个结点,对单链表的访问使从头指针开始的,初始化单链表为空。
空用NULL 表示,该值在头文件stdio.h 中定义为常数0. _menu 主菜单程序引用putch()输出图形符号的ASCII 码值来实现边框。
利用window 函数制作显示窗口,该窗口比边框略小一些,正好包含于边框之中。
通过key()实现对光标键的捕捉,光条的移动通过ups ()和dns ()实现。
同时检测ENTER 键,若捕捉到此键,则执行相应的函数模块。
create ()创建单链表 主程序初始化 菜单界面输入 退出分类 插入 计算 读取 保存 查找 显示 删除进入主菜单中的“Enter list”选项,进入创建链表函数,即输入学生信息,按照提示信息输入学号,姓名,性别,课程成绩,每输入一个数按一下回车,当输入学号字符为@时结束输入,返回主函数,单链表创建完毕,输入界面如图:数据完整性的验证由两个函数create()和inputs()完成。
2022年吉林大学数据科学与大数据技术专业《计算机系统结构》科目期末试卷A(有答案)一、选择题1、设16个处理器编号分别为0,1,2,...,15用Cube,互联函数时,第10号处理机与第()号处理机相联。
A.11B.8C.14D.22、从计算机系统结构上讲,机器语言程序员所看到的机器属性是()A.计算机软件所要完成的功能B.计算机硬件的全部组成C.编程要用到的硬件组织D.计算机各部件的硬件实现。
3、下列说法中不正确的是( )A.软件设计费用比软件重复生产费用高B.硬件功能只需实现一次,而软件功能可能要多次重复实现C.硬件的生产费用比软件的生产费用高D.硬件的设计费用比软件的设计费用低4、对汇编语言程序员透明的是()A.I/O方式中的DMA访问B.浮点数据表示C.访问方式保护D.程序性中断5、IBM360/91对指令中断的处理方法是()A.不精确断点法B.精确断点法C.指令复执法D.对流水线重新调度6、从计算机系统结构上讲,机器语言程序员所看到的机器属性是( )。
A.计算机软件所要完成的功能B.计算机硬件的全部组成C.编程要用到的硬件组织D.计算机各部件的硬件实现7、推出系列机的新机器,不能更改的是( )A.原有指令的寻址方式和操作码B.系统总线的组成C.数据通路宽度D.存贮芯片的集成度8、在计算机系统的层次结构中,机器被定义为()的集合体A.能存储和执行相应语言程序的算法和数据结构B.硬件和微程序(固件)C.软件和固件D.软件和硬件9、在操作系统机器级,一般用()程序()作业控制语句。
A.汇编程序,翻译B.汇编程序,解释C.机器语言,解释D.机器语言,翻译10、()属于MIMD系统结构。
A.各处理单元同时受同一个控制单元的管理B.各处理单元同时接受同一个控制单元送来的指令C.松耦合多处理机和多计算机D.阵列处理机二、填空题11、要实现两条指令在时间上重叠解释,首先需要付出________,其次,要处理好指令之间可能存在的________12、目前已有的向量处理机结构主要采用________和________两种结构。
吉林大学99考研题
报考专业:计算机软件与理论、计算机应用技术、计算机系统结构
研究方向:计算机学科各方向
考试科目:综合
*写算法要求用标准的ADL算法描述语言,注意给出详尽的结解释过程。
一、回答下列问题(12分):
1.已知一棵高度平衡树如下,其中各节点间大小关系(中根次序)按字典序排列,请画出插入节点JUN后,该二叉树经平衡过程而形成的树形,并说明采用何种转动方式,标出平衡后各节点的平衡系数。
(4分)
2.对于如下的加权有向图,给出算法Dijkstra产生的最短路径的支撑树,设顶点A为源点,并写出生成过程。
(4分)。
30
3.已知2棵(2,3)-树如下(省略外节点):(4分)
(1)对树(a),请分别画出先后插入26,85两个新节点后的树形;
(2)对树(b),请分别画出先后删除53,37两个节点后的树形。