# 程序设计引导

本文详细介绍了程序设计的基本概念,包括编程目的、数据结构和算法。讲解了数组、链表、栈和队列的特点与优缺点,以及线性存储与链式存储的区别。还探讨了树与二叉树的结构,强调了二分查找的重要性。最后提到了操作系统、进程管理和存储器分配的相关知识,以及IP地址和子网掩码的概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 

1. 编程的目的

为了让计算机帮我们计算解决问题

  • 算法——解决问题的方法
  • 高级语言——py

数据非常多或庞大的话怎么存储?了解数据结构。

数据存储在内存中,数字1需要4个字节存储,12345都要存储,线性存储,

12345

除了首元素,所有的元素都有前区元素,除了尾元素,其他的元素都有后区元素;

第一个元素的地址为0x10,第二个为0x14,第三个为0x18,第四个为0x1C,第五个为0x20。

第一个地址记录为p,那么第三个为p+4*2.

数列的元素类型可以不同,但是数组的元素元素类型必须一样.

数组:3 5 8 9

想把6加入到数组中不改变有序性,第一步比较第一个元素,发现不符合,第二个不符合,第三个符合,6存放在8的位置,8后移,最后添加一个位置    

35910
abcnull

 数据

指针   :每一个数据存放的地址,a存放5的地址,b存放9的地址,c存放10的地址

链表中一个节点分为两个区域,一个指针域一个数据域,指针域的内容就是指针。指针指向下一个节点,a

 

数组的元素必须挨着存放,连续,而且如果想找到10的地址,要从第一个一次遍历,到最后一个,这样比较麻烦,所以如果想要多次删除和添加时用链表。

线性存储:数组

>优点:很便捷的访问数组中的每一个元素

>缺点:插入删除操作,代价过大

元素与元素之间在内存中连续存储,需要占用一整块内存

链式存储:链表

>优点:便于及进行插入删除操作,

>缺点:访问指定元素代价过大(与数组比较)

元素与元素之间位置没有要求,可以在任意位置,不需要连续存储空间,但是内存使用要比数组大

结构特点:后进先出,先进后出,入栈顺序与出栈顺序相反。栈顶与栈尾的结构

比如进制转换中10进制的10转换为2进制,依次除2取余,为0 1 0 1,第一个0先进栈,再依次进行,那么出栈时最后一个1先出

迷宫求解也是用了栈的特点来记录每一个走过的栈的位置,

  • 队列

队列特点:先进先出,后进后出。

练习:现在有一个队列,后面有一个栈,A B C D依次进入队列,进入栈出栈的可能情况。那么出队列的顺序为A B C D,

!!!!

树与二叉树结构

第一层为根节点,第二层叶节点!!!!!,后面的子节点。由同一个节点产生的节点为兄弟节点,上一节点为父节点,下面的某一个节点的上n个节点叫本节点的祖先,从根结点到该结点所经过分支上的所有结点

1.树的

某一个子节点最大的节点数。

2.树的深度

从第一层依次往下一共多少层。

  • 二叉树

不是度为2的树。一个叫做左节点一个叫做右节点。树和二叉树是完全不同的概念。

二分查找:比如1 2 3 4 5 6……

> 满二叉树

>>每一层节点取满,每一层的节点为2^(n-1)个,如果节点数小于该数那么就不是满二叉树。

>>求n层的满二叉树的节点总个数。等比数列求和:2^n-1

>>叶子节点的个数等于度为2的节点数+1?????

二叉树的图像

>完全二叉树

有向图和无向图.解决复杂路径,

路径的数字就是权重,如果路径无数字就是hu,整个就是网.

  • 程序设计方法

MVC是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式: [1] 

  • Model(模型)表示应用程序核心(比如数据库记录列表)。

  • View(视图)显示数据(数据库记录)。

  • Controller(控制器)处理输入(写入数据库记录)。

把大问题一步一步化小的过程就是自上而下的结构.

>面向过程和对象

面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。 
面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为

面向过程:看名字它是注重过程的。当解决一个问题的时候,面向过程会把事情拆分成: 一个个函数和数据(用于方法的参数) 。然后按照一定的顺序,执行完这些方法(每个方法看作一个个过程),等方法执行完了,事情就搞定了。

面向对象:看名字它是注重对象的。当解决一个问题的时候,面向对象会把事物抽象成对象的概念,就是说这个问题里面有哪些对象,然后给对象赋一些属性方法,然后让每个对象去执行自己的方法,问题得到解决。

面向对象有三大特性,分别是封装性继承性和多态性

