数据结构part1——数组

二分法查找

35.搜索插入位置

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

请必须使用时间复杂度为 O(log n) 的算法。

示例 1:

输入: nums = [1,3,5,6], target = 5
输出: 2
示例 2:

输入: nums = [1,3,5,6], target = 2
输出: 1
示例 3:

输入: nums = [1,3,5,6], target = 7
输出: 4

class Solution:
    def searchInsert(self, nums: List[int], target: int) -> int:
        l,r=0,len(nums)-1
        while l<=r:
            mid=(l+r)>>1
            if nums[mid]>target:
                r=mid-1
            elif nums[mid]<target:
                l=mid+1
            else:
                return mid
        //分别处理如下四种情况
        // 目标值在数组所有元素之前 [0,0)
        // 目标值等于数组中某一个元素 return middle
        // 目标值插入数组中的位置 [left, right) ,return right 即可
        // 目标值在数组所有元素之后的情况 [left, right),return right 即可
        return r+1

思路:我们从数组的最左端和最右端开始遍历,每次取区间为[left,right]的中间值nums[mid],然后将mid位置的数字与目标数字比较,不断缩减区间[left,right]的大小,最后返回结果。
时间复杂度:O(logn)

704.二分查找

给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。

示例 1:

输入: nums = [-1,0,3,5,9,12], target = 9
输出: 4
解释: 9 出现在 nums 中并且下标为 4
示例 2:

输入: nums = [-1,0,3,5,9,12], target = 2
输出: -1
解释: 2 不存在 nums 中因此返回 -1

class Solution:
    def search(self, nums: List[int], target: int) -> int:
        if len(nums)==1:
            return 0 if nums[0]==target else -1
        l,r=0,len(nums)-1
        while l<=r:
            mid=(l+r)>>1
            if nums[mid]>target:
                r=mid-1
            elif nums[mid]<target:
                l=mid+1
            else:
                return mid
        return -1

这道题相对来说就是搜索插入位置的简化表,其实就是搜索数组中是否有我们需要找到的目标数字target,没有就返回-1,有就返回对应的索引index

移除元素

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。

不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。

元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

说明:

为什么返回数值是整数,但输出的答案是数组呢?

请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。

你可以想象内部操作如下:

// nums 是以“引用”方式传递的。也就是说,不对实参作任何拷贝
int len = removeElement(nums, val);

// 在函数里修改输入数组对于调用者是可见的。
// 根据你的函数返回的长度, 它会打印出数组中 该长度范围内 的所有元素。
for (int i = 0; i < len; i++) {
print(nums[i]);
}

示例 1:

输入:nums = [3,2,2,3], val = 3
输出:2, nums = [2,2]
解释:函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。例如,函数返回的新长度为 2 ,而 nums = [2,2,3,3] 或 nums = [2,2,0,0],也会被视作正确答案。
示例 2:

输入:nums = [0,1,2,2,3,0,4,2], val = 2
输出:5, nums = [0,1,4,0,3]
解释:函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。注意这五个元素可为任意顺序。你不需要考虑数组中超出新长度后面的元素。

提示:

0 <= nums.length <= 100
0 <= nums[i] <= 50
0 <= val <= 100

class Solution:
    def removeElement(self, nums: List[int], val: int) -> int:
        slow=0
        for fast in nums:
            if fast!=val:
                nums[slow]=fast
                slow+=1
        return slow

这道题我们可以用一个巧妙的双指针法来解决,我们使用fast’指针来遍历数组,slow指针用来指向数组中与val值相等的数字的位置,当fast指针遍历的数字不等于val值的时候,就将slow指针处的数字替换成fast指针处的值,相当于我们把数组中数字为val的数字覆盖了,遍历完数组时,slow指针指向的就是最后一个值不等于val的数字,我们直接返回即可。

比较含退格的字符串

给定 S 和 T 两个字符串,当它们分别被输入到空白的文本编辑器后,判断二者是否相等,并返回结果。 # 代表退格字符。

注意:如果对空文本输入退格字符,文本继续为空。

示例 1:

输入:S = “ab#c”, T = “ad#c”
输出:true
解释:S 和 T 都会变成 “ac”。
示例 2:

