菩提网络 - 网络技术分享的网站 - 考研408
type: channel
link: https://www.1023.lol/tag/%E8%80%83%E7%A0%94408/
items: 408计算机网络背诵宝典：从基础到高阶全梳理
items: 数据结构-栈的操作
items: 数据结构-线性表完整代码

408计算机网络背诵宝典：从基础到高阶全梳理
type: item
date: 2025-08-03T11:43:11+08:00
description: 第一章：计算机网络体系结构**计算机网络基础概念计算机网络是利用通信设备和线路将功能独立的多个计算机互联起来，通过功能完善的管理软件实现网络中资源共享和信息交互。其功能涵盖数据通信（实现计算机与终端、计算机与计算机之间的信息快速传送 ，像日常的文件传输、网页浏览等）、资源共享（共享网络中的软件、硬件和数据资源，例如共享打印机、数据库资源等）、分布式处理（多台计算机分工处理同一个任务的不同部分，如 Hadoop 平台用于大规模数据处理）、提高可靠性（当一台计算机出现故障，其他计算机可替代工作）以及负载均衡（多台计算机分担工作任务，避免单台计算机负载过重）。计算机网络依据分布范围，可分为广域网（WAN ）、城域网（MAN ）、局域网（LAN ）和个人区域网（PAN ）。广域网覆盖范围通常是直径为几十千米到几千千米的区域，是因特网的核心部分，用于远程数据传输和大规模的网络通信，如跨国公司的数据交换；城域网覆盖范围可以跨越几个街区甚至是整个城市，直径范围是 5 - 50 千米，大多采用以太网技术；局域网一般用微机或工作站通过高速线路相连，覆盖范围较小，通常是直径几十米到几千米的区域 ，在计算机配置数量上无太多限制，传统上使用广播技术；个人区域网是指在个人工作的地方将消费电子设备用无线技术连接起来的网络，覆盖区域直径约为 10 米。按使用者分类，可分为公用网（如中国电信、移动、联通等向公众开放的网络）和专用网（像军队、政府、银行、铁路、公安等仅供特定组织内部使用的网络 ）。常见的基本拓扑结构包括总线形、星形、环形、树形和网状形。总线形结构采用广播式传输方式，所有设备通过一个共同的通信线路连接，数据在总线上 “广播” 传输，可能会存在总线争用问题，典型代表是集线器连接的网络；星形结构中所有数据流都经过中央设备（如交换机或集线器），每个节点通过独立的连接与中央设备相连，实现 “点到点” 的通信，不存在 “总线争用” 问题，以太网交换机是典型代表；环形结构中数据通过 “令牌” 依次传递，每个设备都需要获得令牌才能发送数据，避免了总线争用的问题，令牌环网是这种结构的典型代表，曾广泛应用于 2000 年以前的局域网技术；树形结构结合了星型和总线型拓扑的特点，有一个主干链路，从主干上分出多个星型子网，形成层次结构，易于扩展和管理，故障隔离相对容易 ，常用于大型企业网络和校园网络；网状形结构中每个设备（节点）与其他设备直接连接，数据通过中间节点逐一存储并转发，属于 “点到点” 传输，由众多路由器构建的广域网是网状结构的典型代表，具有高冗余性和可靠性，但成本高、管理复杂。从逻辑功能上，计算机网络可分为资源子网和通信子网，资源子网负责实现资源共享和数据处理，通信子网负责实现数据通信。性能指标详解带宽是指在一定时间内（通常是 1 秒）能够通过网络从一个点传送到另一个点的最大数据量 ，单位是比特 / 秒（bit/s ），常见单位还有千比特每秒（Kbps）、兆比特每秒（Mbps ）、吉比特每秒（Gbps）等 ，它反映了网络连接的能力。比如，我们常说的 100M 宽带，这里的 100M 指的是 100Mbps ，即理论上每秒能传输 100,000,000 比特的数据。时延是指一个数据块从网络的一端传送到另一端所需要的时间，单位是秒（s） ，由发送时延、传播时延、处理时延和排队时延组成。发送时延是主机或路由器发送数据帧所需要的时间，计算公式为发送时延 = 数据帧长度（比特）/ 信道带宽（比特 / 秒） ，数据帧越长、信道带宽越低，发送时延越大；传播时延是电磁波在信道中传播一定距离需要花费的时间 ，计算公式为传播时延 = 信道长度（米）/ 电磁波在信道上的传播速率（米 / 秒） ，信道越长、传播速率越低，传播时延越大；处理时延是主机或路由器在收到分组时进行处理（如分析分组首部、提取数据、差错校验、查找路由等）所花费的时间，其大小取决于主机或路由器的性能以及分组的大小和复杂性；排队时延是分组在经过网络传输时，在路由器输入队列和输出队列中排队等待处理和转发所花费的时间，其大小取决于网络拥塞程度、路由器的处理能力和队列的大小等因素。吞吐量是指单位时间内通过某个网络（或信道、接口）的数据量，受网络带宽和网络拓扑结构等因素影响 。速率即数据率、比特率，指的是单位时间内传输的数据量，单位为 bit/s。信道利用率是指某信道有百分之几的时间是被利用的（有数据通过），信道利用率并非越高越好，因为当信道利用率过高时，会产生较大的时延。体系结构与参考模型网络体系结构是计算机网络的各个层次及其相关协议的集合，是对计算机网络所完成功能的精确定义 。在网络体系结构中，涉及到接口数据单元（IDU）、服务数据单元（SDU）、协议数据单元（PDU） 。IDU 是在相邻层之间传输的数据单元；SDU …

