郝斌老师__数据结构
郝斌数据结构自学笔记知识点+程序源代码
5_预备知识_指针_2
指针的重要性:
指针是C语言的灵魂
定义:
地址:
地址是内存单元的编号,从0开始的非负整数,范围:0-FFFFFFFF【0-4G-1】
CPU=====地址线,控制线,数据线=====内存
指针:
指针就是地址,地址就是指针。
指针变量是存放内存单元地址的变量。
指针的本质是一个操作受限的非负整数。
structStudent*pst=&st;
doublearr[3]={1.1,2.2,3.3};
double *q;
q=&arr[0];
printf(“%p\n”,q);//%p实际就是以十六进制输出
q=&arr[1];
q=printf(“%p\n”,q);//p,q相差8
无论指针指向的变量占多少个字节,指针变量统一都只占4个字节
7_如何通过函数修改实参的值
for (i=0;i<lem;i++)
printf(“%d\n”,p[i]);
}
指针变量的运算
指针变量不能相加,不能相乘,不能相除。
如果两指针变量属于同一数组,则可以相减。
指针变量可以加减一整数,前提是最终结果不能超过指针变量
p+i的值是p+i*(p所指向的变量所占的字节数)
p-i的值是p-i*(p所指向的变量所占的字节数)
//p=10;//error
ﻩj=*p;//等价于j=i;
ﻩprintf("i=%d,j=%d,*p=%d\n",i,j,*p);
ﻩreturn 0;
}
CASE2
#include<stdio.h>
郝斌C语言详细笔记(附源码)
郝斌老师的C语言:课堂讲解全程动手敲代码,讲解细致,对于重要知识点的讲解不厌其烦,是一个难得的C语言入门教程。
在这里对老师的辛勤付出表示感谢。
郝斌c语言视频教程·概述:课程计划为什么学习c语言:Fortran语言主要用于科学计算,在第三代语言中,以1980年为分水岭,分为结构化和面向对象语言。
Basic语言是vb的前生,pascal语言一般是用于教学。
C语言是最重要的,其他的语言一般很少用了。
结构化的代表语言是c语言。
结构化语言的数据和操作是分离的,导致在写大项目的时候,会出现各种各样莫名其妙的问题。
在面向对象的语言中c++是最复杂的语言。
由于c++语言太复杂,sun公司对c++进行了改装,产生了java语言。
而c#是由微软开发的,和java相似,几乎一模一样。
在高级语言的执行速度上,c是最快的,c++其次,而java 和c#是最后的。
Java和c#流行,主要的一个原因是可以跨平台。
C语言的发展和过程:C语言的特点:·优点:代码量小,速度快,功能强大。
·缺点:危险性高,开发周期长,可移植性弱。
危险性高:写同一个程序,在java中会报错,而在c中不会报错,为什么呢,因为c认为程序你想怎么写就怎么写,c语言认为你写的程序不是很离谱,他都认为你写的这个程序有特殊的含义。
可以直接通过,而java 则不可以。
开发周期长:c语言是面向过程的语言,面向过程的语言的特点就是在开发大项目的时候,很容易崩溃,好比盖大楼,C语言还要造大量的砖块、钢筋等结构原材料,而C++ C# JAVA则进行了一定的继承封装等操作,相当于原材料直接给你,你只需要用它盖楼即可。
现在市场上的语言分三块C/c++:单纯的学习c是什么都做不了的。
JavaC#可移植性不强:这是针对java来说的,因为java的可移植性太强了,所以就感觉说c的可移植性不强。
金山公司最主要是靠wps办公软件来发展的。
Wps是c 语言开发的,其安装包比Office少了10多倍。
数据结构与算法入门C语言(一)概述
数据结构与算法⼊门C语⾔(⼀)概述数据结构与算法⼊门C语⾔笔记来源于郝斌⽼师数据结构与算法视频,博主学习后纯⼿打,侵删。
数据结构概述⼀、数据结构定义如何把现实中⼤量⽽复杂的问题以特定的数据类型和特定的存储结构保存到主存储器(内存)中,以及在此基础上为实现某个功能(⽐如查找、删除某个元素,对所有元素排序)⽽执⾏的相应操作,这个操作也叫算法。
特定的数据类型: 个体元素特定的存储结构:个体和个体之间的关系数据结构=个体+个体的关系算法=对存储数据的操作⼆、算法定义算法:解题的⽅法和步骤三、衡量算法的标准1.时间复杂度⼤概程序执⾏的次数,⽽⾮执⾏时间。
2.空间复杂度算法执⾏过程中⼤概所占⽤的最⼤内存。
3.难易程度4.健壮性四、数据结构的地位数据结构是软件⼼中最核⼼的课程程序=数据结构+数据的操作+可以被计算机执⾏的语⾔1.什么是堆?什么是栈?很多⼈以为是内存⾥的2块⼉空间,⼀块⼉叫堆,⼀块叫栈,其实不对。
实际上是指内存分配的⽅法不同的2种⽅式。
如果是压栈出栈的⽅式分配和释放的内存就叫栈内存。
如果是以堆排序分配的内存就叫堆内存。
**注意:数据结构⾥是没有堆这个概念的,堆是什么?是分配内存的⼀种⽅式,⽽不是存储数据的⼀种结构。
2.函数调⽤,如何调⽤呢?压栈和出栈。
按时间存储的东西得有个顺序吧,按顺序存储的结构就是队列。
编译原理得学树。
数据库就是数据结构得简化版,讨论得问题差不多,解决得问题更狭窄了程序=数据的存储+数据的操作+可被计算机执⾏的语⾔。
数据结构很重要,难度⼤,学完很难做出东西来,学它是练内功。
五、预备知识1.指针指针的重要性指针是C语⾔的灵魂定义地址内存单元的编号从0开始的⾮负整数范围:0-FFFFFFFF【0~4G-1】指针指针就是地址,地址就是指针。
指针的本质是⼀个操作受限的⾮负整数指针变量指针变量是存放内存单元地址(编号)的变量指针的分类1.基本类型的指针#include <stdio.h>int main(void){int *p; //p是个变量名字,int * 表⽰该P变量只能存储int类型变量的地址int i = 10;int j;//(1) 此时p还没有被赋值,⾥⾯是个垃圾值,这个垃圾值很可能正好是某个变量的地址//所以应该在使⽤ *p 之前给p赋值地址:p = &i;j = *p;//(2) 给垃圾值地址的变量赋值⼀个新值,垃圾值应不受你控制的,随意改内存很危险。
郝斌老师自学视频教程下载(c语言,JAVA, sql2005数据库,数据结构)
郝斌老师自学视频教程下载(c语言,JA V A, sql2005数据库,数据结构)郝斌老师C语言1-10.rar (55.18 MB)郝斌老师C语言11-20.rar (74.16 MB)郝斌老师C语言21-30.rar (74.06 MB)郝斌老师C语言31-39.rar (54.99 MB)郝斌老师C语言40-49.rar (55.41 MB)郝斌老师C语言50-60.rar (462.46 MB)郝斌老师C语言61-70.rar (77.08 MB)郝斌老师C语言71-80.rar (119.06 MB)郝斌老师C语言81-89.rar.rar (73.89 MB)郝斌老师C语言90-100.rar (79.27 MB)郝斌老师C语言101-120.rar (510.8 MB)郝斌老师C语言121-130.rar (199.7 MB)郝斌老师C语言131-150.rar (222.73 MB)郝斌老师C语言151-180.rar (966.1 MB)缺少的课.zip (59.9 MB)C视频源代码.rar (4.98 MB)C大纲.pdf (5.33 MB)该教程视频录制工具(使用前请先运行内置绿化工具).rar (28.31 MB)1_Java概述_1.rar (23.51 MB)2_Java概述_2.rar (7.5 MB)3_Java概述_3.rar (20.59 MB)4_Java的卸载.rar (3.04 MB)5_Java的安装.rar (5.97 MB)6_环境变量的设置.rar (25.53 MB)7_常见dos命令.文件名和类名不同时编译运行的问题.rar (11.92 MB)8_变量命名规则.数据类型.运算符.格式化输出.流程控制.rar (41.38 MB) 9_复习上节课.rar (9.31 MB)10_类和对象.rar (7.28 MB)11_内存分配.rar (22.49 MB)12_访问控制符_1.rar (11.84 MB)13_访问控制符_2.rar (9.5 MB)14_构造函数.rar (23.2 MB)15_UltraEdit的使用.rar (6.85 MB)16_复习.rar (4.5 MB)17_函数的重载.rar (6.88 MB)18_构造函数.rar (8.33 MB)19_this.rar (10.91 MB)20_static.rar (23.06 MB)21_复习.rar (6.56 MB)22_static两示例_求个数_只生成一个对象__1.rar (11.18 MB)23_static两示例_求个数_只生成一个对象__2.rar (11.88 MB)24_继承的由来.和.继承的访问控制权限_1.rar (7 MB)25_继承的由来.和.继承的访问控制权限_2.rar (10.32 MB)26_面向对象的继承反映的是现实中的一般到特殊的关系.rar (2.12 MB) 27_Java为什么没有多继承.rar (6.25 MB)28_复习.super_1.rar (16.38 MB)29_复习.super_2.rar (16.85 MB)30_重写父类方法_1.rar (15.52 MB)31_重写方法示例.rar (14.87 MB)32_多态的语法知识.rar (10.5 MB)33_复习.rar (8.59 MB)34_多态注意事项和.实际应用示例.rar (29.59 MB)35_抽象类.和.final.rar (36.83 MB)36_接口_1.rar (23.89 MB)37_接口_2.rar (18.73 MB)38_面向对象复习.rar (8.4 MB)39_编译运行含有包层的类_1.rar (14.59 MB)40_编译运行含有包层的类_2.rar (12.32 MB)41_同包和不同包类的相互访问.rar (20.18 MB)42_复习.和.不同包之间的相互访问_1.rar (14.66 MB)43_复习.和.不同包之间的相互访问_2.rar (25.81 MB)44_jar包的生成.avi.rar (22.32 MB)45_如何使用Jar包.和.包的总回顾.rar (18.09 MB)46_异常概述_1.rar (27.22 MB)47_异常概述_2.rar (24.18 MB)48_复习.rar (15.68 MB)49_为什么需要异常.rar (16.92 MB)50_printStackTrace方法的介绍.rar (8.83 MB)51_可处理可不处理的异常.和.必须得进行处理的异常.rar (13.87 MB) 52_处理异常的两种方式.rar (5.42 MB)53_finally.rar (10.41 MB)54_自定义异常.和.throws常见错误解析_1.rar (13.96 MB)55_自定义异常.和.throws常见错误解析_2.rar (14.34 MB)56_异常复习.rar (82.65 MB)57_异常.rar (88.81 MB)58_ToString()方法介绍_1.rar (77.48 MB)59_ToString()方法介绍_2.rar (8.55 MB)60_equals_1.rar (66.04 MB)61_equals_2.rar (77.03 MB)62_复习.rar (48.8 MB)63_String类的.equals==常量字符串的用法.rar (100.19 MB)64_String类的常用方法介绍.字符串和整数的相互转化.rar (105.64 MB) 65_String常用方法举例.rar (107.2 MB)66_printf和println的区别.rar (90.1 MB)67_复习.rar (3.62 MB)68_StringBuffer.rar (10.76 MB)69_数组.rar (20.96 MB)70_线程_1.rar (29.52 MB)71_复习.rar (4.85 MB)72_创建线程的第二种方式.rar (6.62 MB)73_线程常用方法的介绍.rar (5.37 MB)74_线程的控制.rar (33.35 MB)75_线程同步问题的产生原因.rar (12.48 MB)76_复习.rar (56.6 MB)77_买票程序讲解.rar (247.39 MB)78_闲聊.rar (34.71 MB)79_复习.rar (6.68 MB)80_生产消费_1.rar (38 MB)81_生产消费_2.rar (35.09 MB)82_awt展望.rar (7.1 MB)83_gui.rar (47.02 MB)84_布局管理器.rar (30.76 MB)85_事件处理.rar (34.74 MB)86_复习.rar (16.29 MB)87_十个按钮的设计.rar (53.34 MB)88_三个文本框的相加运算示例.rar (253.89 MB)89_复习.内部类.匿名类.rar (26.53 MB)90_计算器.可运行jar包的生成.rar (6.1 MB)91_什么叫流.流的分类.四大基本抽象流.rar (39.71 MB)92_复习.rar (13.79 MB)93_字节流.字符流的使用和它们的区别.rar (45.65 MB)94_缓冲流的使用.rar (49.57 MB)95_将一个长整型数据写入字节数组然后再从字节数组读出来.示例的讲解.rar (37.25 MB)96_print流.Object流.rar (43.78 MB)97_什么是容器.容器的分类.Collection的介绍.List.Set的区别.重写toString方法的必要性.Collections的使用.rar (46.06 MB)98_Comparable.接口.Set接口.rar (39.28 MB)99_.复习.rar (18.25 MB)100_equals和hashCode方法的使用(难点).rar (43.14 MB)101_Iterator接口.rar (9.71 MB)102_Map接口的使用.rar (35.11 MB)103_泛型.rar (16.1 MB)104_网络编程基础知识.UDP编程.rar (32.15 MB)105_TCP编程.和.TCP下的WEB服务器程序的讲解.rar (46.7 MB)106_JavaSE复习大纲.rar (58.21 MB)107_JavaSE复习大纲.rar (39.04 MB)源代码&PPT.rar (73.96 MB)郝斌数据结构自学视频_[1-60].rar (587.35 MB)郝斌数据结构自学视频【61-78】_视频完.rar (196.24 MB)[数据结构(C语言版)].严蔚敏_吴伟民.扫描版.pdf (28.95 MB)郝斌SqlServer_2005自学视频_全集.rar (823.53 MB)郝斌SqlServer2005自学视频的源代和大纲.rar (14.54 MB)1_我为什么要出视频.swf (2.99 MB)2_我对自学的一些看法.swf (7.04 MB)。
郝斌老师c语言笔记
互换两个数子:
#include <stdio.h>
#include <stdlib.h>
void huhuan(int a,int b)
{
int t;
t = a;
b = t;
return ;
}
int main()
{
int a = 3;
int b = 5;
huhuan (a,b);
printf ("a = %d,b = %d\n",a,b);
Register寄存器return返回short短的signed有符号的sizeof运算符static静止的struct结构体switch开关typedef定义类型
Unsigned无符号整数union联合void空的;无效的volatile不稳定的易失的易变的while当directive指示符fatal致命的precompiled预编译;先行编译
huhuan (&a,&b);
printf ("a = %d,b = %d\n",a,b);
return 0;
}
void huhuan(int * a,int * b)
{
int * t;//如果要互换,t必须定义成int*类型。
t = p;
p = q;
q = t;
}//这个程序依然不是正确的,因为只是改变了p和q的内容对实参依然没有实际的作用效果。
int main(void)
{
int a[2][3] = {{12,34,45},{423,2342,24}};
int i,j;
for (i = 0;i<2;++i)
郝斌自学C语言
2011/6/23
w
页码,3/6(W)
《2011年LAMP兄弟连新版原创视频教程:细说 PHP》更新至第106课[压缩包]
《Android开发视频教学》 /Android开发视频教程--更 新腾讯微博项目课程第三集[MP4]
《尚学堂科技.马士兵.JAVA.系列视频教程10年2 月9日更新(更新Spring3.0)》(java video 目录: 180_C期末考试测试题讲解 下 179_NULL的含义 178_C期末考试测试题讲解上 177_文件 宏 typedef 漫谈 176_位运算符 175_广义的算法 174_狭义的算法 173_链表 下 172_链表 中 171_链表 上 170_补码下 170_补码 下 169_复习上节课补码知识 168_补码 上 167_进制转化 166_枚举下 166_枚举 下 165_枚举 上 164_结构体11_综合应用_学生管理系统(存储,排序,输出) 163_冒泡排序 162_结构体10_结构体变量的运算 161指针优点大总结【重点】 160_结构体9_应该发送内容还是应该发送地址【重点】 159_结构体8_通过函数完成对结构体变量的输入和输出 158_结构体7_复习上节课知识 157_考前知识点概述 156_结构体6_布置作业 155_结构体5_如何取出结构体变量中的每一个成员【重点】 154_结构体4_结构体的赋值和初始化 153_结构体3_怎样使用结构体变量概述 152_结构体2_如何定义结构体[3种方式] 151_结构体1_为什么需要结构体 什么叫结构体【重点】 150_指针_30_跨函数使用内存习题测试【重点】 149_指针_29_动态内存可以跨函数使用详解【重点】用 148_指针_28_静态变量不能跨函数使用详解【重点】 147_指针_27_闲聊 146_指针_26_复习上节课知识 145_指针_25_多级指针 144_指针_24_动态内存和静态内存的比较【重点】 143_指针_23_动态内存分配举例_动态一维数组的构造 142_指针_22_malloc函数的用法2 141_指针_21_malloc函数使用的简单介绍 140_指针20_为什么需要动态分配内存【重点】 139_指针19_传统数组的缺点【重点】 138_指针18_动态内存分配概述 137_指针17_何谓变量的地址 一个指针变量到底占几个字节【难点】 136_指针16_指针变量的运算 135_指针15_复习上节课知识 134_指针14_确定一个一维数组需要2个参数及其原因_下 134_指针14_确定一个一维数组需要2个参数及其原因_上 133_指针13_一维数组名的含义 《传智播客.Net培训.net视频教程》(.net视频 培训传智播客视频教程开放课程 c#视频移动开发winform SQL HTML JavaScript Dom JQuery ajaxnet公开课)更新 “高级”31-34[压缩包] 《郝斌C语言自学教程》郝斌老师C语言自学专 讲180集完整版[压缩包] 《3G手机开发之Android应用开发》共8天课程/ 更新完毕[压缩包] 《北京圣思园JAVA培训教学视频汇总》Java SE&JSP&Servlet&JavaScript&Ajax&jQuery&OOA 与UML&CVS&XML&Unit Test&Struts 2.2&Ant&Hibernate[压缩包] 《后盾网PHP原创视频教程》更新至107课 [WMV] courses)
郝斌-数据结构笔记
郝斌——数据结构数据结构概述(1)定义:我们如何把现实中大量而复杂的问题已特定的数据类型和特定的存储结构保存到主存储器(内存)中,以及在此基础上位实现某个功能二执行的相应操作,这个相应的操作也叫算法。
解释:数据结构要解决的问题就是把现实中大量复杂的问题存储到内存中,把单个数据的类型确定,再把数据之间关系确定,这样就可以存储到内存中去了,算法就是对数据结构的操作。
比如数组是一个数据结构,单个数据类型就确定,数据之间关系就是连续存储,操作数组就是一个算法。
侠义的算法是依附于某个数据结构上,也就是说同样对数组遍历和对链表遍历,算法肯定不一样。
数据结构解决存储问题,算法解决数据间的关系。
数据结构=个体+个体的关系算法=对存储数据的操作。
狭义的算法算法:解题的方法和步骤(2)衡量算法的标准:1时间复杂度大概程序要执行的次数,而非执行的时间:运行步骤最多的最关最核心的要运行的次数可以大概代表2空间复杂度:算法执行过程中大概所占有的最大内存。
3 难易程度4健壮性前两个最重要(一般算法有循环)(3)第三个内容:数据结构的地位(数据结构是软件中最核心的课程)数据库和数据结构的区别:数据库是数据结构的简化版程序:数据的存储+数据段操作+可以被计算机之行的语言(4)预备知识:伪算法不是真正的算法通过语言来实现伪算法,希望编程语言实现要通过指针。
链表的知识很重要,以后都会用到。
C++的指针不够,学C语言的用途是为了以后能看懂更高级的语言*p就代表一个变量,例如i 。
int*p表示定义一个存放整形变量的地址的指针变量。
程序运行完,内存就终止了。
复习:1:指针:int *p//p 是个变量名字,用来存放地址,只能存储int型变量的地址指针的重要性:是C语言的灵魂,定义地址线cpu 内存0控制线 1。
数据线地址内存单元的编号(cpu只能访问内存,不能访问硬盘)从0开始的非负整数,范围为0——4g-1指针就是地址,地址就是指针指针变量是存放内存单元地址的变量指针和指针变量不一样指正的本质是一个操作受限的非负整数分类:Int *p;Int *j;Int i=10;P=&I;//(1).把i的地址赋给i,*p就指向了I (2).p和i没有任何的关系(3)*p就是iP=10//errorI=*j//error1 基本类型的指针(p=&i表示指针变量存储i的地址,但是p为p,i为i 两者无任何关系,但是*p和i却是等效的两者可以互换)变量不进行初始化,会是一个随机数的原因。
郝斌老师 sql server 2005数据库大纲
数据库学习大纲什么是数据库狭义:存储数据的仓库广义:可以对数据进行存储和管理的软件以及数据本身统称为数据库数据库是由表、关系、操作组成为什么需要数据库几乎所有的应用软件的后台都需要数据库数据库存储数据占用空间小容易持久保存存储比较安全容易维护和升级数据库移植比较容易简化对数据的操作为将来学习Oracle做准备B/S架构里面包含数据库数据库的安装和卸载sg12000解决挂起的问题sq12005参见视频预各知识学习数据库必须的学习数据库原理么我的视频中会讲一些数据库原理的知识学习SglServer 2005必须的先学一门编程语言么不需要,但是懂一门编程语言的话会有助于学SQLServer 2005的TL-SQL数据结构和数据库的区别数据库是在应用软件级别研究数据的存储和操作数据结构是在系统软件级别研究数据的存储和操作什么是连接【重点】有了编程语言为什么还需耍数据库对内存数据操作是编程语言的强项,但是对硬盘数据操作却是编程语言的弱项对硬盘数据操作是数据库的强项,是数据库研究的核心问题建议初学者从三个方面学习数据库1 数据库是如何存储数据的字段记录表约束(主键外键唯一键非空check default 触发器)2 数据库是如何操作数据的insert update delete T-SQL 存储过程函数触发器3 数据库是如何显示数据的Select (重点的重点)必备的一些操作如何建数据库如何删除数据库如何附加和分离数据库设置登录用户名和密码如何创建用户数据库是如何解决数据存储问题的【最基础内容,必须掌握】1.表的相关数据字段一个事物的某一个特征记录字段的组合表示的是一个具体的事物表记录的组合表示的是同一类型事物的集合表和字段、记录的关系字段是事物的属性记录是事物本身表是事物的集合列字段的另一种称谓属性字段的另一种称谓元组记录的另一种称谓2. create table命令通过图形化界面建表create table最后一个字段的后面建议不要写逗号说明:简单掌握后面我们会再详细的介绍3.什么是约束定义对一个表中属性操作的限制叫做约束分类主键约束不允许重复元素避免了数据的冗余外键约束通过外键约束从语法上保证了本事物所关联的其他事物一定是存在的事物和事物之间的关系是通过外键来体现的check约束保证事物属性的取值在合法的范围之内default约束保证事物的属性一定会有一个值唯一约束保证了事物属性的取值不允许重复,但允许其中有一列且只能有一列为空问题:unique键是否允许多列为空?答案:SqlServer2005只允许一个unique列为空Oracle11G允许多个unique列为空not null要求用户必须的为该属性斌一个值,否则语法出错!如果一个字段不写null 也不写not null则默认是null即默认允许用户可以不给该字段斌值如果用户没有为该字段赋值,则该字段的值默认是null要注意null和default的区别相同点:都允许用户不赋值不同点:null修饰的字段如果用户不赋值则默认是nulldefault修饰的字段如果用户不斌值则默认是default指定的那个值4.表和约束的异同数据库是通过表来解决事物的存储问题的数据库是通过约束来解决事物取值的有效性和合法性的问题建表的过程就是指定事物属性及其事物属性各种约束的过程5.什么是关系定义: 表和表之间的联系实现方式通过设置不同形式的外键来体现表和表的不同关系分类(假设是A表和B表)一对一既可以把表A的主键充当表B的外键也可以把表B的主键充当表A的外键一对多【重点】把表A的主键充当表B的外键或者讲:把A表的主键添加到B表来充当B表的外键外键添加原则:在多的一方添加外键多对多多对多必须的通过单独的一张表来表示例子班级和教师班级是一张表教师是一张表班级和教师的关系也是一张表6.主键定义:能够唯一标示一个事物的一个字段或者多个字段的组合主键的特点【重点】含有主键的表叫做主键表主键通常都是整数不建议使用字符串当主键(如果主键是用于集群式服务,才可以考虑用字符串当主键)主键的值通常都不允许修改,除非本记录被删除主键不要定义成id,而要定义成表名id或者表名_id要用代理主键,不要用业务主键任何一张表,强烈建议不要使用有业务含义的字段充当主键我们通常都是在表中单独添加一个整型的编号充当主键字段主键是否连续增长不是十分重要7.外键定义:如果一个表中的若干个字段是来自另外若千个表的主键或唯一键则这若干个字段就是外键注意:外键通常是来自另外表的主键而不是唯一键,因为唯一键可能为null 外键不一定是来自另外的表,也可能来自本表的主键含有外键的表叫外建表,外键字段来自的那一张表叫做主键表问题:先删主键表还是外建表? 答案:先删外建表如果先删主键表,会报错,因为这会导致外建表中的数据引用失败查询【最重要难度最大,强烈建议所有的学生都要熟练掌握查询的内容】1.计算列select * from emp; ---*表示所有的from表示从emp表查询select ename , sal from emp;select ename, sal, sal * 12 as "年薪" from emp;-------as可省略select 888 from emp;----ok,输出行数是emp行数,值是888select 5;----ok,一行,值是5注意:在oracle中字段的别名不允许被单引号括起来但是在sql2005中允许,因此为了兼容性最好字段别名用双引号括起来2.distinct【不允许重复的】select distinct deptno from emp;----会过滤重复的deptnoselect distinct comm from emp;---会过滤掉重复的null,或者所:有多个null,最终也只会输出一个select distinct deptno, comm from emp;---对deptno和comm组合进行过滤select deptno, distinct comm from emp;---error 逻辑上有冲突3.between 【在某个范围】----查找工资在1500到3000之间(包括和)的所有员工信息select * from empwhere sal >=1500 and sal <=3000等价于select * from empwhere sal between 1500 and 3000;>---查找工资小于1500或者大于3000之间的所有员工信息select * from empwhere sal not between 1500 and 3000;4. inselect * from emp where sal in (1500, 3000, 5000)等价于Select * from empwhere sal=1500 or sal=3000 or sal=5000select * from emp where sal not in (1500, 3000,5000)一把sal不是也不是也不是的记录输出等价于select*from empwhere sal<>1500 and sal<>3000 and sal<>5000一数据库中不等于有两种表示:!二<> 推荐使用第二种一对或取反是并且对并且取反是或5. top【最前面的若干个记录专属于Sql的语法,不可移植】select top 5 * from emp;select top 15 percent * from emp;一输出的是3个,不是2个select top 5 from emp;-error分页查询后面会讲6. null 【没有值空值】零和null是不一样的,null表示空值,没有值,零表示一个确定的值null不能参与如下运算: < > != =null可以参与如下运算:is not isselect * from emp where comm is null;一输出奖金为空的员工的信息select * from emp where comet is not null:一输出奖金不为空的信息select * from emp where comm < > null;--输出为空errorselect * from emp where comm != null;-偏出为空errorselect * from emp where come = null:一输出为空error任何类型的数据都允许为nullcreate table tl (name nvarchar(20),cnt int, riqi datetime);insert into tl values (null, null, null);---OK任何数字与null参与数学运算的结果永远是null一输出每个员工的姓名年薪(包含了奖金) comm假设是一年的奖金Select empno, ename, sal*12 + comm "年薪" from emp;一本程序证明了:null不能参与任何数据运算否则结果永远为空一正确的写法是:select ename, sal*12+isnull(comm, 0)"年薪" from emp;---isnull (comm, 0)含意思:如果comm是null 就返回零否则返回comm的值7. order by【以某个字段排序】order by a, b --a和b都是升序order by a, b des -a升序b降序order by a desc, b -a降序b升序order by a desc, b desc 一a和b都是降序文字描述:如果不指定排序的标准,则默认是升序升序:asc 默认可以不写为一个字段指定的排序标准并不会对另一个字段产生影响强烈建议为每一个字段都指定排序的标准例子:---asc是升序的意思默认可以不写desc是降序select * from emp order by sal ;一默认是按照升序排序select * from emp order by deptno, sal;一先按照deptno升序排序,如果deptno相同,再按照sal升序排序Select * from emp order by deptno desc, sal;一先按deptno降序排序如果deptno相同,再按照sal升序排序(是升序不是降序)--order by a desc, b, c, d desc只对a产生影响不会对后面的b c d 产生影响select * from emp order by deptno, sal desc一问题:desc是否会对deptno产生影响?一答案:不会,先按deptno升序,如果deptno相同,再按sal降序8.模糊查询【搜索时经常使用】格式:select 字段的集合from 表名where 某个字段的名字like 匹配的条件匹配的条件通常含有通配符通配符:%表示任意0个或多个字符select * from emp where ename like '%A%' --ename只要含有字母A就输出select * from emp where ename like 'A%' --ename只要首字母是A的就输出select * from emp where ename like '%A' --ename只要尾字母是A的就输出_ [这是下划线不是减号]表示任意单个字符select *from emp where ename like '_A%' -ename只要第二个字母是A的就输出[a-f]a到f中的任意单个字符只能是a b c d e f中的任意一个字符select * from emp where ename like '_[A-F]%'一把ename中第二个字符是A或B或C或D或E或F的记录输出[a, f]a或f[^a-c]不是a也不是b也不是c的任意单个字符例子:select * from emp where ename like '_["A-F]%'一把ename中第二个字符不是A也不是B也不是C 也不是D也不是E也不是F的记录输出注意:匹配的条件必须的用单引号括起来不能省略也不能改用双引号通配符作为不同字符使用的问题预备操作create table student (name varchar(20) null,age int)insert into student values('张三',88);insert into student values('Tom',66);insert into student values('a_b',22);insert into student values('c%d',44);insert into student values('abces fe',56);insert into student values('c%',66);insert into student values('long''S',100)select * from student;select * from student where name like '%\%%' escape '\';---把name中含有%的输出select * from student where name like '%\_%' escape '\';----把name中含有_的输出;9.聚合函数【多行记录返回至一个值通常用于统计分组的信息】函数的分类单行函数每一行返回一个值多行函数多行返回一个值聚合函数是多行函数例子:select lower(ename) from emp;一最终返回的是行lower()是单行函数select max(sal) from emp;一返回行max()是多行函数聚合函数的分类max0min()avg ()平均值count ()求个数1 count(*)返回表中所有的记录的个数select count(*) from emp;一返回emp表所有记录的个数2 count(字段名)返回字段值非空的记录的个数,重复的记录也会被当做有效的记录select count(deptno) from emp;一返回值是14 这说明deptno重复的记录也被当做有效的记录select count(comm) from emp;一返回值是这说明comm为null的记录不会被当做有效的记录3 count(distinct 字段名)返回字段不重复并且非空的记录的个数select count(distinct deptno) from emp;----返回值是3,说明统计的是deptno不重复的记录个数注意的问题判断如下sql语句是否正确select max(sal), min(sal), count(*) from emp; -okselect max (sal) "最高工资", min(sal)"最低工资",count (*)"员工人数" from emp; -okselect max(sal), lower(ename) from emp; -error单行函数和多行函数不能混用select max(sal) from emP; -ok默认把所有的信息当做一组10. group by【分组难点】格式:group by 字段的集合功能:把表中的记录按照字段分成不同的组例子查询不同部门的平均工资select deptno, avg(sal) as "部门平均工资,from emp group by deptno 注意理解: group by a, b,c的用法先按a分组,如果a相同,再按b分组,如果b相同,再按c分组,最终统计的是最小分组的信息一定要明白下列语句为什么是错误的select deptno, avg(sal) as"部门平均工资", enamefrom empgroup by deptnoselect deptno,enamefrom empgroup by deptnoselect deptno,job, salfrom empgroup by deptno, job记住:使用了group by 之后select中只能出现分组后的整体信息,不能出现组内的详细信息11. having【对分组之后的信息进行过滤难点】1.having子句是用来对分组之后的数据进行过滤因此使用having时通常都会先使用group by2.如果没使用group by但使用了having则意味着having把所有的记录当做一组来进行过滤极少用select count(*)from emphaving avg(sal)>10003.having子句出现的字段必须的是分组之后的组的整体信息having子句不允许出现组内的详细信息4.尽管select字段中可以出现别名但是having子句中不能出现字段的别名,只能使用字段最原始的名字5.having和where的异同相同的:都是对数据过滤,只保留有效的数据where和having一样,都不允许出现字段的别名,只允许出现最原始的字段的名字,此结论在SQL和Oracle都成立不同:where是对原始的记录过滤having是对分组之后的记录过滤where必须的写在having的前面,顺序不可顺倒否则运行出错例子:----统计输出部门平均工资大的部门的部门编号和部门的平均工资select deptno, avg(sal) "平均工资",count (*)"部门人数",max(sal) as "部门的最高工资"from empwhere sal>2000 --where是对原始的记录过滤group by deptnohaving avg(sal)>3000 --一对分组之后的记录过一判断入选语句是否正确select deptno, avg(sal)"平均工资",count (*)"部门人数",max(sal)"部门的最高工资"from empgroup by deptnohaving avg(sal)>300。
数据结构学习笔记(郝斌老师)
(控制线用来控制 cpu 对于内存条,是只读还是只写,还是可读或可写)
两个指针变量之间只可以相减,不可以相加,相乘或相除,因为这样的运算无意义 对于单个指针可以进行加法或者减法运算(自增,自减) “指向同一块连续空间的不同存储单元”这个要求存在,是因为不同类型的指针变量,相
减无意义,例如,一个保存的是整型的地址,另一个保存的是实型的地址,相减干啥?
数据结构研究的就是个体的存储和个体与个体之间关系的存储问题,算法研究的是对数据的 操作问题,并且不同的存储结构会影响算法的使用,举个简单的例子,要想实现一个功能, 你首先需要把数据拿出来,对于数组来说用 for 循环就可以实现,但对于链表就不可以了, 所以说算法依附于存储数据的结构,结构不同算法必定会有差异
指针的变量值是人赋予的那些数据,其变化范围就是数学上所定义的那个范围。 语法程序举例 1: # include <stdio.h> int main(void) {
int * p; //p 是变量的名字, int * 表示 p 变量存放的是 int 类型变量的地址 int i = 3;
p = &i; //OK //p = i; //error,因为类型不一致,p 只能存放 int 类型变量的地址,不能存放 int 类
指针与一维数组 # include <stdio.h>
int main(void) {
int a[5]; //a 是数组名 5 是数组元素的个数 元素就是变量 a[0] // int a[3][4]; //3 行 4 列 a[0][0]是第一个元素 a[i][j]第 i+1 行 j+1 列
int b[5];
-- a[4]
//a = b;//error a 是常量
郝斌老师C大纲笔记
郝斌老师C大纲笔记C语言概述1、为什么学习C语言1)C的起源和发展第一代语言:机器语言01代码第二代语言:汇编语言就是简单的助记符ADD第三代高级语言:结构化语言(面向过程)C,Fortran用于科学计算Basic演变为VB,Pascal用于教学。
面向对象(OO)C++,java(SUN改造过),C#(微软改造的),后两种都是针对C++改造的。
因为C++比较复杂。
结构化语言有缺陷:数据和操作分离。
如果你学会C++那么剩下都不用学了。
因为它都包括了面向过程和对象2)C的特点优点:代码量小(WPS)速度快功能强大(写操作系统)缺点:危险性高:(同样的程序java中就会报错)可以随便写开发周期长:因为它是面向过程语言,10万行代码以上容易崩溃可移植性不强:因为java的可移植性太强了。
C的话两台机器跑起来可能不一样。
3)C的应用领域系统软件开发:操作系统:三大驱动程序:主板驱动、显卡驱动、摄像头驱动数据库:DB2,Oracle,Sql server应用软件:办公软件:WPS图形图像多媒体:ACDSee,PS,MediaPlayer嵌入式软件开发:智能手机,掌上电脑游戏开发:2D,3D游戏(CS整个引擎都是纯C。
魔兽不是4)C的重要性有史以来最重要的语言所有大学工科理科学生必修课程系统软件都是用它开发合格黑客必须掌握程序员必须熟练大企业、外企招聘必考为数据结构,C++,java,c#做准备2、怎样学习C语言每一讲分四次课前两节课为理论课,讲授理论知识后两节课为上机课,在机房完成当堂练习要去:当堂练习必须在两节上机课中完成机房随时有辅导老师辅导老师检查后方可离开途径:多思考,多上机目标:能看懂程序,能调试程序,自学能力要很强其实就是犯错误的过程,肯定会有错误,全都出完了,就学好了。
参考资料:谭浩强《C语言程序设计》清华绝对入门经典(就是自己能看懂)《C Primer Plus》人民邮电 60元语法《C和指针》人民邮电 65元在想变成高手看:《C专家编程》绝版《C陷阱与缺陷》人民邮电 30元3、学习的目标了解程序语言及发展历史熟练掌握C语言的语法规则掌握简单的算法理解面向过程的思想,这非常有助于将来对面向对象思想的学习能看懂程序会调试程序掌握将大问题转化为一系列小问题来求解的思想为将来学习C++,数据结构,C#,java打下良好的基础4、常见问题答疑1、学习java为什么建议先学C语言a)学习C就是学java,因为C语言至少80%的语法知识都被java继承过来了。
郝斌数据结构学习笔记1
郝斌c语言学习笔记这篇文本我写过后做很多次修改,虽然感觉还是无法做到最合理的解释,但也希望能对想真正理解c语言的人有所帮助,这里我只写了一部分,往后我会定时上传。
正在看郝斌的数据结构,看到了指针,觉得讲的很不错的,int *p;定义一个整形的指针变量int i=10;定义一个整形变量i=10;p=&i;将i取地址给p(也叫做p指向i)我们叫做p指向i,p中装载的是i的地址,而*p与i是属于一体的,也就是说此时无论i变为何值*p也就是为何值。
指针与一维数组列如:int a[5]={1,2,3,4,5};我们可以写成a[3]=*(a+3);那么为什么a[3]这个元素可以等价于*(a+3)呢?答案:因为a所指向的是这个数组的第一个地址,这个是需要记住的,也就是说内部库这么定义的,*a是一个指针变量,而指针a中也就是第一个元素的地址,那么(a+3)就说明了一维数组的第一个元素的地址向后推移了3位,也就是数组的第四位a[3]的地址,此时a[3]的地址也就是指针,所以*(a+3)对应的是a[3]的数值4,当然也可以有另一种写法*a+3,*a代表的是第一个元素的数值也就是a[0]=1;1+3=4;所以也可以代表a[3]的值。
以上是看了郝斌数据结构指针与一维数组的理解。
指针与内存以及指向对象的类型关系?答案:一般指针占用四个字节,那么指针与数组类型的关系?列如:double arry[3]={1.1,2.2,3.3}这是一个double类型的数组每个元素占有8个字节,我们在定义两个指针:Int *p; int *q;p=arry[0];q=arry[1];我们把数组的第一个与低二个元素给指针pq那么p,q内部装载的是什么,可知p,q为指针所以存储应该是元素的地址,因为double类型的数组是八个字节,但是指针只存储这个元素的第一个字节,因为一个字节也就是一个地址,而指针只存储一个元素的首地址所以只存储一个字节。
郝斌老师数据结构大纲word版
一、连续存储[数组]
1.什么叫做数组
元素类型相同,大小相等
2.数组的优缺点(相对于链表)
优点:存取速度快
缺点:实现必须知道数组的长度
需要大块连续的内存块
插入和删除元素很慢
空间通常是有限制的
二、离散存储[链表]
1.定义
N 个结点离散分配
彼此通过指针相连
每个结点只有一个前驱结点,每个结点只有一个后续结点
front 代表的是队列的第一个元素 rear 代表的是队列的最后一个有效元素的下一个元素 ③队列空
front 和 rear 的值相等,但不一定是零 ④循环队列入队伪算法讲解(在尾部入队)
第一步:将值存入 rear 所指向的位置 第二步:rear = (rear + 1)%数组的长度 ⑤循环队列出队伪算法讲解(在头部出队)
首结点没有前驱结点,尾结点没有后续结点
专业术语:
首结点:第一个存放有效数据的结点
尾结点:最有一个存放有效数据的结点
头结点:头结点的数据类型和首结点的类型是一样的
首结点之前的结点
头结点并不存放有效数据
-4-
数据结构资料
加头结点的目的是为了方便对链表的操作 头指针:指向头结点的指针变量 尾指针:指向尾结点的指针变量 确定一个链表需要几个参数: (如果希望通过一个函数来对链表进行处理,我们至少需要接受链表的那些参 数) 一个参数,即头指针,因为我们通过头指针可以推算出链表的其它所有的信息 2.分类 单链表 双链表:每一个结点有两个指针域
return 0; }
scanf ("%d",&val); printf("%d 的阶乘是%ld", val, mult(val));
《郝斌开发经验(java)》
序本视频假定读者已经掌握了C语言!所以有关变量,数据类型,运算符, 流程控制,函数,指针等知识本视频中就是没有讲得,因为这些知识我已经在C语言中讲过了C语言视频我暂时还没有录制,没有C语言基础得同学瞧本Java视频会有不小得难度! 当然如果您已经学习了其她语言,掌握了有关变量,数据类型,运算符, 流程控制,函数,指针等知识,瞧此视频应该没什么难度吧!没有学过C语言得推荐瞧谭浩强先生得书籍!本人得只希望接受您对我视频教学错误得指正,对于您学习中出现得问题,对不起,我没有时间通过来帮您解决!实在就是抱歉!2009年7月17日ﻩﻩﻩﻩﻩﻩﻩ郝斌注意:本资源[郝斌]Java自学视频教程共107集郝斌,现在瑞德学校担任教学组长,曾在雅博等公司担任项目总监。
6年开发经验,擅长C/C++ 、Java、数据结构、数据库。
具有四年培训经验。
郝斌:自学好辛苦, 不过好在最后我还就是学出来了, 教学好几年了, 感触颇多, 如今录制了一些教学视频,把自己得心得发布出来, 希望对那些没钱培训得朋友有所帮助视频目录1_Java概述_12_Java概述_23_Java概述_34_Java得卸载5_Java得安装6_环境变量得设置7_常见dos命令文件名与类名不同时编译运行得问题9_复习上节课10_类与对象8_ 变量命名规则数据类型运算符格式化输出流程控制11_内存分配12_访问控制符_113_访问控制符_214_构造函数15_UltraEdit得使用16_复习17_函数得重载18_构造函数19_this20_static21_复习22_static两示例_求个数_只生成一个对象__123_static两示例_求个数_只生成一个对象__224_继承得由来与继承得访问控制权限_125_继承得由来与继承得访问控制权限_226_面向对象得继承反映得就是现实中得一般到特殊得关系27_Java为什么没有多继承28_复习+super_129_复习+super_230_重写父类方法_131_重写方法示例32_多态得语法知识33_复习34_多态注意事项与实际应用示例36_接口_135_抽象类与final37_接口_238_面向对象复习39_编译运行含有包层得类_140_编译运行含有包层得类_241_同包与不同包类得相互访问42_复习与不同包之间得相互访问_143_复习与不同包之间得相互访问_244_jar包得生成45_如何使用Jar包与包得总回顾46_异常概述_147_异常概述_248_复习49_为什么需要异常50_printStackTrace方法得介绍51_可处理可不处理得异常与必须得进行处理得异常52_处理异常得两种方式53_finally54_ 自定义异常与throws常见错误解析_155_ 自定义异常与throws常见错误解析_256_异常复习57_异常58_ToString()方法介绍_159_ToString()方法介绍_260_equals_161_equals_262_复习63_String类得equals==常量字符串得用法64_String类得常用方法介绍字符串与整数得相互转化67_复习65_String常用方法举例66_printf与println得区别68_StringBuffer69_数组70_线程_171_复习72_创建线程得第二种方式73_线程常用方法得介绍java自学视频源代码74_线程得控制75_线程同步问题得产生原因76_复习78_闲聊79_复习77_买票程序讲解80_生产消费程序演示_182_awt展望81_生产消费程序演示_284_布局管理器86_复习83_gui85_事件处理87_十个按钮得设计90_计算器可运行jar包得生成89_复习内部类匿名类92_复习91_什么叫流流得分类四大基本抽象流88_三个文本框得相加运算示例93字节流字符流得使用与它们得区别94_缓冲流得使用95_将一个长整型数写入字节数组再从字节数组读出程序讲解96_print流Object流97_容器得介绍与使用99_ 复习98_parable 接口Set接口101_Iterator接口100_equals与hashCode方法得使用(难点)103_泛型102_Map接口得使用104_网络编程基础知识UDP编程105_TCP编程与TCP下得WEB服务器程序得讲解106_JavaSE复习大纲_上107_JavaSE复习大纲_下Java概述Java特点Java虚拟机(JVM)每台计算机上都有独特得java虚拟机;一次编译到处运行;Java应用领域J2SEJ2MEJ2EEJava基础知识Dos命令Java中得注释标识符关键字数据类型常量整型常量、浮点常量、字符常量不同类型变量得存储范围数据类型转化运算符算术运算符关系运算符逻辑运算符赋值运算符位运算符运算符得优先级流程控制顺序选择循环函数得重载面向对象编程(上)面向过程得设计思想/面向对象得设计思想类得定义:静态属性(成员变量);动态可执行得操作(成员方法); 对象得定义程序得执行过程(执行过程得内存管理:堆栈等)构造函数 构造函数得定义与作用:类创建对象 构造函数得返回值问题(构造函数没有返回值) 构造函数数据成员得赋值-—对象被创建时会对其中各种类型得成员变量自动初始化赋值 多个构造函数可能带来得冲突(如果不定义程序就会默认提供,定义后就不再提供) 关键字thi s(理解成当前对象得引用或指针) 一个类得ne w出多个对象,成员变量放在内存得不同区域,但就是方法只有一个且放在代码段---成员方法如何区别就是哪一个对象掉用自己?——每一个非静态方法中都隐含一个th is 指针 关键字stat ic (成员属于类) 非私有静态属性或方法可以直接用类名访问,类得对象也可以直接访问; 静态方法不可以访问非静态成员;非静态方法可以访问静态成员; Static 应用:创建对象计数;单态模式★——只能创建一个对象(见例子 T est Stati c_2。
[郝斌]数据 结构c语言-前导知识
[郝斌]数据结构c语言-前导知识
数据结构是计算机科学中非常重要的一个概念。
它是指将数据组织成特定的形式,以方便访问和处理。
数据结构可以分成两类:线性结构和非线性结构。
线性结构包括数组、链表、栈、队列等,而非线性结构包括树、图等。
在学习数据结构前,我们需要掌握一些前导知识,主要包括以下几个方面:
1. C语言基础:C语言是数据结构的基础语言,我们需要熟悉C 语言的基本语法、运算符、流程控制语句、函数等知识点。
同时,我们还需要学会使用C语言编写基本的数据结构算法。
2. 算法基础:数据结构和算法是密不可分的,我们需要掌握一些基本的算法,如排序算法、查找算法等。
同时,我们还需要学会分析算法的时间复杂度和空间复杂度。
3. 数学基础:数据结构涉及到一些数学知识,如概率论、离散数学等。
这些知识可以帮助我们更好地理解数据结构的原理和应用。
4. 计算机组成原理:学习数据结构还需要了解计算机的基本组成原理,如内存、CPU等。
这可以帮助我们更好地理解数据结构的存储方式和访问方式。
5. 数据库基础:数据结构是数据库系统的基础,了解数据库的基本知识,如关系型数据库、非关系型数据库等,可以帮助我们更好地应用数据结构。
总之,掌握好数据结构需要系统学习和不断实践,只有在不断的编写和优化程序中,我们才能更好地掌握数据结构的运用。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
append_arr(&arr, -3);
append_arr(&arr, 6);
append_arr(&arr, 88);
append_arr(&arr, 11);
if ( delete_arr(&arr, 4, &val) )
{
printf("删除成功!\n");
bool delete_arr(struct Arr * pArr, int pos, int * pVal);
int get();
bool is_empty(struct Arr * pArr);
bool is_full(struct Arr * pArr);
void sort_arr(struct Arr * pArr);
void g(struct Student st)
{
printf("%d %s %d\n", st.sid, , st.age);
}
void g2(struct Student *pst)
{
printf("%d %s %d\n", pst->sid, pst->name, pst->age);
//p[i]就是主函数的a[i]
}
int main(void)
{
int a[5] = {1,2,3,4,5};
Show_Array(a, 5); //a等价于&a[0], &a[0]本身就是int *类型
//printf("%d\n", a[2]);
return 0;
}
Point_1
# include <stdio.h>
p->sid = 99;
p->age = 88;
return p;
}
Struct1
# include <stdio.h>
# include <string.h>
struct Student
{
int sid;
char name[200];
int age;
}; //分号不能省
int main(void)
void f(int ** q);
int main(void)
{
int i = 9;
int * p = &i;// int *p; p = &i;
printf("%p\n", p);
f(&p);
printf("%p\n", p);
return 0;
}
void f(int ** q)
{
*q = (int *)0xFFFFFFFF;
p = &x; //x占8个子节1个字节是8位, 1个子节一个地址
double arr[3] = {1.1, 2.2, 3.3};
double * q;
q = &arr[0];
printf("%p\n", q); //%p实际就是以十六进制输出
q = &arr[1];
printf("%p\n", q);
int cnt; //当前数组有效元素的个数
};
void init_arr(struct Arr * pArr, int length); //分号不能省
bool append_arr(struct Arr * pArr, int val); //追加
bool insert_arr(struct Arr * pArr, int pos, int val); // pos的值从1开始
{
struct Student st = {1000, "zhangsan", 20};
printf("%d %s %d\n", st.sid, , st.age);
st.sid = 99;
// = "lisi"; //error
strcpy(, "lisi");
return 0;
}
Struct3
# include <stdio.h>
# include <string.h>
struct Student
{
int sid;
char name[200];
int age;
}; //分号不能省
void f(struct Student * pst);
void g(struct Student st);
{
*p = 100; //
}
int main(void)
{
int i = 9;
f(&i);
printf("i = %d\n", i);
return 0;
}
{数据结构6~10笔记}
# include <stdio.h>
int main(void)
{
double * p;
double x = 66.6;
struct Student * pst = &st;
1.
st.sid
2.
pst->sid
pst所指向的结构体变量中的sid这个成员
*/
# include <stdio.h>
# include <string.h>
struct Student
{
int sid;
char name[200];
int age;
}
void f(struct Student * pst)
{
(*pst).sid = 99;
strcpy(pst->name, "zhangsan");
pst->age = 22;
}
{数据结构10~13笔记}
# include <stdio.h>
# include <malloc.h> //包含了malloc函数
printf("您删除的元素是: %d\n", val);
}
else
{
printf("删除失败!\n");
return 0;
}
void ShowStudent(struct Student * pst)
{
printf("%d %d\n", pst->sid, pst->age);
}
struct Student * CreateStudent(void)
{
struct Student * p = (struct Student *)malloc(sizeof(struct Student));
int main(void)
{
int * p; //p是个变量名字, int *表示该p变量只能存储int类型变量的地址
int i = 10;
int j;
//p = &i;
j = *p; //等价于j = i;
printf("i = %d, j = %d, *p = %d\n", i, j, *p);
return 0;
}
# include <stdio.h>
void f(int * p);
int main(void)
{
int i = 10;
f(&i);
printf("i = %d\n", i);
return 0;
}
void f(int * p)
{
*p = 99;
}
# include <stdio.h>
st.age = 22;
printf("%d %s %d\n", st.sid, , st.age);
//printf("%d %s %d\n", st); //error
return 0;
}
Struct2
/*
2009年8月26日14:18:02
如何使用结构体
两种方式:
struct Student st = {1000, "zhangsan", 20};
void show_arr(struct Arr * pArr);
void inversion_arr(struct Arr * pArr);
int main(void)
{
struct Arr arr;
int val;
init_arr(&arr, 6);
show_arBiblioteka (&arr);append_arr(&arr, 1);
i = f();
printf("i = %d\n", i);
for (i=0; i<2000; ++i)
f();
return 0;
}
int f()
{
int j = 20;
return j;
}
Memory2
# include <stdio.h>
# include <malloc.h>
struct Student
}; //分号不能省
int main(void)
{
struct Student st = {1000, "zhangsan", 20};