数据结构与算法实战_1预备知识

程序 = 数据结构 + 算法

Donald E. Knuth(⾼德纳, 1974年图灵奖): • 《计算机程序设计的艺术》(The Art of Computer Programming) //他在不到30岁的时候提出了数据结构和算法这两个计算机专有名词

用什么语言?

选⼀门⾼级语⾔:
• 建议 C / C++ / Java / Python 任意⼀门 选择适合⾃⼰的开发环境:
• C / C++ :Code::Blocks / Xcode / Visual Studio Community / ……
• Java :Eclipse / IntelliJ IDEA Community / ……
• Python : PyCharm Community / ……

C语言

由 丹尼斯·⾥奇(Dennis M. Ritchie, 1941-2011)设计
• 1972年诞⽣
• 与UNIX关系密切
• 活跃⾄今
• 众多C-Like Language

C++ 语言

由 本贾尼·斯特劳斯特卢普(Bjarne Stroustrup)设计
• 1982-1983诞⽣
• 以C为基础
• ⾯向对象程序设计语⾔(Object Oriented Programming)
• 标准模板库(STL)

Java 语言

SUN公司1995年发布;现在属于甲⾻⽂(Oracle)公司
• 运⾏于虚拟机(JVM)
• ⾼可移植性
• ⾯向对象程序设计语⾔(Object Oriented Programming)
• 与编译型语⾔相⽐,效率……
java 把资源回收问题交给了虚拟机

Python 语言

吉多·范罗苏姆(Guido van Rossum)于1989年创造
• Python3 于2008年发布
• 解释型语⾔
• ⾯向对象程序设计语⾔
• ⽬前排⾏榜第⼀
• 简单易学、功能丰富

hello

c
并没有包含库在这是包含头文件,等于是把头文件拷贝到这个地方,来代替这一行。里面有声明等信息

#include<stdio.h>
int main(){
    printf("hello~");
    return 0;
}

c++
cout是个对象
在这里插入图片描述
java
在这里插入图片描述
python
在这里插入图片描述
在这里插入图片描述

变量
  • c语言参数传递通通是值传递
    c++比c增加了面向对象的部分
    在这里插入图片描述
    上图 Stu *pzs 的逻辑中心点是变量的名字pzs,pzs的左边是一个 * ,右边没东西,表示pzs是一个*(代表指针),再往左边找是Stu,代表*指向Stu对象。
    17行 &符号是个运算符
    16行 *符号不是运算符,代表一个指针

  • C++引用

int &r = a;

这句话定义了一个东西,同时进行初始化
这里=不是运算符,代表赋值
中心点:r
左边是一个&,并不是运算符取地址,这里代表引用型。
C++的引用型规定在创建时必须有它所引用的变量,而且终生不再变换。
在这里插入图片描述
打印出100
在这里可以把r当做a的外号,r就是a,a就是r
C++的引用不能换人

  • java语法上取消指针
    8种基本类型
    byte 1字节
    short 2字节
    int 4字节
    long 8字节
    float 4字节
    double 8字节
    char 2字节
    boolean 1字节
    其他都是引用类型

在这里插入图片描述
上图15行是个赋值语句
赋的是引用的值
在这里插入图片描述
打印出来 是类名(包括了包名)+ 地址
在这里插入图片描述
在这里插入图片描述
打印两个,发现是引用的同一个实例
在这里插入图片描述
java引用可以随便换人,下图14行创建的实例就会变成垃圾等待虚拟机回收。
在这里插入图片描述
java不管是传参返回值都是传值返回值(和C一样),不存在传引用。

  • python的变量通通是引用型的
    在这里插入图片描述
    创建一个变量是4,下一句话创建了一个对象是5
    a一开始引用4,后来引用5,地址不同
    打印结果:
    在这里插入图片描述
    代码:
    在这里插入图片描述
    4是一个地址,5是一个地址,python里每一个值都是一个对象。
    打印结果:
    在这里插入图片描述
    代码:
    在这里插入图片描述
    这里字符串是一个对象,这里把地址赋值给了a
    打印结果:
    在这里插入图片描述

模板和泛型

为什么需要模板和泛型

在这里插入图片描述

C++模板 template<>

在这里插入图片描述
重载<< (友元函数)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
再增加一个构造方法,并将属性改为private
在这里插入图片描述
此时直接构造即可
在这里插入图片描述
放入vector(向量,一个模板)
在这里插入图片描述

Java泛型

generic type 通用类型 常用容器类
自己定一个泛型
在这里插入图片描述

python

不需要模板和泛型

函数与递归

C语言中sizeof 不是函数

在这里插入图片描述
输出4

在这里插入图片描述
输出4
在这里插入图片描述
输出
在这里插入图片描述

  • 求数组中的最大值
    在这里插入图片描述
    array 右边是[] 代表是个数组,再看左边是int 代表是一个放整型元素的数组
    19行 数组名不代表一个数组,在括号里对数组名求值,求得数组地址(数组首元素的地址),传入函数。
    函数用指针承接地址,第5行括号里也可以写成array[],这也相当于一个指针,而不是一个数组。
Java方法

main是一个静态的,不能访问非静态的成员
在这里插入图片描述

Python函数

有return 就是有返回值的,没有return 就是返回void
在这里插入图片描述

返回值的作用
  • 返回我想要的值
  • 返回状态
    c语言中main函数最后一行是返回0,因为错误有很多种,成功只有一种
递归

自己调自己
实际上递归不会永远执行,因为函数调用需要占用内存,无穷递归会使内存不足而终止程序。
阶乘
在这里插入图片描述
hanoi
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值