class059 建图、链式前向星、拓扑排序【算法】

class059 建图、链式前向星、拓扑排序【算法】

在这里插入图片描述

在这里插入图片描述

code1 建图

package class059;import java.util.ArrayList;
import java.util.Arrays;public class Code01_CreateGraph {// 点的最大数量public static int MAXN = 11;// 边的最大数量// 只有链式前向星方式建图需要这个数量// 注意如果无向图的最大数量是m条边,数量要准备m*2// 因为一条无向边要加两条有向边public static int MAXM = 21;// 邻接矩阵方式建图public static int[][] graph1 = new int[MAXN][MAXN];// 邻接表方式建图// public static ArrayList<ArrayList<Integer>> graph2 = new ArrayList<>();public static ArrayList<ArrayList<int[]>> graph2 = new ArrayList<>();// 链式前向星方式建图public static int[] head = new int[MAXN];public static int[] next = new int[MAXM];public static int[] to = new int[MAXM];// 如果边有权重,那么需要这个数组public static int[] weight = new int[MAXM];public static int cnt;public static void build(int n) {// 邻接矩阵清空for (int i = 1; i <= n; i++) {for (int j = 1; j <= n; j++) {graph1[i][j] = 0;}}// 邻接表清空和准备graph2.clear();// 下标需要支持1~n,所以加入n+1个列表,0下标准备但不用for (int i = 0; i <= n; i++) {graph2.add(new ArrayList<>());}// 链式前向星清空cnt = 1;Arrays.fill(head, 1, n + 1, 0);}// 链式前向星加边public static void addEdge(int u, int v, int w) {// u -> v , 边权重是wnext[cnt] = head[u];to[cnt] = v;weight[cnt] = w;head[u] = cnt++;}// 三种方式建立有向图带权图public static void directGraph(int[][] edges) {// 邻接矩阵建图for (int[] edge : edges) {graph1[edge[0]][edge[1]] = edge[2];}// 邻接表建图for (int[] edge : edges) {// graph2.get(edge[0]).add(edge[1]);graph2.get(edge[0]).add(new int[] { edge[1], edge[2] });}// 链式前向星建图for (int[] edge : edges) {addEdge(edge[0], edge[1], edge[2]);}}// 三种方式建立无向图带权图public static void undirectGraph(int[][] edges) {// 邻接矩阵建图for (int[] edge : edges) {graph1[edge[0]][edge[1]] = edge[2];graph1[edge[1]][edge[0]] = edge[2];}// 邻接表建图for (int[] edge : edges) {// graph2.get(edge[0]).add(edge[1]);// graph2.get(edge[1]).add(edge[0]);graph2.get(edge[0]).add(new int[] { edge[1], edge[2] });graph2.get(edge[1]).add(new int[] { edge[0], edge[2] });}// 链式前向星建图for (int[] edge : edges) {addEdge(edge[0], edge[1], edge[2]);addEdge(edge[1], edge[0], edge[2]);}}public static void traversal(int n) {System.out.println("邻接矩阵遍历 :");for (int i = 1; i <= n; i++) {for (int j = 1; j <= n; j++) {System.out.print(graph1[i][j] + " ");}System.out.println();}System.out.println("邻接表遍历 :");for (int i = 1; i <= n; i++) {System.out.print(i + "(邻居、边权) : ");for (int[] edge : graph2.get(i)) {System.out.print("(" + edge[0] + "," + edge[1] + ") ");}System.out.println();}System.out.println("链式前向星 :");for (int i = 1; i <= n; i++) {System.out.print(i + "(邻居、边权) : ");// 注意这个for循环,链式前向星的方式遍历for (int ei = head[i]; ei > 0; ei = next[ei]) {System.out.print("(" + to[ei] + "," + weight[ei] + ") ");}System.out.println();}}public static void main(String[] args) {// 理解了带权图的建立过程,也就理解了不带权图// 点的编号为1...n// 例子1自己画一下图,有向带权图,然后打印结果int n1 = 4;int[][] edges1 = { { 1, 3, 6 }, { 4, 3, 4 }, { 2, 4, 2 }, { 1, 2, 7 }, { 2, 3, 5 }, { 3, 1, 1 } };build(n1);directGraph(edges1);traversal(n1);System.out.println("==============================");// 例子2自己画一下图,无向带权图,然后打印结果int n2 = 5;int[][] edges2 = { { 3, 5, 4 }, { 4, 1, 1 }, { 3, 4, 2 }, { 5, 2, 4 }, { 2, 3, 7 }, { 1, 5, 5 }, { 4, 2, 6 } };build(n2);undirectGraph(edges2);traversal(n2);}}

code2 210. 课程表 II

// 拓扑排序模版(Leetcode)
// 邻接表建图(动态方式)
// 课程表II
// 现在你总共有 numCourses 门课需要选,记为 0 到 numCourses - 1
// 给你一个数组 prerequisites ,其中 prerequisites[i] = [ai, bi]
// 表示在选修课程 ai 前 必须 先选修 bi
// 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示:[0,1]
// 返回你为了学完所有课程所安排的学习顺序。可能会有多个正确的顺序
// 你只要返回 任意一种 就可以了。如果不可能完成所有课程,返回 一个空数组
// 测试链接 : https://leetcode.cn/problems/course-schedule-ii/

入度删除法

package class059;import java.util.ArrayList;// 拓扑排序模版(Leetcode)
// 邻接表建图(动态方式)
// 课程表II
// 现在你总共有 numCourses 门课需要选,记为 0 到 numCourses - 1
// 给你一个数组 prerequisites ,其中 prerequisites[i] = [ai, bi]
// 表示在选修课程 ai 前 必须 先选修 bi
// 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示:[0,1]
// 返回你为了学完所有课程所安排的学习顺序。可能会有多个正确的顺序
// 你只要返回 任意一种 就可以了。如果不可能完成所有课程,返回 一个空数组
// 测试链接 : https://leetcode.cn/problems/course-schedule-ii/
public class Code02_TopoSortDynamicLeetcode {public static int[] findOrder(int numCourses, int[][] prerequisites) {ArrayList<ArrayList<Integer>> graph = new ArrayList<>();// 0 ~ n-1for (int i = 0; i < numCourses; i++) {graph.add(new ArrayList<>());}// 入度表int[] indegree = new int[numCourses];for (int[] edge : prerequisites) {graph.get(edge[1]).add(edge[0]);indegree[edge[0]]++;}int[] queue = new int[numCourses];int l = 0;int r = 0;for (int i = 0; i < numCourses; i++) {if (indegree[i] == 0) {queue[r++] = i;}}int cnt = 0;while (l < r) {int cur = queue[l++];cnt++;for (int next : graph.get(cur)) {if (--indegree[next] == 0) {queue[r++] = next;}}}return cnt == numCourses ? queue : new int[0];}}

code2 【模板】拓扑排序

// 拓扑排序模版(牛客)
// 邻接表建图(动态方式)
// 测试链接 : https://www.nowcoder.com/practice/88f7e156ca7d43a1a535f619cd3f495c
// 请同学们务必参考如下代码中关于输入、输出的处理
// 这是输入输出处理效率很高的写法
// 提交以下所有代码,把主类名改成Main,可以直接通过

package class059;// 拓扑排序模版(牛客)
// 邻接表建图(动态方式)
// 测试链接 : https://www.nowcoder.com/practice/88f7e156ca7d43a1a535f619cd3f495c
// 请同学们务必参考如下代码中关于输入、输出的处理
// 这是输入输出处理效率很高的写法
// 提交以下所有代码,把主类名改成Main,可以直接通过import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
import java.util.ArrayList;
import java.util.Arrays;public class Code02_TopoSortDynamicNowcoder {public static int MAXN = 200001;// 拓扑排序,用到队列public static int[] queue = new int[MAXN];public static int l, r;// 拓扑排序,入度表public static int[] indegree = new int[MAXN];// 收集拓扑排序的结果public static int[] ans = new int[MAXN];public static int n, m;public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));StreamTokenizer in = new StreamTokenizer(br);PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));while (in.nextToken() != StreamTokenizer.TT_EOF) {n = (int) in.nval;in.nextToken();m = (int) in.nval;// 动态建图,比赛肯定不行,但是一般大厂笔试、面试允许ArrayList<ArrayList<Integer>> graph = new ArrayList<>();for (int i = 0; i <= n; i++) {graph.add(new ArrayList<>());}Arrays.fill(indegree, 0, n + 1, 0);for (int i = 0, from, to; i < m; i++) {in.nextToken();from = (int) in.nval;in.nextToken();to = (int) in.nval;graph.get(from).add(to);indegree[to]++;}if (!topoSort(graph)) {out.println(-1);} else {for (int i = 0; i < n - 1; i++) {out.print(ans[i] + " ");}out.println(ans[n - 1]);}}out.flush();out.close();br.close();}// 有拓扑排序返回true// 没有拓扑排序返回falsepublic static boolean topoSort(ArrayList<ArrayList<Integer>> graph) {l = r = 0;for (int i = 1; i <= n; i++) {if (indegree[i] == 0) {queue[r++] = i;}}int fill = 0;while (l < r) {int cur = queue[l++];ans[fill++] = cur;for (int next : graph.get(cur)) {if (--indegree[next] == 0) {queue[r++] = next;}}}return fill == n;}}

code2 【模板】拓扑排序

// 拓扑排序模版(牛客)
// 链式前向星建图(静态方式)
// 测试链接 : https://www.nowcoder.com/practice/88f7e156ca7d43a1a535f619cd3f495c
// 请同学们务必参考如下代码中关于输入、输出的处理
// 这是输入输出处理效率很高的写法
// 提交以下所有代码,把主类名改成Main,可以直接通过

package class059;// 拓扑排序模版(牛客)
// 链式前向星建图(静态方式)
// 测试链接 : https://www.nowcoder.com/practice/88f7e156ca7d43a1a535f619cd3f495c
// 请同学们务必参考如下代码中关于输入、输出的处理
// 这是输入输出处理效率很高的写法
// 提交以下所有代码,把主类名改成Main,可以直接通过import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
import java.util.Arrays;public class Code02_TopoSortStaticNowcoder {public static int MAXN = 200001;public static int MAXM = 200001;// 建图相关,链式前向星public static int[] head = new int[MAXN];public static int[] next = new int[MAXM];public static int[] to = new int[MAXM];public static int cnt;// 拓扑排序,用到队列public static int[] queue = new int[MAXN];public static int l, r;// 拓扑排序,入度表public static int[] indegree = new int[MAXN];// 收集拓扑排序的结果public static int[] ans = new int[MAXN];public static int n, m;public static void build(int n) {cnt = 1;Arrays.fill(head, 0, n + 1, 0);Arrays.fill(indegree, 0, n + 1, 0);}// 用链式前向星建图public static void addEdge(int f, int t) {next[cnt] = head[f];to[cnt] = t;head[f] = cnt++;}public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));StreamTokenizer in = new StreamTokenizer(br);PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));while (in.nextToken() != StreamTokenizer.TT_EOF) {n = (int) in.nval;in.nextToken();m = (int) in.nval;build(n);for (int i = 0, from, to; i < m; i++) {in.nextToken();from = (int) in.nval;in.nextToken();to = (int) in.nval;addEdge(from, to);indegree[to]++;}if (!topoSort()) {out.println(-1);} else {for (int i = 0; i < n - 1; i++) {out.print(ans[i] + " ");}out.println(ans[n - 1]);}}out.flush();out.close();br.close();}public static boolean topoSort() {l = r = 0;for (int i = 1; i <= n; i++) {if (indegree[i] == 0) {queue[r++] = i;}}int fill = 0;while (l < r) {int cur = queue[l++];ans[fill++] = cur;// 用链式前向星的方式,遍历cur的相邻节点for (int ei = head[cur]; ei != 0; ei = next[ei]) {if (--indegree[to[ei]] == 0) {queue[r++] = to[ei];}}}return fill == n;}}

code3 U107394 拓扑排序模板

// 字典序最小的拓扑排序
// 要求返回所有正确的拓扑排序中 字典序最小 的结果
// 建图请使用链式前向星方式,因为比赛平台用其他建图方式会卡空间
// 测试链接 : https://www.luogu.com.cn/problem/U107394
// 请同学们务必参考如下代码中关于输入、输出的处理
// 这是输入输出处理效率很高的写法
// 提交以下所有代码,把主类名改成Main,可以直接通过

code4 269.火星词典

// 火星词典
// 现有一种使用英语字母的火星语言
// 这门语言的字母顺序对你来说是未知的。
// 给你一个来自这种外星语言字典的字符串列表 words
// words 中的字符串已经 按这门新语言的字母顺序进行了排序 。
// 如果这种说法是错误的,并且给出的 words 不能对应任何字母的顺序,则返回 “”
// 否则,返回一个按新语言规则的 字典递增顺序 排序的独特字符串
// 如果有多个解决方案,则返回其中任意一个
// words中的单词一定都是小写英文字母组成的
// 测试链接 : https://leetcode.cn/problems/alien-dictionary/

题目:
269.火星词典 Plus
困难

现有一种使用英语字母的火星语言,这门语言的字母顺序对你来说是未知的。
给你一个来自这种外星语言字典的字符串列表wordswords 中的字符串已经 按这门新语言的字母顺序进行了排序

如果这种说法是错误的,并且给出的 words 不能对应任何字母的顺序,则返回""
否则,返回一个按新语言规则的 字典递增顺序排序的独特字符串。如果有多个解决方案,则返回其中 任意一个

示例 1:
输入:words=
[“wrt”,“wrf”,“er”,“ett”,“rftt”]
输出:“wertf"
示例2:
输入:words =[“z”,“x”]
输出:“zx"
示例3:
输入:words =[“z”,“x”,“z”]
输出:"
解释:不存在合法字母顺序,因此返回

package class059;import java.util.ArrayList;
import java.util.Arrays;// 火星词典
// 现有一种使用英语字母的火星语言
// 这门语言的字母顺序对你来说是未知的。
// 给你一个来自这种外星语言字典的字符串列表 words
// words 中的字符串已经 按这门新语言的字母顺序进行了排序 。
// 如果这种说法是错误的,并且给出的 words 不能对应任何字母的顺序,则返回 ""
// 否则,返回一个按新语言规则的 字典递增顺序 排序的独特字符串
// 如果有多个解决方案,则返回其中任意一个
// words中的单词一定都是小写英文字母组成的
// 测试链接 : https://leetcode.cn/problems/alien-dictionary/
public class Code04_AlienDictionary {public static String alienOrder(String[] words) {// 入度表,26种字符int[] indegree = new int[26];Arrays.fill(indegree, -1);for (String w : words) {for (int i = 0; i < w.length(); i++) {indegree[w.charAt(i) - 'a'] = 0;}}// 'a' -> 0// 'b' -> 1// 'z' -> 25// x -> x - 'a'ArrayList<ArrayList<Integer>> graph = new ArrayList<>();for (int i = 0; i < 26; i++) {graph.add(new ArrayList<>());}for (int i = 0, j, len; i < words.length - 1; i++) {String cur = words[i];String next = words[i + 1];j = 0;len = Math.min(cur.length(), next.length());for (; j < len; j++) {if (cur.charAt(j) != next.charAt(j)) {graph.get(cur.charAt(j) - 'a').add(next.charAt(j) - 'a');indegree[next.charAt(j) - 'a']++;break;}}if (j < cur.length() && j == next.length()) {return "";}}int[] queue = new int[26];int l = 0, r = 0;int kinds = 0;for (int i = 0; i < 26; i++) {if (indegree[i] != -1) {kinds++;}if (indegree[i] == 0) {queue[r++] = i;}}StringBuilder ans = new StringBuilder();while (l < r) {int cur = queue[l++];ans.append((char) (cur + 'a'));for (int next : graph.get(cur)) {if (--indegree[next] == 0) {queue[r++] = next;}}}return ans.length() == kinds ? ans.toString() : "";}}

code5 936. 戳印序列

// 戳印序列
// 你想最终得到"abcbc",认为初始序列为"???“。印章是"abc”
// 那么可以先用印章盖出"??abc"的状态,
// 然后用印章最左字符和序列的0位置对齐,就盖出了"abcbc"
// 这个过程中,"??abc"中的a字符,被印章中的c字符覆盖了
// 每次盖章的时候,印章必须完全盖在序列内
// 给定一个字符串target是最终的目标,长度为n,认为初始序列为n个’?’
// 给定一个印章字符串stamp,目标是最终盖出target
// 但是印章的使用次数必须在10n次以内
// 返回一个数组,该数组由每个回合中被印下的最左边字母的索引组成
// 上面的例子返回[2,0],表示印章最左字符依次和序列2位置、序列0位置对齐盖下去,就得到了target
// 如果不能在10
n次内印出序列,就返回一个空数组
// 测试链接 : https://leetcode.cn/problems/stamping-the-sequence/

package class059;import java.util.ArrayList;
import java.util.Arrays;// 戳印序列
// 你想最终得到"abcbc",认为初始序列为"?????"。印章是"abc"
// 那么可以先用印章盖出"??abc"的状态,
// 然后用印章最左字符和序列的0位置对齐,就盖出了"abcbc"
// 这个过程中,"??abc"中的a字符,被印章中的c字符覆盖了
// 每次盖章的时候,印章必须完全盖在序列内
// 给定一个字符串target是最终的目标,长度为n,认为初始序列为n个'?'
// 给定一个印章字符串stamp,目标是最终盖出target
// 但是印章的使用次数必须在10*n次以内
// 返回一个数组,该数组由每个回合中被印下的最左边字母的索引组成
// 上面的例子返回[2,0],表示印章最左字符依次和序列2位置、序列0位置对齐盖下去,就得到了target
// 如果不能在10*n次内印出序列,就返回一个空数组
// 测试链接 : https://leetcode.cn/problems/stamping-the-sequence/
public class Code05_StampingTheSequence {public static int[] movesToStamp(String stamp, String target) {char[] s = stamp.toCharArray();char[] t = target.toCharArray();int m = s.length;int n = t.length;int[] indegree = new int[n - m + 1];Arrays.fill(indegree, m);ArrayList<ArrayList<Integer>> graph = new ArrayList<>();for (int i = 0; i < n; i++) {graph.add(new ArrayList<>());}int[] queue = new int[n - m + 1];int l = 0, r = 0;// O(n*m)for (int i = 0; i <= n - m; i++) {// i开头....(m个)// i+0 i+1 i+m-1for (int j = 0; j < m; j++) {if (t[i + j] == s[j]) {if (--indegree[i] == 0) {queue[r++] = i;}} else {// i + j // from : 错误的位置// to : i开头的下标graph.get(i + j).add(i);}}}// 同一个位置取消错误不要重复统计boolean[] visited = new boolean[n];int[] path = new int[n - m + 1];int size = 0;while (l < r) {int cur = queue[l++];path[size++] = cur;for (int i = 0; i < m; i++) {// cur : 开头位置// cur + 0 cur + 1 cur + 2 ... cur + m - 1if (!visited[cur + i]) {visited[cur + i] = true;for (int next : graph.get(cur + i)) {if (--indegree[next] == 0) {queue[r++] = next;}}}}}if (size != n - m + 1) {return new int[0];}// path逆序调整for (int i = 0, j = size - 1; i < j; i++, j--) {int tmp = path[i];path[i] = path[j];path[j] = tmp;}return path;}}

2023-12-7 22:08:59

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/256094.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity 关于Ray、RaycastHit、Raycast及其使用

Unity中&#xff0c;我们要进行物理模拟和碰撞检测时&#xff0c;有三个重要的概念Ray、RaycastHit、Raycast。 其中&#xff0c;Ray可以理解为射线&#xff0c;它是一条从起点沿着特定方向延伸的无限长线段。 它的语法是&#xff1a; Ray(Vector3 origin, Vector3 directio…

多路径传输(MPTCP MPQUIC)数据包调度研究总结

近些年来&#xff0c;以5G和Wifi6为代表的无线通信技术发展迅速&#xff0c;并已经在全世界实现了大规模部署。此外&#xff0c;智能手机等移动设备不断迭代更新&#xff0c;其网络通信能力也持续演进&#xff0c;使得应用同时利用多个不同网卡在多条不同物理链路上&#xff08…

2023-2024-1-高级语言程序设计-第2次月考编程题

注&#xff1a;此前已发布过的题解不再发布&#xff08;原题请在下面位置进行搜索&#xff09;。 7-1-2 排序(算法任意) 本题要求将给定的n个整数从大到小排序后输出&#xff08;可使用任意排序算法&#xff09;。 输入格式: 输入第一行给出一个不超过10的正整数n。第二行给…

【Docker】Swarm的ingress网络

Docker Swarm Ingress网络是Docker集群中的一种网络模式&#xff0c;它允许在Swarm集群中运行的服务通过一个公共的入口点进行访问。Ingress网络将外部流量路由到Swarm集群中的适当服务&#xff0c;并提供负载均衡和服务发现功能。 在Docker Swarm中&#xff0c;Ingress网络使…

如何使用HadSky搭配内网穿透工具搭建个人论坛并发布至公网随时随地可访问

文章目录 前言1. 网站搭建1.1 网页下载和安装1.2 网页测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar临时数据隧道2.2 Cpolar稳定隧道&#xff08;云端设置&#xff09;2.3 Cpolar稳定隧道&#xff08;本地设置&#xff09;2.4 公网访问测试 总结 前言 经过多年的基础…

ORA-600 kcbzib_kcrsds_1一键恢复

一个19c库由于某种原因redo损坏强制打开库报ORA-600 kcbzib_kcrsds_1错误 SQL> startup mount pfile?/database/pfile.txt; ORACLE instance started. Total System Global Area 859830696 bytes Fixed Size 9034152 bytes Variable Size 5…

Android平板还能编程?Ubuntu本地安装code-server远程编程写代码

文章目录 1.ubuntu本地安装code-server2. 安装cpolar内网穿透3. 创建隧道映射本地端口4. 安卓平板测试访问5.固定域名公网地址6.结语 1.ubuntu本地安装code-server 准备一台虚拟机,Ubuntu或者centos都可以&#xff0c;这里以VMwhere ubuntu系统为例 下载code server服务,浏览器…

TCP通讯

第二十一章 网络通信 本章节主要讲解的是TCP和UDP两种通信方式它们都有着自己的优点和缺点 这两种通讯方式不通的地方就是TCP是一对一通信 UDP是一对多的通信方式 接下来会一一讲解 TCP通信 TCP通信方式呢 主要的通讯方式是一对一的通讯方式&#xff0c;也有着优点和缺点…

Spring AOP从入门到精通

目录 1. AOP的演化过程 1. 代理模式 2. 动态代理 2.1 JDK动态代理 2.2 Cglib动态代理 3. Spring模式 3.1 ProxyFactory 3.2 ProxyFactoryBean 3.3 AbstractAutoProxyCreator 2. Spring AOP抽象 1. 核心术语 1.1 连接点(JoinPoint) 1.2 切点(Pointcut) 1.3 增强(Ad…

使用Java网络编程,窗口,线程,IO,内部类等实现多人在线聊天1.0

1.整体思路 思路图 整体思路如上: 涉及知识点:线程网络编程集合IO等 TCP 协议 2.代码实现过程 服务端 import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import jav…

【C语言快速学习基础篇】之一基础类型、进制转换、数据位宽

文章目录 一、基础类型(根据系统不同占用字节数会有变化)1.1、有符号整形1.2、无符号整形1.3、字符型1.4、浮点型1.5、布尔型 二、进制转换2.1、二进制2.2、八进制2.3、十进制2.4、十六进制2.5、N进制2.6、进制转换关系对应表 三、数据位宽3.1、位3.2、字节3.3、字3.4、双字3.5…