输入:S = “ab##”, T = “c#d#”
输出:true
解释:S 和 T 都会变成 “”。
示例 3:

输入:S = “a##c”, T = “#a#c”
输出:true
解释:S 和 T 都会变成 “c”。
示例 4:

输入:S = “a#c”, T = “b”
输出:false
解释:S 会变成 “c”,但 T 仍然是 “b”。

提示:

1 <= S.length <= 200
1 <= T.length <= 200
S 和 T 只含有小写字母以及字符 ‘#’。

class Solution:
    def backspaceCompare(self, s: str, t: str) -> bool:
        i,j=len(s)-1,len(t)-1
        count_s,count_t=0,0
        while i >= 0 or j >= 0:
            # s字符串的第一次遍历
            while i >= 0:
                if s[i] == "#":
                    count_s += 1
                    # 指针往前推一个
                    i -= 1
                elif count_s>0:
                    i -= 1
                    count_s -= 1
                else:
                    break

            # t同上
            while j >= 0:
                if t[j] == "#":
                    count_t += 1
                    # 指针往前推一个
                    j -= 1
                elif count_t>0:
                    # 代表有退格符#
                    j -= 1
                    count_t -= 1
                else:
                    break
            if i >= 0 and j >= 0:
                # 不相等返回False
                if s[i] != t[j]:
                    return False
            elif i>=0 or j>=0:
                return False
            # 相等就不管,看下一个字符
            j -= 1
            i -= 1
        return True

思路大概为:首先我们要从后往前遍历,因为退格符删除的是前面的字符,反序遍历才能确保我们遍历过的字符都是相等的,那么在我们遍历字符的时候又分为三种情况:
1.当遍历的字符是#,代表我们可以跳过一个字符,给我们的跳跃量count加1
2.当遍历的字符不是#,我们首先看count是否>0,大于0就当作跳过这个字符,不比较
3.当遍历的字符不是#而且count=0,此时退出循环,对另一个字符串也进行一次遍历,当另一个数组也退出循环后,比较两个字符串当前位置的字符是否相等。

有序数组的平方

给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。

示例 1:

输入:nums = [-4,-1,0,3,10]
输出:[0,1,9,16,100]
解释:平方后,数组变为 [16,1,0,9,100]
排序后,数组变为 [0,1,9,16,100]
示例 2:

输入:nums = [-7,-3,2,3,11]
输出:[4,9,9,49,121]

提示:

1 <= nums.length <= 104
-104 <= nums[i] <= 104
nums 已按 非递减顺序 排序

class Solution:
    def sortedSquares(self, nums: List[int]) -> List[int]:
        i,j=0,len(nums)-1
        n=len(nums)
        res=[0]*n
        while  i<=j:
            if nums[i]*nums[i]>=nums[j]*nums[j]:
                n-=1
                res[n]=nums[i]*nums[i]
                i+=1
            else:
                n-=1
                res[n]=nums[j]*nums[j]
                j-=1
        return res

这道题的思路其实很容易想到,就是对数组进行排序,不过排序的标准是平方值的大小,也就是说负数也可能比正数大,那么题目首先给出了一个升序数组,我们就初始化一个结果集数组存放结果,然后使用双指针法,从最左和最右端同时开始比较
1.当左边的平方值大于等于右边的平方时,应该将左边的平方加入res
2.否则将右端的平方加入res

长度最小的子数组

给定一个含有 n 个正整数的数组和一个正整数 target 。

找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。

示例 1:

输入:target = 7, nums = [2,3,1,2,4,3]
输出:2
解释:子数组 [4,3] 是该条件下的长度最小的子数组。
示例 2:

输入:target = 4, nums = [1,4,4]
输出:1
示例 3:

输入:target = 11, nums = [1,1,1,1,1,1,1,1]
输出:0

提示:

1 <= target <= 109
1 <= nums.length <= 105
1 <= nums[i] <= 105

进阶:

如果你已经实现 O(n) 时间复杂度的解法, 请尝试设计一个 O(n log(n)) 时间复杂度的解法。