1.封装,

比如(必须有这个学生),属性(,姓名,性别)类.等让计算机存储。

也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。封装是面向对象的特征之一,是对象和类概念的主要特性。 简单的说,一个类就是一个封装了数据以及操作这些数据的代码的逻辑实体。在一个对象内部,某些代码或某些数据可以是私有的,不能被外界访问。通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误的使用了对象的私有部分。

2.继承性

所谓继承是指可以让某个类型的对象获得另一个类型的对象的属性的方法。它支持按级分类的概念。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。 通过继承创建的新类称为“子类”或“派生类”,被继承的类称为“基类”、“父类”或“超类”。继承的过程,就是从一般到特殊的过程。要实现继承,可以通过“继承”(Inheritance)和“组合”(Composition)来实现。继承概念的实现方式有二类:实现继承与接口继承。实现继承是指直接使用基类的属性和方法而无需额外编码的能力;接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力;

3.多态性

所谓多态就是指一个类实例的相同方法在不同情形有不同表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接口。这意味着,虽然针对不同对象的具体操作不同,但通过一个公共的类,它们(那些操作)可以通过相同的方式予以调用。

定义阶段;开发阶段;维护阶段

 

写成的代码,混合的代码,形成exe可执行文件。

  • 驱动程序:设备管理器的驱动设置
  • Bios,(basic input output system )。

1,启动自检阶段;2,初始化启动阶段;(硬件通电)3,启动加载阶段 (告诉系统的位置,核心内容从硬盘加载到内存中)  (1-3是bios操作的)

4.内核装载阶段    ;5.登录阶段。

bios负责启动系统,所以一台电脑可以有多个系统

Windows  ,  Linus  ,Mac OS,   Unix(最早)

  • 批处理操作系统  内容点击
  • 分时操作系统   时间片?????点击
  • 实时操作系统         点击
  • 嵌入式操作系统     点击

#进程

写的代码就是程序,进程就是一次实体(程序)的执行过程,二者完全不同。

进程包括文本区域,数据区域,和堆栈。文本区域存储处理执行的代码;数据区域存储变量和进程执行期间所使用的动态分配的内存;堆栈区域存储着活动过程调用的指令好的本地变量。

进程的实质是程序在多道程序系统中的一次执行过程,进程是一个生命周期的过程,即动态产生,动态消亡

进程的动态性,并发性,独立性,异步性,结构性;点击

状态:三种基本状态

进程状态的转换

进程已经获得除处理器外的所需资源,等待分配处理器资源;只要分配了处理器后进程就可以执行。就说明进程在就绪状态

运行状态的进程占用处理器资源,处于此状态的进程数目小于等于处理器的数目。

阻塞状态是指由于进程等待某种条件,在条件满足之前无法满足之前无法继续执行。该条件满足前即使把处理机分配给该进程,也无法运行。

进程调度:点击

先来先调度,时间片为5分隔,共50;

时间片

          

时刻                                                0        5      10     15     20     25    30     35    40      45     50

进程到达时间执行时间开始时间结束时间周转时间
202002020
3015203535
4410354541
555455045

先来优先原则平均周转时间:(20+35+41+45)/4=35.2

短作业优先:

进程到达时间执行时间开始时间结束时间执行周期
2020304010
301503030
4410102010
555510

 

5

平均周转时间:(10+30+10+5)/4=13.75

有效的提高效率,提高作业的平均等待时间提高系统的吞吐量,但是对长时间的非常不利。

短时间优先不带竞争的:只要拿到所有权就执行

进程到达时间执行时间开始时间结束时间周转时间
2020305050
301501515
4410203026
555152015

平均周转时间:26.5

  • 调度的原理

SCBF算法和轮转算法

比如同时浏览网页,打开QQ,听音乐等,这些进程都要占用处理器资源。假设计算机只有两个CPU,要处理多个进程有不止两种方式FIFO算法是先来现行。FIFO算法服务质量不佳,平均周转时间长,容易引起作业用户不满,常作为一种辅助调度算法。SCBF算法,即最短CPU运行期优先调度算法,该算法就绪队列中选出“下一个CPU执行期,最短的进程,为之分配处理器。该算法就绪虽然可以获得较好的调度性能,但是难以准确的知道下一个CPU执行期,而只能根据每一个进程的执行历史来预测。前面几种算法主要用于批处理操作系统中,不能作为分时操作系统中的主调度算法,在分时调度系统中,都采用时间片轮转法。

