《算法设计与分析》第1章 算法基础 第1章 算法基础前言例题1.1算法1.算法的定义2.算法的性质和设计原则3.算法的表示4.算法举例5.程序6.冒泡排序1.2算法分析1.3算法的运行时间1.算法渐近复杂度2.渐近表示3.算法分析中常见的复杂性函数4.算法分类前言算法是计算机科学的基石算法:计算的灵魂程序=算法+数据结构学习算法可以提高分析问题的能力例题1.1算法1.算法的定义算法指问题求解的方法及求解过程的描述,是一个精心设计的计算序列,用以解决一类特定的问题。2.算法的性质和设计原则1)有穷性:一个算
Linux学习笔记(一) Linux简介Linux的特点Linux发展Linux的内核版本Linux发行版本Linux目录Linux的特点(1)Linux的特点1.真正的多用户多任务操作系统2.良好的兼容性,开发功能强3.可移植性强4.高度的稳定性5.丰富的图形用户界面(2)Linux和Windows的区别1.多任务2.GUI(图形用户界面)3.共享资源相互访问4.配置文件5.域Linux发展①Linux系统的发展②Linux发展的五大要素:1.UNIX 操作系统2.MINIX 操作系统3.G
SQL Server数据库基本操作(一) SQL Server数据库基本操作基本表的定义、删除与修改1.创建基本表2.修改基本表3.删除基本表基本表的定义、删除与修改创建数据库CREATE DATABASE STUDENT1.创建基本表基本语法:CREATE TABLE <表名>( <列名> <数据类型>[ <列级完整性约束条件> ] [,<列名> <数据类型>[ <列级完整性约束条件>] ] ... [,<表级完整性约束条件>
Java包装类 包装类包装类装箱与拆箱拆箱基本类型与字符串类型之间的相互转换包装类基本数据类型,使用起来非常方便,但是没有对应的方法来操作这些基本类型的数据可以使用一个类,把基本类型的数据装起来,在类中定义一些方法,这个类叫做包装类我们可以使用类中的方法来操作这些基本类型的数据。装箱与拆箱装箱:把基本类型的数据,包装到包装类中(基本类型的数据->包装类)构造方法:Integer(int value)构造一个新分配的Integer对象,表示指定的int值。Integer(String s)构造一个新
Java迭代器Iterator接口 迭代器Iterator接口迭代器的代码实现Iterator接口java.util.Iterator接口:(对集合进行遍历)有两个常用方法1.boolean hasNext()如果仍有元素可以迭代,则返回true;判断集合中还有没有下一个元素,有就返回true,没有就返回false2.E next() 返回迭代的下一个元素。取出集合中的下一个元素。Iterator迭代器,是一个接口,我们无法直接使用,需要使用Iterator接口的实现类对象,获取实现类的方式比较特殊Collection接口中有一
《数据结构》知识点Day_05 图的遍历深度优先搜索DFS广度优先搜索BFS深度优先搜索DFS图的深度优先遍历(Depth First Search)和树的先序遍历有一定相似之处。基本思想:假设初始状态是图中所有顶点均未被访问,则从某个顶点出发,首先访问该顶点,然后依次从它的各个未被访问的邻接点出发深度优先搜索遍历图,直至图中所有和 v 有路径相通的顶点都被访问到。若此时尚有其他顶点未被访问到,则另选一个未被访问的顶点作起始点,重复上述过程,直至图中所有顶点都被访问到为止。显然,深度优先搜索是一个递归地过程。广度优先搜索B
《数据结构》知识点Day_05 图图是由一些点vertex和这些点之间的连线边edge组成,通常记作:G = (V, E)。根据图是否有方向,可以将图划分为:无向图和有向图。无向图:无向图的边都是不区分方向的。有向图:不同于无向图,它的所有的边都是有方向的。邻接点和边一条边上的两个顶点叫做邻接点。出边:指的是以该顶点为起点的边。入边:指的是以该顶点为终点的边。在无向图中,某个顶点的度是邻接到该顶点的边或数目。在有向图中,度还有出度和入度之分。度入度:指的是以该顶点为终点的变的数目。出度:指的是以该顶点为起点的边的
《数据结构》知识点Day_04 树和二叉树树:是N(N≥0)个结点的有限集合,N=0时,称为空树,这是一种特殊情况。树的定义是递归的,是一种递归的数据结构。树作为一种逻辑结构,同时也是一种分层结构,具有以下两个特点:树的根结点没有前驱结点,除根结点之外的所有结点有且仅有一个前驱结点。树中所有结点可以有零个或者多个后继结点。先(前)序遍历: 对访问到的每个结点,先访问根结点,然后是左结点,然后是右结点。中序遍历: 对访问到的每个结点,先访问左结点,然后是根结点,然后是右结点。后序遍历: 对访问到的每个结点,先
《数据结构》知识点Day_03 栈和队列栈队列栈栈(stack)是一种后进先出 (last infirst out)的线性表. 只能在表的一端(栈顶)进行插入和删除运算的线性表。栈(Stack):只允许在一端进行插入或删除操作的线性表。栈顶(Top): 线性表允许进行插入和删除的那一端栈底(Bottom): 固定的,不允许进行插入和删除操作的另一端。空栈:不含任何元素的空表。队列队列是一种先进先出(FIFO)的线性表. 在表一端插入,在另一端删除。循环队列的相关条件和公式:1.队空条件:rearfront2.队
《数据结构》知识点Day_02 线性表1.线性表的定义:存在唯一一个"第一个"元素存在唯一一个“最后一个”元素除第一个元素外,每一个元素都有且只有一个前驱除最后一个元素外,每个元素都有且只有一个后继2.优点:存储密度大(结点本身所占存储量/结点结构所占存储量)可以随机存取表中任一元素3.缺点:在插入、删除某一元素时,需要移动大量元素浪费存储空间属于静态存储形式,数据元素的个数不能自由扩充单链表链式存储结构(链表)1.链表的基本概念各结点由两个域组成:数据域:存储元素数值数据指针域:存储直接后
Java Swing Button控件点击事件的几种写法 1.使用匿名内部类第一种写法 ActionListener listener = new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { showTime(); } }; button.addActionListener(listener);第二种写法更为简单 button.addActionListener(new ActionListener() { @Overri
数据结构-循环队列(C语言代码) 循环队列就是将队列存储空间的最后一个位置绕到第一个位置,形成逻辑上的环状空间,供队列循环使用。在循环队列结构中,当存储空间的最后一个位置已被使用而再要进入队运算时,只需要存储空间的第一个位置空闲,便可将元素加入到第一个位置,即将存储空间的第一个位置作为队尾。循环队列可以更简单防止伪溢出的发生,但队列大小是固定的。在循环队列中,当队列为空时,有front=rear,而当所有队列空间全占满时,也有front=rear。为了区别这两种情况,规定循环队列最多只能有MaxSize-1个队列元素,当循环队列中只剩.
数据结构-队(C语言代码) 只允许在一端进行插入,在另一端进行删除的操作的线性表,又称为先进先出(First In First Out)线性表,简称FIFO队头:允许进行删除操作的一端队尾:允许进行插入操作的一端空队:不含任何数据元素的队#include <stdio.h>#include <stdlib.h>//定义队列typedef struct Node { int data; struct Node* next;}Node;//初始化队列Node* initQuee.
数据结构-栈(C语言代码) 栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。#include <stdio.h>#include <stdlib.h>typedef struct Node { int data; struct.
数据结构-双链表和双循环链表(C语言代码) 双链表和双循环链表单链表双循环链表单链表单向链表特点: 1.可以轻松的到达下一个节点, 但是回到前一个节点是很难的. 2.只能从头遍历到尾或者从尾遍历到头(一般从头到尾)双向链表特点 1.每次在插入或删除某个节点时, 需要处理四个节点的引用, 而不是两个. 实现起来要困难一些 2.相对于单向链表, 必然占用内存空间更大一些. 3.既可以从头遍历到尾, 又可以从尾遍历到头双向链表的定义: 双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接
数据结构-单循环链表(C语言代码) 数据结构纯属新手,小白一枚,欢迎批评指正!下面这个图是接下来要实现的单循环链表!直接上代码OVO!定义结构体typedef struct Node { int data; //数据域 struct Node* next; //指针域}Node;单循环链表跟单链表类似只有数据域和指向下一个结点的指针域,不过尾结点的指针域指向第一个结点。创建链表//创建单循环链表Node* initList() { Node* L = (Node*)malloc(sizeof(Node))