class Solution:
    def minSubArrayLen(self, target: int, nums: List[int]) -> int:
        res=float('inf')
        sublength=0
        for i in range(len(nums)):
            sum1=0
            for j in range(i,len(nums)):
                sum1+=nums[j]
                if sum1>=target:
                    sublength=j-i+1
                    res=sublength if res>sublength else res
                    break
        return 0 if res==float('inf') else res

暴力法双重for循环——时间复杂度:O(n**2)

class Solution:
    def minSubArrayLen(self, target: int, nums: List[int]) -> int:
        res=float('inf')
        sublength=0
        sum1=0
        i=0
        for j in range(len(nums)):
            sum1+=nums[j]
            #注意我们这里的while相当于一个判定条件的意思,可以近似看作if
            while sum1>=target:
                sublength=j-i+1
                res=sublength if sublength<res else res
                sum1-=nums[i]
                i+=1
        return 0 if res==float('inf') else res
        //这里要判断res是否有发生变化
        //因为会出现一种情况就是整个数组的和都比target小,此时就应该返回0
     	//代表找不到和为target的子数组

滑动窗口法——时间复杂度O(n)
暴力法其实并不难,就是双重循环,找到目标和为target的子数组,然后更新最小长度即可,但是双重循环的时间复杂度较高,我们可不可以用一种更好的方法去解决呢?
其实就是用滑动窗口法
在这里插入图片描述
滑动窗口和双指针法非常类似,只需要遍历一次数组,**滑动窗口的精妙之处在于根据当前子序列和大小的情况,不断调节子序列的起始位置。从而将O(n^2)的暴力解法降为O(n)**那么具体的思路是如何呢?
我们还是用题目中的例子
我们设置i指针指向数组的开头,然后从头遍历数组,每次都累加遍历的数组值和target比较,那么这时候有两种情况:
1.累加和sum<target,继续遍历(相当于扩大窗口)
2.累加和sum>=target,这时候滑动窗口的精妙之处就体现出来了
1)我们首先要记录此时的窗口大小——j-i+1
2)然后将其与res比较,保存最小的值(题目找出最小长度数组在这一步完成)
3)然后我们要减去nums[i]的值,相当于把i向前滑动(滑动窗口的精妙之处
3.最后返回res即可(注意这里要判断res是否有发生过改变)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第Ⅰ部分 核心数据库概念 第1章 Oracle Database 10g体系结构 第2章 安装Oracle Database 10g和创建数据库 第3章 升级到Oracle Database 10g 第4章 规划Oracle应用程序——方法、风险和标准 第Ⅱ部分 SQL和SQL*Plus 第5章 SQL中的基本语法 第6章 基本的SQL*Plus报表及命令 第7章 文本信息的收集与修改 第8章 正则表达式搜索 第9章 数值处理 第10章 日期:过去、现在及日期的差 第11章 转换函数与变换函数 第12章 分组函数 第13章 当一个查询依赖于另一个查询时 第14章 一些复杂的技术 第15章 更改数据:插入﹑更新﹑合并和删除 第16章 DECODE和CASE SQL中的if-then-else 第17章 创建和管理表、视图、索引、群集和序列 第18章 Oracle基本安全 第Ⅲ部分 高级内容 第19章 高级安全性—— 虚拟专用数据库 第20章 使用表空间 第21章 用SQL*Loader加载数据 第22章 使用Data Pump导入和导出 第23章 访问远程数据 第24章 使用物化视图 第25章 使用Oracle Text进行文本搜索 第26章 使用外部表 第27章 使用回闪查询 第28章 回闪:表和数据库 第Ⅳ部分 Pl/SQL 第29章 PL/SQL简介 第30章 触发器 第31章 过程、函数与程序包 第32章 使用本地动态SQL和DBMS_SQL 第Ⅴ部分 对象关系数据库 第33章 实现类、对象视图和方法 第34章 收集器(嵌套表和可变数组) 第35章 使用大对象 第36章 面向对象的高级概念 第Ⅶ部分 Oracle中的Java 第37章 Java简介 第38章 JDBC程序设计 第39章 Java存储过程 第40章 Oracle真正应用群集 第41章 网格体系结构和管理 第Ⅷ部分 指南 第42章 Oracle数据字典指南 第43章 调整应用程序和SQL旅行者指南 第44章 调整中的案例分析 第45章 Oracle Application Server 10g的旅行者指南 第46章 数据库管理旅行者指南 第47章 XML旅行者指南
<br>中文名称:Delphi 7完美经典<br><br>http://www.huachu.com.cn/photo/2003/BB04672130c.jpg<br><br>出版社 : 中国铁道出版社 <br>作者  : 江义华/ <br>出版日期: 2003年7月 <br>综合评价: <br>国标编号:ISBN 7-113-05241-X/TP.931 <br>条形码 :9787113052416 <br>字数  :989千字   <br>印张  :41.75 <br>印数  :1-5000    <br>页数  :654 <br>开本  :787*1092 1/16 <br>版别版次:2003年7月第一版第一次印刷 <br>内容简介: <br>本书特色 <br>层次清晰、语言通俗、语法简练、以实用性为第一位。 <br>深入剖析了Object Pascal程序语言,包括指针、数据结构以及有关Override 和Overload函数的语法等。 <br>对面向对象的观点详述了Delphi VCL组件的属性、方法及事件,且在数据库设计方面辅以应用的范例。 <br>实例配有光盘,快速引导您踏入Delphi程序开发领域。 <br>适合想要深入了解Delphi程序设计的专业设计师,对一开始就想打好Delphi程序设计基础的初学者也非常适用。 <br><br>目录 : <br>第0章 认识Delphi <br><br>0-1 前言 <br>0-2 Delphi简介 <br>0-3 进入Delphi7 <br>0-4 退出Delphi <br><br>第1章 常用的窗口工具 <br><br>1-1 窗体(Form) <br>1-2 代码编辑器(Code Editor) <br>1-3 代码浏览器(Code Explorer) <br>1-4 组件面板(Componet Palette) <br>1-5 对象检视器(Object Inspector) <br>1-6 快捷工具栏(Speed Menu) <br>1-7 项目管理器(Project Manager) <br>1-8 桌面工具栏(Desktops Tollbar) <br>1-9 图像编辑器(Image Editor) <br>1-10 对象浏览器(Object TreeView) <br>1-11 关联选项卡(Digram Page) <br><br>第2章 常用的菜单 <br><br>2-1 File菜单 <br>2-2 Edit菜单 <br>2-3 Search菜单 <br>2-4 View菜单 <br>2-5 Project菜单 <br>2-6 Run菜单 <br>2-7 Tools菜单 <br>2-8 Windows菜单 <br><br>第3章 集成开发环境的改变 <br><br>3-1 Delphi集成开民环境介绍 <br>3-2 操作菜单方面的改进 <br>3-2-1 外面方面的改变 <br>3-2-2 内容方面的改变 <br>3-3 对象检视器方面的改进 <br>3-4 组件面板的改进 <br>3-5 代码编辑器的改进 <br>3-6 设计陈列室的改进 <br>3-7 编译信息的显示 <br>3-8 调试器方面的改进 <br>3-8-1 Watch List改进 <br>3-8-2 Debugger选项的改进 <br>3-8-3 Run Parameters对话框的改进 <br><br>第4章 Delphi Object Pascal的初步印象 <br><br>4-1 面向对象程序概论 <br>4-1-1 类 <br>4-1-2 对象 <br>4-1-3 继承 <br>4-1-4 封装 <br>4-1-5 信息 <br>4-2 Delphi项目结构及窗体的建立 <br>4-2-1 GUI模式的项目 <br>4-2-2 Console模式的项目 <br>4-3 Object Pascal程序结构 <br>4-3-1 项目程序(Program)的结构 <br>4-3-2 单元程序(Unit)的结构 <br>4-4 如何完成一个简单的窗体程序 <br><br>第5章 简单的常用指令介绍 <br><br>5-1 TLabel类对象 <br>5-1-1 Caption属性 <br>5-2 TButton类对象 <br>5-2-1 Caption属笥 <br>5-2-2 OnClick事件 <br>5-3 TEdit类对象 <br>5-4 TCanvas类对象 <br>5-5 Showmessage函数 <br>5-6 InputBox函数 <br>5-7 MessageDlg函灵敏 <br><br>第6章 Delphi与Object Pascal程序的基本概念 <br><br>6-1 Object Pascal Program程序结构与Delphi项目结构的关系 <br>6-1-1 标头(Heading) <br>6-1-2 Uses子句 <br>6-1-3 编译指令(Compiler directive) <br>6-1-4 源代码区(begin end) <br>6-2 Unit程序结构与窗体的关系 <br>6-2-1 Unit代码结构 <br>6-2-2 语句(Statement) <br>6-2-3 Unit间Use的状况 <br>6-3 数据类与定义变量 <br>6-3-1 数据类概论 <br>6-3-2 不需要使用type声明的数据类 <br>6-3-3 必须使用type声明的数据类 <br>6-3-4 定义变量 <br>6-3-5 变量的作用域 <br>6-3-6 定义常量 <br>6-3-7 变量的类转换(Typecast) <br>6-4 Object Pascal的运算符(Operator) <br>6-4-1 设置运算符(assign Operator) <br>6-4-2 算数运算符(Arithmetic Operator) <br>6-4-3 关系运算符(Relational Operator) <br>6-4-4 布尔运算符 <br>6-4-5 集合运算符 <br>6-4-6 字符串运算符 <br>6-4-7 位逻辑运算符 <br>6-4-8 运算符优先级 <br>6-5 流程控制 <br>6-5-1 语句的基本概念 <br>6-5-2 表达式语句(Expression-Statement) <br>6-5-3 流程控制语句 <br>6-5-4 可视化程序与嵌套程序 <br>6-6 数组与指针 <br>6-6-1 数组 <br>6-6-2 指针类 <br>6-6-3 浅谈指针与数据结构 <br>6-7 程序与函数(Procedures and Functions) <br>6-7-1 函数的意义与优点 <br>6-7-2 函数的分类与效用 <br>6-7-3 自定义函数使用方法概述 <br>6-7-4 函数的声明、定义及其实现 <br>6-7-5 参数传递方式 <br>6-7-6 声明修饰字 <br>6-7-7 常用的内建函数 <br><br>第7章 Object Pascal面向对象设计 <br><br>7-1 类和对象 <br>7-1-1 类(Class)与对象(Object)的基本概念 <br>7-1-2 对象的构造与类的关系 <br>7-2 类的声明与对象的定义 <br>7-2-1 类的声明与对象的实现 <br>7-2-2 对象的构造与析构 <br>7-3 类成员的封装等级与可见度 <br>7-3-1 封装的意义 <br>7-3-2 Object Pascal类成员的封装等级 <br>7-3-3 以实例说明类成员封装等级的可见度 <br>7-3-4 开头不加保留字的类成员 <br>7-3-5 成员封装等级的变更法则 <br>7-4 类成员的定义与实现 <br>7-4-1 字段(Field)与对象引用(Object Reference)的实现 <br>7-4-2 方法(Method) <br>7-4-3 属性(Property) <br>7-5 类的继承 <br>7-5-1 继承的意义与优点 <br>7-5-2 子类成员的存在方式 <br>7-6 成员函数的Override及 Overload <br>7-6-1 Override 适用的情况——Virtual与 Dynamic的成员函数 <br>7-6-2 Override成员函数的定义语法 <br>7-6-3 Virtual成员函数与动态绑定(Dynamic Binding) <br>7-6-4 覆盖(Overriding)与隐藏(Hiding)的差别 <br>7-6-5 Override与OVerload的差别 <br>7-7 Abstract成员函数与多态(Polymorphic) <br>7-7-1 一般纯虚函数的多态实现概念 <br>7-7-2 纯虚函数的定义语法及实现 <br>7-8 Self、AS、is、Sender、Parent、owner、inerited <br>7-8-1 Self变量 <br>7-8-2 AS运算符 <br>7-8-3 is运算符 <br>7-8-4 Sender <br>7-8-5 Parent <br>7-8-6 owner <br>7-8-7 inerited保留字 <br>7-9 静态成员方法——Class Methods <br><br>第8章 异常处理 <br><br>8-1 异常处理存在的目的 <br>8-2 Object Pascal异常的种类 <br>8-2-1 Delphi内建的异常类 <br>8-2-2 自定义异常类 <br>8-3 触发异常的方法 <br>8-3-1 由程序系统自动触发 <br>8-3-2 使用Raise指令触发 <br>8-4 处理异常情况 <br>8-4-1 try…finally…end语法说明 <br>8-4-2 ty…except…end语法说明 <br><br>第9章 Delphi用户接口设计详述 <br><br>9-1 基本概念 <br>9-2 TForm的属性 <br>9-2-1 由TComponent继承而来的属性 <br>9-2-2 由TControl继承而来的属性 <br>9-2-3 由TWinControl继承而来的属性 <br>9-2-4 由TScrollingWindControl继承而来的属性 <br>9-2-5 由TCustomForm继承而来的属性 <br>9-3 TForm的方法 <br>9-3-1 由TObject继承而来的属性 <br>9-3-2 由TPersistent继承而来的属性 <br>9-3-3 由TComponent继承而来的属性 <br>9-3-4 由TControl继承而来的属性 <br>9-3-5 由WinControl继承而来的属性 <br>9-3-6 由TScrollingWinControl继承而来的属性 <br>9-3-7 由TCustomForm继承而来的属性 <br>9-3-8 由TForm继承而来的属性 <br>9-4 TForm的事件 <br>9-4-1 由TControl继承而来的属性 <br>9-4-2 由TWinControl继承而来的属性 <br>9-4-3 由TCustomForm继承而来的属性 <br>9-5 TLabel的类成员 <br>9-5-1 TLabel的属性 <br>9-5-2 TLabel的方法 <br><br>第10章 标准组件介绍及实作范例 <br><br>10-1 Frames组件 <br>10-2 MainMenu组件 <br>10-3 PopuMenu组件 <br>10-4 Label组件 <br>10-5 Edit组件 <br>10-6 Memo组件 <br>10-7 Button组件 <br>10-8 CheckBox组件 <br>10-9 RadioButton组件 <br>10-10 ListBox组件 <br>10-11 ComboBox组件 <br>10-12 ScrollBar组件 <br>10-13 GroupBox组件 <br>10-14 RadioGroup组件 <br>10-15 Panel组件 <br>10-16 ActionList组件 <br><br>第11章 TApplication与TScreen类介绍及应用 <br><br>11-1 TApplication类 <br>11-1-1 TApplication类对象常用的属性 <br>11-1-2 TApplication类对象常用的方法 <br>11-2 TScreen类 <br><br>第12章 高级组件介绍 <br><br>12-1 Additional选项卡中的常用组件 <br>12-1-1 TBitBtn组件 <br>12-1-2 TMaskEdit组件 <br>12-1-3 TImage组件 <br>12-1-4 TShape组件 <br>12-2 Win32选项卡中的常用组件 <br>12-2-1 TPageControl组件 <br>12-2-2 TImageList组件 <br>12-2-3 TRichEdit组件 <br>12-2-4 TDateTimePicker组件 <br>12-2-5 TStatusBar组件 <br>12-3 System选项卡中的常用组件 <br>12-3-1 TTimer组件 <br>12-4 Dialogs选项卡中的常用组件 <br>12-4-1 TOpenDialog组件 <br>12-4-2 FTontDialog组件 <br>12-4-3 TColorDialog组件 <br><br>第13章 封装Delphi7开发的应用程序 <br><br>13-1 安装Borland的InstallShiled程序 <br>13-2 利用InstallShield封装 Delphi7开发的程序 <br>13-2-1 InstallShield环境界面简介 <br>13-2-2 封装一个简单的Delphi项目 <br><br>第14章 数据库概念及SQL指令介绍 <br><br>14-1 数据库基本概念 <br>14-1-1 数据库结构 <br>14-1-2 开放数据库连接协议(ODBC) <br>14-1-3 SQL Explorer <br>14-2 结构化查询语言SQL <br>14-2-1 CREATE语句 <br>14-2-2 ALTER TABLE语句 <br>14-2-3 DROP语句 <br>14-2-4 SELECT语句 <br>14-2-5 INSERT、UPDATE语句 <br>14-2-6 DELETE语句 <br>14-3 SQL指令高级使用 <br>14-3-1 UNION运算 <br>14-3-2 JOIN运算 <br>14-3-3 特殊运算符 <br>14-3-4 子查询(Sub Query) <br><br>第15章 Delphi数据库程序基础 <br><br>15-1 Delphi各种数据库连接设置 <br>15-1-1 建立dBase、Paradox连接 <br>15-1-2 建立Access连接 <br>15-1-3 建立MSSQL连接 <br>15-1-4 建立MySQL连接 <br>15-2 Delphi的Database Desktop使用方法 <br>15-2-1 字段定义 <br>15-2-2 输入数据 <br>15-2-3 设置BDE数据库别名与连接数据库 <br><br>第16章 Delphi数据库程序设计——使用BDE组件 <br><br>16-1 TDataSet组件 <br>16-1-1 TDataSet组件常用的属性 <br>16-1-2 TDataSet组件常用的方法 <br>16-1-3 TDataSet组件常用的事件 <br>16-2 TTable组件 <br>16-2-1 TTable组件常用的属性 <br>16-2-2 TTable组件常用的方法 <br>16-3 TQuery组件 <br>16-3-1 TQuery组件常用的属性 <br>16-3-2 TQuery组件常用的方法 <br>16-4 TDataModule组件 <br>16-5 TDatabase组件 <br>16-5-1 TDatabase组件常用的属性 <br>16-5-2 TDatabase组件常用的方法 <br>16-5-3 TDatabase组件常用的事件 <br>16-6 综合范例 <br>16-6-1 员工管理系统——使用TTable组件 <br>16-6-2 员工管理系统——使用TQuery组件 <br>16-6-3 订单管理系统——使用TTable组件 <br>16-6-4 订单系统——使用TQuery组件 <br><br>第17章 数据程序设计——使用Delphi组件 <br><br>17-1 TADOConnection组件 <br>17-1-1 TADOConnection组件常用的属性 <br>17-1-2 TADOConnection组件常用的方法 <br>17-1-3 TADOConnection组件常用的事件 <br>17-2 TADOCommand组件 <br>17-2-1 TADOCommand组件常用的属性 <br>17-2-2 TADOCommand组件常用的方法 <br>17-3 TADODataSet组件 <br>17-3-1 TADODataSet组件常用的属性 <br>17-3-2 TADODataSet组件常用的方法 <br>17-3-3 TADODataSet组件常用的事件 <br>17-4 TADOTable组件 <br>17-4-1 TADOTable组件常用的属性 <br>17-4-2 TADOTable组件常用的方法 <br>17-5 TADOQuery组件 <br>17-6 综合范例 <br>17-6-1 客户管理系统——使用TADODataSet组件 <br>17-6-2 客户管理系统——使用TADOTable组件 <br>17-6-3 客户管理系统——使用TADOQuery组件 <br>17-6-4 订单管理系统——使用TADOTable组件 <br>17-6-5 订单系统——使用TADOQuery组件 <br><br>第18章 数据感知组件 <br><br>18-1 TDBText组件 <br>18-2 TDBEdit组件 <br>18-3 TDBMemo组件 <br>18-4 TDBImage组件 <br>18-5 TDBListBox组件 <br>18-6 TDBComboBox组件 <br>18-7 TDBLookupListBox与TDBLookupComboBox组件 <br>18-8 TDBNavigator组件 <br>18-9 TDBGrid组件 <br><br>第19章 设计Delphi数据库报表 <br><br>19-1 设计报表的基本观念 <br>19-1-1 报表的组成 <br>19-1-2 报表的主体组件——TquickRep <br>19-1-3 建立第一个报表程序 <br>19-2 QuickReport中可打印出组件 <br>19-2-1 TQR系列组件介绍 <br>19-2-2 TQRDB系列组件介绍 <br>19-3 综合范例 <br>19-3-1 一般表达报表范例 <br>19-3-2 标签式报表范例 <br>19-3-3 主/明细报表范例 <br>19-3-4 一般表达式附图片报表范例 <br>19-3-5 分组式报表范例——打印多色报表 <br>19-3-6 报表输出及输出范例 <br><br>附录 Kylix程序安装及转换 <br><br>http://lib.verycd.com/2005/02/07/0000038314.html

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值