数据结构-栈的操作
type: item
date: 2025-07-09T18:32:31+08:00
description: #include "stdio.h" #include "stdlib.h" typedef int E; struct Stack{ E * array; int capacity; int top; }; typedef struct Stack * ArrayStack; int initStack(ArrayStack stack){ stack->array = (E*)malloc(sizeof(E) * 10); if(stack->array == NULL) return 0; stack->capacity = 10; stack->top = -1; return 1; } int pushStack(ArrayStack stack,E element){ if(stack->top+1==stack->capacity){ int newCapacity = stack->capacity+(stack->capacity >> 1); E * newArray = (E*)realloc(stack->array,newCapacity*sizeof(E)); if(newArray == NULL) return 0; stack->array = newArray; stack->capacity = newCapacity; } stack->array[stack->top+1] = element; stack->top++; return 1; } void printStack(ArrayStack stack){ printf("| "); for (int i = 0; i < stack->top + 1; ++i) { printf("%d, ", stack->array[i]); } printf("\n"); } int isEmpty(ArrayStack stack){ return stack->top == -1; } int popStack(ArrayStack stack){ return stack->array[stack->top--]; } int main(){ struct Stack stack; initStack(&stack); for (int i = 0; i < 3; ++i) { pushStack(&stack, i*100); } printStack(&stack); while (!isEmpty(&stack)) { printf("%d ", popStack(&stack)); //将栈中所有元素依次出栈 } }

数据结构-线性表完整代码
type: item
date: 2025-07-06T17:23:42+08:00
description: 数据结构线性表完整代码#include "stdio.h" #include "stdlib.h" typedef int E; struct List{ E * array; int capacity; int size; }; typedef struct List *ArrayList; int initList(ArrayList list){ list->array = (E*)malloc(sizeof(E) * 10); if(list->array == NULL) return 0; list->capacity = 10; list->size = 0; return 1; } int insertList(ArrayList list,E element,E index){ if(index < 1|| index > list->size+1) return 0; for(int i = list->size;i>=index;--i){ list->array[i] = list->array[i-1]; } list->array[index - 1] = element; list->size++; return 1; } int delectList(ArrayList list,E index){ if(index<1||index>list->size+1) return 0; for(int i = index;i<=list->size-1;++i){ list->array[i] = list->array[i+1]; } list->size--; } int modify(ArrayList list,E element,E index){ if(index<1||index>list->size+1) return 0; list->array[index] = element; return 1; } int printList(ArrayList list){ for(int i = 0;i<list->size;i++){ printf("%d ",list->array[i]); } printf("\n"); } int getList(ArrayList list,E index){ printf("%d",list->array[index]); } int main(){ struct List list; if(initList(&list)){ insertList(&list, 666, 1); //每次插入操作后都打印一下表，看看当前的情况 printList(&list); insertList(&list, 777, 1); printList(&list); insertList(&list, 888, 1); printList(&list); delectList(&list,1); printList(&list); modify(&list,222,1); printList(&list); getList(&list,1); free(list.array); } else{ printf("插入失败"); } }