数据结构 1、算法思路: 哈夫曼树算法:a)根据给定的n个权值{W1,W2… ,Wn }构成 n棵二叉树的集合F={T1,T2…,T n },其中每棵二叉树T中只有一个带权为W i的根结点,其左右子树均空;b)在F中选取两棵根结点的权值最小的树作为左右子树构造一棵新的二叉树,且置新的二叉树的根结点的权值为其左、右子树上结点的权值之和;c)F中删除这两棵树,同时将新得到的二叉树加入F中; d)重复b)和c),直到F只含一棵树为止。
上传时间: 2016-03-05
上传用户:lacsx
flash 键盘音效取自win2000系统ding.wav,经过CoolEdit处理成音阶,在Flash中导入在相应按钮上。 没有难度,就是耐心一点,成绩不错哦! 对应表: 低音G-a #G-w A-s #A-e B-d 中音C-f #C-t D-g #D-y E-h F-j #F-i G-k #G-o A-l #A-p B- 高音C-1 D-2 E-3 F-4 G-5 A-6 B-7 C(high)-8 #C-c #D-v #F-b #G-n #A-m
上传时间: 2014-02-06
上传用户:ljmwh2000
电子选择器,是利用TND-MD教学系统实现的,用来作为特定场合投票机器统计使用。所用到的芯片主要有8253定时计数器、8255A并行接口电路芯片等。使用时,用户用键盘输入A,B,C,D这四个字母中的一个来作为已经选择的项目,程序将在屏幕上对应显示已经选择的“A,B,C或者D”,并且通过控制扬声器,发出对应的频率声音信号,同时相对应的LED灯也对应发光,以便于位于远处的计票员进行远程计票。
上传时间: 2014-10-14
上传用户:cc1015285075
learningMatlab PhÇ n 1 c¬ së Mat lab Ch ¬ ng 1: Cµ i ® Æ t matlab 1.1.Cµ i ® Æ t ch ¬ ng tr×nh: Qui tr×nh cµ i ® Æ t Matlab còng t ¬ ng tù nh viÖ c cµ i ® Æ t c¸ c ch ¬ ng tr×nh phÇ n mÒ m kh¸ c, chØ cÇ n theo c¸ c h íng dÉ n vµ bæ xung thª m c¸ c th« ng sè cho phï hî p. 1.1.1 Khë i ® éng windows. 1.1.2 Do ch ¬ ng tr×nh ® î c cÊ u h×nh theo Autorun nª n khi g¾ n dÜ a CD vµ o æ ® Ü a th× ch ¬ ng tr×nh tù ho¹ t ® éng, cö a sæ
标签: learningMatlab 172 199 173
上传时间: 2013-12-20
上传用户:lanwei
实验源代码 //Warshall.cpp #include<stdio.h> void warshall(int k,int n) { int i , j, t; int temp[20][20]; for(int a=0;a<k;a++) { printf("请输入矩阵第%d 行元素:",a); for(int b=0;b<n;b++) { scanf ("%d",&temp[a][b]); } } for(i=0;i<k;i++){ for( j=0;j<k;j++){ if(temp[ j][i]==1) { for(t=0;t<n;t++) { temp[ j][t]=temp[i][t]||temp[ j][t]; } } } } printf("可传递闭包关系矩阵是:\n"); for(i=0;i<k;i++) { for( j=0;j<n;j++) { printf("%d", temp[i][ j]); } printf("\n"); } } void main() { printf("利用 Warshall 算法求二元关系的可传递闭包\n"); void warshall(int,int); int k , n; printf("请输入矩阵的行数 i: "); scanf("%d",&k); 四川大学实验报告 printf("请输入矩阵的列数 j: "); scanf("%d",&n); warshall(k,n); }
上传时间: 2016-06-27
上传用户:梁雪文以
复活节计算 int y, n, a, q, b, m, w, d, mm = 4; y = atoi(argv[1]); n = y-1900; a = fmod(n,19);
上传时间: 2021-07-09
上传用户:scfan2004
常用芯片DIP SOT SOIC QFP电阻电容二极管等3D模型库 3D视图封装库 STEP后缀三维视图(154个):050-9.STEP0805R.STEP1001-1.STEP1001-2.STEP1001-3.STEP1001-4.STEP1001-5.STEP1001-6.STEP1001-7.STEP1001-8.STEP103_1KV.STEP10X5JT.STEP1206R.STEP13PX2.STEP15PX2.STEP20P插针.STEP25V1000UF.STEP3296W.STEP35V2200UF.STEP3mmLED.STEP3mmLEDH.STEP3X3可调电阻.STEP400V0.1UF.STEP455.STEP630V0.1UF.STEP7805.STEP8P4R.STEPAXIAL-0.2-0.125W.STEPAXIAL-0.4-0.25W.STEPaxial-0.6-2W.STEPB-3528.STEPC-0805.STEPC06x18.STEPCAP-6032.STEPCH3.96 X2.STEPCH3.96-3P.STEPD-PAK.STEPDB25.STEPDC-30.STEPDIP14.STEPDIP16.STEPDIP6.STEPDIP8.STEPDO-214AA.STEPDO-214AB.STEPDO-214AC.STEPDO-41.STEPDO-41Z.STEPFMQ.STEPGNR14D.STEPH9700.STEPILI4981.STEPIN4007.STEPIN5408.STEPJP051-6P6C_02.STEPJQC-3F.STEPJS-1132-10.STEPJS-1132-11.STEPJS-1132-12.STEPJS-1132-13.STEPJS-1132-14.STEPJS-1132-15.STEPJS-1132-2.STEPJS-1132-3.STEPJS-1132-4.STEPJS-1132-5.STEPJS-1132-6.STEPJS-1132-7.STEPJS-1132-8.STEPJS-1132-9.STEPJS-1132R-2.STEPJS-1132R-3.STEPJS-1132R-4.STEPJS-1132R-5.STEPJS-1132R-6.STEPJS-1132R-7.STEPJS-1132R-8.STEPJZC-33F.STEPKBP210.STEPKE2108.STEPKF2510 X8.STEPKF301.STEPKF301x3.STEPKSD-9700.STEPLED5_BLUE.STEPLED5_GRE.STEPLED5_RED.STEPLED5_YEL.STEPLFCSP_WQ.STEPLQFP100.STEPLQFP48.STEPMC-146.STEPmolex-22-27-2021.STEPmolex-22-27-2031.STEPmolex-22-27-2041.STEPmolex-22-27-2051.STEPmolex-22-27-2061.STEPmolex-22-27-2071.STEPmolex-22-27-2081.STEPMSOP10.STEPMSOP8.STEPPA0630NOXOX-HA1.STEPPIN10.STEPPIN24.STEPPIN24A.STEPR 0805.STEPR0402.STEPR0603.STEPR0805.STEPR1206.STEPRA-15.STEPRA-20.STEPRS808.STEPSIP-3-3.96 22-27-2031.STEPSL-B.STEPSL-D.STEPSL-E.STEPSL-G.STEPSL-H.STEPSOD-123.STEPSOD-323.STEPSOD-523.STEPSOD-723.STEPSOD-80.STEPSOIC-8.STEPSOP-4.STEPSOP14.STEPSOP16.STEPSOP18.STEPSOT-89.STEPSOT223.STEPSOT23-3.STEPSOT23-5.STEPSSOP28.STEPTAJ-A.STEPTAJ-B.STEPTAJ-C.STEPTAJ-D.STEPTAJ-E.STEPTAJ-R.STEPTHB6064H.STEPTO-126.STEPTO-126X.STEPTO-220.STEPTO-247.STEPTO-252-3L.STEPTOSHIBA_11-4C1.STEPTSSOP-8.STEPTSSOP14-BOTTON.STEPTSSOP14.STEPTSSOP28.STEPUSB-A.STEPUSB-B.STEPWT.STEP
标签: 芯片 dip sot soic qfp 电阻 电容 二极管 封装
上传时间: 2021-11-21
上传用户:XuVshu
1、本课题任务如下:设计一个具有特定功能的电子钟。该电子钟上电或按键复位后能自动显示系统提示符"P.",进入时钟准备状态;第一次按电子钟启动/调整键,电子钟从0时0分0秒开始运行,进入时钟运行状态;再次按电子钟启动/调整键,则电子钟进入时钟调整状态,此时可利用各调整键调整时间,调整结束后可按启动/调整键再次进入时钟运行状态。2、本课题要求如下:(1)在AT89S51的PO口和P2口外接由六个LED数码管(LED5~LEDO)构成的显示器,用PO口作LED的段码输出口(PO.0~P0.7对应于LED的a-dp),P2.5-P2.0作LED的位控输出线(P2.5~P2.0对应于LED5~LEDO),P1口外接四个按键A、B,C.D(对应于P1.0~P1.3).(2)、利用六个LED显示当前时间。(3)、四个按键的功能:A键用于电子钟启动/调整;B键用于调时,范围0-23,0为24点,每按一次时加1;C键用于调分,范围0-59,0为60分,每按一次分加1:D键用于调秒,范围0-59,0为60秒,每按一次秒加1.(4)、单片机采用AT89S51,fasc-12MHz(5)、电子钟供电电源电路的设计。
上传时间: 2022-06-19
上传用户:aben
简易负离子发生器负离子增加,对人有催眠、止汗、镇痛、增进食欲,使人精神爽快,消除疲劳的作用。图1是负离子发生器电路图。220V交流市电经D1整流后向C3和C2充电,当C2充电至氖泡导通并触发SCR导通时,C3经SCR、B的L1放电,经B感应升压后,由D2反向整流得8kV直流高压使发生器M的分子电离而产生负离子。调整R3的阻值可以改变触发频率和输出电压。调整时必须注意安全,更换元件需拨下电源插头
标签: 负离子发生器
上传时间: 2013-10-29
上传用户:731140412
有两种方式可以让设备和应用程序之间联系:1. 通过为设备创建的一个符号链;2. 通过输出到一个接口WDM驱动程序建议使用输出到一个接口而不推荐使用创建符号链的方法。这个接口保证PDO的安全,也保证安全地创建一个惟一的、独立于语言的访问设备的方法。一个应用程序使用Win32APIs来调用设备。在某个Win32 APIs和设备对象的分发函数之间存在一个映射关系。获得对设备对象访问的第一步就是打开一个设备对象的句柄。 用符号链打开一个设备的句柄为了打开一个设备,应用程序需要使用CreateFile。如果该设备有一个符号链出口,应用程序可以用下面这个例子的形式打开句柄:hDevice = CreateFile("\\\\.\\OMNIPORT3", GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL ,NULL);文件路径名的前缀“\\.\”告诉系统本调用希望打开一个设备。这个设备必须有一个符号链,以便应用程序能够打开它。有关细节查看有关Kdevice和CreateLink的内容。在上述调用中第一个参数中前缀后的部分就是这个符号链的名字。注意:CreatFile中的第一个参数不是Windows 98/2000中驱动程序(.sys文件)的路径。是到设备对象的符号链。如果使用DriverWizard产生驱动程序,它通常使用类KunitizedName来构成设备的符号链。这意味着符号链名有一个附加的数字,通常是0。例如:如果链接名称的主干是L“TestDevice”那么在CreateFile中的串就该是“\\\\.\\TestDevice0”。如果应用程序需要被覆盖的I/O,第六个参数(Flags)必须或上FILE_FLAG_OVERLAPPED。 使用一个输出接口打开句柄用这种方式打开一个句柄会稍微麻烦一些。DriverWorks库提供两个助手类来使获得对该接口的访问容易一些,这两个类是CDeviceInterface, 和 CdeviceInterfaceClass。CdeviceInterfaceClass类封装了一个设备信息集,该信息集包含了特殊类中的所有设备接口信息。应用程序能有用CdeviceInterfaceClass类的一个实例来获得一个或更多的CdeviceInterface类的实例。CdeviceInterface类是一个单一设备接口的抽象。它的成员函数DevicePath()返回一个路径名的指针,该指针可以在CreateFile中使用来打开设备。下面用一个小例子来显示这些类最基本的使用方法:extern GUID TestGuid;HANDLE OpenByInterface( GUID* pClassGuid, DWORD instance, PDWORD pError){ CDeviceInterfaceClass DevClass(pClassGuid, pError); if (*pError != ERROR_SUCCESS) return INVALID_HANDLE_VALUE; CDeviceInterface DevInterface(&DevClass, instance, pError); if (*pError != ERROR_SUCCESS) return INVALID_HANDLE_VALUE; cout << "The device path is " << DevInterface.DevicePath() << endl; HANDLE hDev; hDev = CreateFile( DevInterface.DevicePath(), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ); if (hDev == INVALID_HANDLE_VALUE) *pError = GetLastError(); return hDev;} 在设备中执行I/O操作一旦应用程序获得一个有效的设备句柄,它就能使用Win32 APIs来产生到设备对象的IRPs。下面的表显示了这种对应关系。Win32 API DRIVER_FUNCTION_xxxIRP_MJ_xxx KDevice subclass member function CreateFile CREATE Create ReadFile READ Read WriteFile WRITE Write DeviceIoControl DEVICE_CONTROL DeviceControl CloseHandle CLOSECLEANUP CloseCleanUp 需要解释一下设备类成员的Close和CleanUp:CreateFile使内核为设备创建一个新的文件对象。这使得多个句柄可以映射同一个文件对象。当这个文件对象的最后一个用户级句柄被撤销后,I/O管理器调用CleanUp。当没有任何用户级和核心级的对文件对象的访问的时候,I/O管理器调用Close。如果被打开的设备不支持指定的功能,则调用相应的Win32将引起错误(无效功能)。以前为Windows95编写的VxD的应用程序代码中可能会在打开设备的时候使用FILE_FLAG_DELETE_ON_CLOSE属性。在Windows NT/2000中,建议不要使用这个属性,因为它将导致没有特权的用户企图打开这个设备,这是不可能成功的。I/O管理器将ReadFile和WriteFile的buff参数转换成IRP域的方法依赖于设备对象的属性。当设备设置DO_DIRECT_IO标志,I/O管理器将buff锁住在存储器中,并且创建了一个存储在IRP中的MDL域。一个设备可以通过调用Kirp::Mdl来存取MDL。当设备设置DO_BUFFERED_IO标志,设备对象分别通过KIrp::BufferedReadDest或 KIrp::BufferedWriteSource为读或写操作获得buff地址。当设备不设置DO_BUFFERED_IO标志也不设置DO_DIRECT_IO,内核设置IRP 的UserBuffer域来对应ReadFile或WriteFile中的buff参数。然而,存储区并没有被锁住而且地址只对调用进程有效。驱动程序可以使用KIrp::UserBuffer来存取IRP域。对于DeviceIoControl调用,buffer参数的转换依赖于特殊的I/O控制代码,它不在设备对象的特性中。宏CTL_CODE(在winioctl.h中定义)用来构造控制代码。这个宏的其中一个参数指明缓冲方法是METHOD_BUFFERED, METHOD_IN_DIRECT, METHOD_OUT_DIRECT, 或METHOD_NEITHER。下面的表显示了这些方法和与之对应的能获得输入缓冲与输出缓冲的KIrp中的成员函数:Method Input Buffer Parameter Output Buffer Parameter METHOD_BUFFERED KIrp::IoctlBuffer KIrp::IoctlBuffer METHOD_IN_DIRECT KIrp::IoctlBuffer KIrp::Mdl METHOD_OUT_DIRECT KIrp::IoctlBuffer KIrp::Mdl METHOD_NEITHER KIrp::IoctlType3InputBuffer KIrp::UserBuffer 如果控制代码指明METHOD_BUFFERED,系统分配一个单一的缓冲来作为输入与输出。驱动程序必须在向输出缓冲放数据之前拷贝输入数据。驱动程序通过调用KIrp::IoctlBuffer获得缓冲地址。在完成时,I/O管理器从系统缓冲拷贝数据到提供给Ring 3级调用者使用的缓冲中。驱动程序必须在结束前存储拷贝到IRP的Information成员中的数据个数。如果控制代码不指明METHOD_IN_DIRECT或METHOD_OUT_DIRECT,则DeviceIoControl的参数呈现不同的含义。参数InputBuffer被拷贝到一个系统缓冲,这个缓冲驱动程序可以通过调用KIrp::IoctlBuffer。参数OutputBuffer被映射到KMemory对象,驱动程序对这个对象的访问通过调用KIrp::Mdl来实现。对于METHOD_OUT_DIRECT,调用者必须有对缓冲的写访问权限。注意,对METHOD_NEITHER,内核只提供虚拟地址;它不会做映射来配置缓冲。虚拟地址只对调用进程有效。这里是一个用METHOD_BUFFERED的例子:首先,使用宏CTL_CODE来定义一个IOCTL代码:#define IOCTL_MYDEV_GET_FIRMWARE_REV \CTL_CODE (FILE_DEVICE_UNKNOWN,0,METHOD_BUFFERED,FILE_ANY_ACCESS)现在使用一个DeviceIoControl调用:BOOLEAN b;CHAR FirmwareRev[60];ULONG FirmwareRevSize;b = DeviceIoControl(hDevice, IOCTL_MYDEV_GET_VERSION_STRING, NULL, // no input 注意,这里放的是包含有执行操作命令的字符串指针 0, FirmwareRev, //这里是output串指针,存放从驱动程序中返回的字符串。sizeof(FirmwareRev),& FirmwareRevSize, NULL // not overlapped I/O );如果输出缓冲足够大,设备拷贝串到里面并将拷贝的资结束设置到FirmwareRevSize中。在驱动程序中,代码看起来如下所示:const char* FIRMWARE_REV = "FW 16.33 v5";NTSTATUS MyDevice::DeviceControl( KIrp I ){ ULONG fwLength=0; switch ( I.IoctlCode() ) { case IOCTL_MYDEV_GET_FIRMWARE_REV: fwLength = strlen(FIRMWARE_REV)+1; if (I.IoctlOutputBufferSize() >= fwLength) { strcpy((PCHAR)I.IoctlBuffer(),FIRMWARE_REV); I.Information() = fwLength; return I.Complete(STATUS_SUCCESS); } else { } case . . . } }
上传时间: 2013-10-17
上传用户:gai928943