事实上,计算机是执行浏览器进程0.01秒(可能不到),再处理QQ进程0.01秒,再是音乐播放器,然后又回到浏览器,但计算机处理的速度太快了,以致我们觉得多个进程是同时进行的。

存储器:存储器

寄存器
高速缓存
主存
磁盘缓存
磁盘
可移动存储介质

     CPU寄存器(读写速度最快)

    ——————————————————

    主存

————————————————————————

 

             磁盘

 

 

程序的装入

课件操作系统文件

操作系统——动态分配

单一连续分配

          单一连续分配是最简单的一种存储管理方式。采用这种管理方案时,内存被分成两个区域,一个是系统区域,仅供操作系统使用,另一个是用户区,它是除系统区外的全部内存区域,这部分区域是提供给用户使用的区域。当作业被调度时,就会获得全部空间,全部主存储空间都分配给一个作业。所以单一连续分配方式容易记住存储器的状态,不是全部空闲就是全部已分配。

作业运行完成后,全部主存空间又恢复成空闲。

固定分区分配

web

IP地址如192.168.1.53

计算具体的子网掩码,子网数,可用的主机数,最大可容纳主机数,网络地址。

每个IP地址的长度为32位,分为4段,每段8位,(1个字节),常用十进制表示,每段数字范围是1~254,段与段之间用小数点分割。每个字段也可以直接用十六进制或二进制表示。每个IP地址包括两个ID(标识码),即网络ID好的宿主机ID。同一个物理网络的所有主机都用同一个网络ID。表示为(a.b.c.d)的形式,其中啊a,b,c,d都是0~255之间的十进制整数。

例如:点分十进制(100.4.5.6),实际上就是32位二进制数(01100100.00000100.00000101.00000110)。IP地址分为A.B.C.D.E5类,它们适用的类型分别为大型网络,中型网络,小型网络,多目地址,备用。常用的是B和C两类。

A类10.0.0.0——10.255.255.255     B类 172.16.0.0——172.31.255.255        C类  192.168.0.0——192.168.255.255

类别

最大网络数

IP地址范围

单个网段最大主机数

私有IP地址范围

A

126(2^7-2)

0.0.0.0-127.255.255.255

16777214

10.0.0.0-10.255.255.255

B

16384(2^14)

128.0.0.0-191.255.255.255

65534

172.16.0.0-172.31.255.255

C

2097152(2^21)

192.0.0.0-223.255.255.255

254

192.168.0.0-192.168.255.255

IP地址用来给Internet的电脑上的一个编号,可以把每个人的电脑比作一台电话,那么电话号码就是IP地址,路由器就是程控式交换机。

IP地址与子网掩码进行位于运算&,就是当前网络的子网网段。

一个子网掩码是32位用来把IP地址分为网络地址和主机地址

不同的子网?访问?先判断是否是一个网段,知道另一个的子网地址,通过当前的子网掩码与(主机目标网址)进行位于运算,获取目标网络地址。

数据如何在硬件中传输:硬件层;不同主机之间进行传输,一个主机多个不同的进程或者应用程序也可以是运输层

  • 传输层

可靠传输:三次握手

第一次A给B 发信息,B确认后确认A的设备没问题,(收到回复就可以确认对方的设备没有问题)然后B 发给A

 

SYN 请求建立连接,seq表示这条信息的编号,ACK是回复的信息,ack是上一条信息的 回复,也就是上一条的seq+1;A发给B的第一条假设seq为x,B回复给A的ack是x+1;,seq是y;那么第二个A发给B的seq是x+1,ack是y+1;

UDP丢包?????

  • 应用层

访问百度的服务器

域名解析DNS解析:把网址转换成IP地址

DNS服务器:完成上述操作的。(把域名转换成IP地址)

 

本地的系统的一个文件夹会保存之前的IP地址,下次(比如打开百度)就不用重新找,直接在本地域名服务器打开,如果打开一个新的地址,会在本地域名服务器查找,如果找不到在

域名:

.com       .net      .cn

域名最好简单,不同的域名是因为不同的域名服务商;域名买的是.com  .net的前面的那个名字,也就是二级域名,而顶级域名是web服务商提供的。

  • 网页

每一个网页是一个文件,一个网站是多个文件。

输入一个网址就会连接相应的服务器,URL,NDS解析器会对你的网址进行查询,找到网页。协议+网址域名+文件

web浏览器     web服务器

html的语言和py不同,可以直接在浏览器使用,因为可以直接识别他的标签,可以直接看到效果。

一个网页的CSS是可以看到的。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值