diff --git "a/104-C\350\257\255\350\250\200\347\273\217\345\205\270\345\277\205\350\200\203.c" "b/104-C\350\257\255\350\250\200\347\273\217\345\205\270\345\277\205\350\200\203.c" index 3f42fb6392bed92bc804ea247a3516a35210b221..9800ef4b7ce3a554221933e5132e4876dacfcc7d 100644 --- "a/104-C\350\257\255\350\250\200\347\273\217\345\205\270\345\277\205\350\200\203.c" +++ "b/104-C\350\257\255\350\250\200\347\273\217\345\205\270\345\277\205\350\200\203.c" @@ -63,11 +63,11 @@ int checkCPU() 16.有一个如下的结构体: struct A{ - long a1; - short a2; - int a3; - int *a4; -}; + long a1;64 + short a2;16+16 + int a3;32 + int *a4;64 +};64*3/8 请问在64位编译器下用sizeof(struct A)计算出的大小是多少?(A) A 24 B 28 @@ -454,7 +454,7 @@ c = a++ + b; ==== 14:写出float,bool,int 类型与零的比较,假设变量为X: Int : if(x == 0) - Float: if(x > 0.0000001 && x) + Float: if(x > 0.0000001 && x)? Bool: if(x == false) 权重:高 @@ -488,8 +488,8 @@ void rechange(char *str) len = strlen(str); for(int i = 0;len / 2;i++) { - t = str; - str = str[len - i - 1]; + t = str[i]; + str[i] = str[len - i - 1]; str[len - i - 1] = t; } } @@ -771,11 +771,29 @@ LinkList *reverse(LinkList *head)    return head; } + +ListNode* reverseList(ListNode* head) { + ListNode* prev = nullptr; + ListNode* curr = head; + while (curr) { + ListNode* next = curr->next; + curr->next = prev; + prev = curr; + curr = next; + } + return prev; + } + +作者:力扣官方题解 +链接:https://leetcode.cn/problems/reverse-linked-list/solutions/551596/fan-zhuan-lian-biao-by-leetcode-solution-d1k2/ +来源:力扣(LeetCode) + +著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 权重:高 备注:常考 ==== -3、在一个字符串中找到可能的最长的子字符串(子字符串从前往后匹配最长的) +3、在一个字符串中找到可能的最长的公共子字符串(子字符串从前往后匹配最长的) #include #include #include @@ -808,7 +826,72 @@ void main(void)    else      comman = commanstring(str1,str2);    printf("the longest comman string is:%s\n",comman); + free(result); + result = NULL; } + +动态规划版本: +#include +#include + +char* findLongestCommonSubstring(const char* str1, const char* str2) { + int m = strlen(str1); + int n = strlen(str2); + + int dp[m + 1][n + 1]; // dp[i][j] represents the length of the LCS of str1[0...i-1] and str2[0...j-1] + int maxLength = 0; // Length of the longest common substring + int endIndex = -1; // Ending index of the longest common substring in str1 + + // Initialize dp matrix + memset(dp, 0, sizeof(dp)); + + for (int i = 1; i <= m; ++i) { + for (int j = 1; j <= n; ++j) { + if (str1[i - 1] == str2[j - 1]) { + dp[i][j] = dp[i - 1][j - 1] + 1; + if (dp[i][j] > maxLength) { + maxLength = dp[i][j]; + endIndex = i - 1; + } + } + // If characters don't match, reset the LCS length to 0 + else { + dp[i][j] = 0; + } + } + } + + if (maxLength == 0) { + return NULL; // No common substring found + } + + // Allocate memory for the longest common substring + char* longestCommonSubstring = (char*)malloc((maxLength + 1) * sizeof(char)); + strncpy(longestCommonSubstring, str1 + endIndex - maxLength + 1, maxLength); + longestCommonSubstring[maxLength] = '\0'; + + return longestCommonSubstring; +} + +int main() { + char str1[100], str2[100]; + printf("Enter the first string: "); + scanf("%s", str1); + printf("Enter the second string: "); + scanf("%s", str2); + + char* longestCommonSubstring = findLongestCommonSubstring(str1, str2); + + if (longestCommonSubstring == NULL) { + printf("No common substring found.\n"); + } else { + printf("Longest common substring: %s\n", longestCommonSubstring); + free(longestCommonSubstring); // Don't forget to free the allocated memory + } + + return 0; +} + 权重:高 备注:常考 diff --git "a/106-\351\251\261\345\212\250" "b/106-\351\251\261\345\212\250" index a6a1b927e0c12ccfbad11d830568bf9783dc9454..4afb14567f62cc61411674bb61d4d948a8d17ae3 100644 --- "a/106-\351\251\261\345\212\250" +++ "b/106-\351\251\261\345\212\250" @@ -17,19 +17,84 @@ === 8、PCI总线的含义是什么?PCI总线的主要特点是什么? +PCI总线是计算机内部的一种常用接口标准,其全称为Peripheral Component Interconnect(外围设备互联)。它是一种通信协议和硬件接口标准,用于连接计算机的主板和各种外部设备,如显卡、声卡、网卡、硬盘控制器等。PCI总线的引入使得计算机能够更方便地插入和升级各种外部设备,并提供高速数据传输的能力。 + +主要特点: + +1. **通用性**:PCI总线设计为通用接口标准,使其适用于各种不同类型的外部设备。这种通用性使得厂商能够设计一次硬件并为多种设备提供驱动程序。 + +2. **独立性**:PCI总线是独立于处理器和主板的,这样可以实现快速和简单的外部设备连接。它可以通过PCI插槽直接插入到主板上,无需改变主板或处理器的设计。 + +3. **高带宽**:PCI总线具有高带宽的特点,其速度通常在33 MHz时可达133 MB/s,而在66 MHz时可达266 MB/s。这使得PCI总线能够支持高速数据传输,适用于处理要求较高的外部设备。 + +4. **热插拔**:PCI总线支持热插拔功能,这意味着用户可以在计算机开机的情况下插入或拔出PCI设备,而不需要重新启动计算机。这提供了更灵活和方便的设备管理能力。 + +5. **自动配置**:PCI总线支持自动配置,这意味着当PCI设备插入主板时,计算机会自动检测并分配资源,如内存地址和中断,以确保设备可以正确地工作。 + +6. **多设备支持**:PCI总线支持多设备的连接,通过使用多个PCI插槽,用户可以同时插入多个外部设备并通过总线进行通信。 + +总的来说,PCI总线的主要特点是其通用性、独立性、高带宽、热插拔和自动配置等特性,这使得它成为计算机内部设备连接的重要接口标准,并为外部设备的扩展和升级提供了便利。 权重:较低 ==== 10、串行通信与同步通信异同,特点,比较。 +串行通信和同步通信都是计算机或设备之间进行数据传输的方式,但它们有一些异同点。下面是它们的特点和比较: + +串行通信特点: +1. 数据逐位传输:在串行通信中,数据位是逐位逐个传输的,即一位接着一位传输。 +2. 单一传输线路:数据通过单一的传输线路进行传输,一次只能传输一个位。 +3. 数据传输速率较慢:由于数据是逐位传输的,所以串行通信的传输速率相对较慢,通常比并行通信慢。 +4. 使用较少的引脚:串行通信仅需要少量引脚,适用于资源受限的环境。 +5. 适用于长距离传输:串行通信适用于长距离传输,因为信号的稳定性较好。 + +同步通信特点: +1. 时钟同步:同步通信使用一个时钟信号来同步数据的传输,接收方根据时钟信号来解析数据。 +2. 数据按块传输:同步通信中,数据按照预定的块或帧进行传输,一次传输多个数据位。 +3. 高速传输:由于采用块传输和时钟同步,同步通信的传输速率通常较快。 +4. 较多的引脚:同步通信需要额外的时钟信号和同步信号,因此需要较多的引脚。 +5. 适用于短距离传输:同步通信通常用于较短距离的数据传输,因为时钟信号可能在长距离传输中受到干扰。 + +异同比较: +1. 传输方式:串行通信逐位传输,而同步通信按块传输。 +2. 传输速率:同步通信通常比串行通信的传输速率快。 +3. 引脚数量:串行通信通常需要较少的引脚,而同步通信需要额外的时钟和同步信号,引脚数量较多。 +4. 适用距离:串行通信适用于长距离传输,而同步通信通常用于短距离传输。 +5. 数据传输方式:串行通信一位接着一位传输,而同步通信按块传输,适合处理数据块。 + +选择串行通信还是同步通信取决于具体的应用场景和需求。串行通信适用于长距离传输和资源受限的环境,而同步通信适用于高速传输和较短距离的数据传输。 权重:较低 ==== 11、RS232c高电平脉冲对应的TTL逻辑是?(负逻辑?) +在RS-232C标准中,高电平脉冲对应的TTL逻辑是负逻辑。 + +RS-232C是一种串行通信标准,定义了串行通信的电气特性和信号级别。在RS-232C标准中,逻辑电平通常使用正负电压来表示。高电平(逻辑1)对应于负电压,低电平(逻辑0)对应于正电压。 + +具体来说,RS-232C标准中规定高电平(逻辑1)的电压范围是-3V到-15V(常见情况下为-12V),而低电平(逻辑0)的电压范围是+3V到+15V(常见情况下为+12V)。这种电平表示方式称为负逻辑。 + +相反,TTL(Transistor-Transistor Logic)逻辑使用0V(接地)表示逻辑0,使用+5V表示逻辑1。TTL逻辑中的高电平对应于逻辑1,而低电平对应于逻辑0。因此,与RS-232C相比,TTL逻辑是正逻辑。 + +在使用RS-232C与TTL之间进行转换时,通常需要使用电平转换器或适配器来将信号从RS-232C的负逻辑转换为TTL的正逻辑。这样可以确保两种逻辑之间的正确通信。 权重:较低 ==== 1、Linux系统下.ko是什么文件?.so是什么文件? 答:.ko是可动态安装卸载的驱动文件;.so是动态链接库,类似于Windows的.dll。 +在Linux系统下,`.ko`和`.so`都是文件的扩展名,用于表示不同类型的二进制文件。 + +1. `.ko`文件:`.ko`文件是Linux内核模块的文件扩展名。内核模块是一种可以在运行时加载和卸载的可扩展内核代码。这使得内核能够根据需要加载特定的功能和驱动程序,而无需重新编译整个内核。内核模块通常用于支持硬件设备、文件系统、网络协议等,以及提供额外的内核功能。 + +当需要特定功能时,用户可以通过`insmod`命令加载`.ko`文件,并通过`rmmod`命令卸载已加载的模块。这样可以动态地扩展或修改内核的功能。 + +2. `.so`文件:`.so`文件是共享对象(Shared Object)文件的文件扩展名,也称为共享库或动态链接库。共享对象文件是一种可执行文件,包含了一组函数和代码片段,它们可以被多个程序在运行时动态链接使用。 + +共享对象文件的主要目的是实现代码的共享,这样多个程序可以在内存中加载同一个共享对象,避免多个程序同时拥有同样的代码副本。这种共享可以减少内存占用,并提高程序的执行效率。 + +在Linux系统中,共享对象文件的扩展名为`.so`,通常在程序编译链接时指定共享对象的名称,以便在运行时动态加载。 + +总结: +- `.ko`文件是Linux内核模块文件,用于在运行时加载和卸载内核功能和驱动程序。 +- `.so`文件是共享对象文件,用于在运行时动态链接并共享代码片段,提高程序的执行效率和减少内存占用。