当前位置: 首页 > news >正文

笔面试编程题总结

8/6诺瓦星云

修改程序

void point(int *p){*p = p[2];};
int main() {int c[] ={1,2,3,4,5},*p = c;point(p+1);for(;p <c+5;){printf("%d",*p++);}return 0;
}

1、分隔字符串 strtok

在这里插入图片描述

//c语言
#include <stdio.h>
#include <string.h>// 函数声明
char* findLongestWord(char* str);int main() {char* str = "This is a test string";char* longestWord = findLongestWord(str);if (longestWord != NULL) {printf("The longest word is: %s\n", longestWord);} else {printf("No words found in the string.\n");}return 0;
}// 函数定义
char* findLongestWord(char* str) {if (str == NULL) return NULL; // 检查输入字符串是否为空//分隔char *token;char *tokens[100]; // 假设最多分割出100个子字符串int i = 0;char delimiters[] = " "; // 定义分隔符// 复制输入字符串,因为strtok会修改原字符串char *strCopy = strdup(str);// 用strtok分割字符串,要分割的字符串,第一次调用时传入需要分割的字符串,之后传入 NULLtoken = strtok(strCopy, delimiters);while (token != NULL) {tokens[i++] = token; // 保存分割后的子字符串token = strtok(NULL, delimiters); // 继续获取下一个子字符串}// 打印分割后的结果int max = -1;char* longestWord = NULL; // 指向最长单词的指针for (int j = 0; j < i; j++) {//printf("%s\n", tokens[j]);int len_tmp = strlen(tokens[j]);if(len_tmp>max){max = len_tmp;longestWord = tokens[j];}}// 释放复制的字符串free(strCopy);return longestWord;
}

2、后缀法解 最长无重复子串

//C 最长无重复子串
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//得到字符串最长的无重复的前缀长度
int longestlen(char * p)
{int hash[256];int len = 0;memset(hash,0,sizeof(hash));while (*p && !hash[*p]){hash[*p] = 1;++ len;++ p;}return len;
}//使用后缀数组解法
int max_unique_substring4(char * str)
{int maxlen = -1;int begin = 0;char *a[99999];int n = 0;while(*str != '\0'){a[n++] = str++;}for (int i=0; i<n; i++){int temlen = longestlen(a[i]);if (temlen > maxlen){maxlen = temlen;begin = i;}}printf("%.*s\n", maxlen, a[begin]);return maxlen;
}
int main() {char *test_str = "abcabcbb";printf("Length of the longest substring without repeating characters: %s\n", max_unique_substring4(test_str));return 0;
}

3、双向链表

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>// 定义链表节点结构体
typedef struct list_node_t {struct list_node_t *p_before;  // 上一级节点struct list_node_t *p_next;    // 下一级节点void *p_data;                  // 存储数据节点uint32_t data_size;            // 存储数据大小
} list_node_t;// 插入数据到链表尾部
int insert_data_to_list(void *p_list_head, const void *data, uint32_t data_size) {if (!p_list_head || !data) {return -2; // 传入指针为空错误}// 创建新节点list_node_t *new_node = (list_node_t *)malloc(sizeof(list_node_t));if (!new_node) {return -1; // 内存申请错误}new_node->p_data = malloc(data_size);if (!new_node->p_data) {free(new_node);return -1; // 内存申请错误}memcpy(new_node->p_data, data, data_size);new_node->data_size = data_size;new_node->p_before = NULL;new_node->p_next = NULL;// 找到链表尾部list_node_t *current = (list_node_t *)p_list_head;while (current->p_next) {current = current->p_next;}// 插入新节点到尾部current->p_next = new_node;new_node->p_before = current;return 0; // 正确
}// 从链表中删除节点并释放空间
int delete_list_node(void *p_node) {if (!p_node) {return -2; // 传入指针为空错误}list_node_t *node = (list_node_t *)p_node;// 重新连接链表if (node->p_before) {node->p_before->p_next = node->p_next;}if (node->p_next) {node->p_next->p_before = node->p_before;}// 释放节点数据和节点本身free(node->p_data);free(node);return 0; // 正确
}// 示例用法
int main() {list_node_t head = {NULL, NULL, NULL, 0}; // 初始化链表头部int data1 = 100;int data2 = 20;insert_data_to_list(&head, &data1, sizeof(data1));insert_data_to_list(&head, &data2, sizeof(data2));// 遍历链表并打印数据list_node_t *current = head.p_next;while (current) {printf("%d\n", *(int *)current->p_data);current = current->p_next;}// 删除所有节点current = head.p_next;while (current) {list_node_t *next = current->p_next;delete_list_node(current);current = next;}return 0;
}

4、背包问题

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>// 定义链表节点结构体
typedef struct list_node_t {struct list_node_t *p_before;  // 上一级节点struct list_node_t *p_next;    // 下一级节点void *p_data;                  // 存储数据节点uint32_t data_size;            // 存储数据大小
} list_node_t;// 插入数据到链表尾部
int insert_data_to_list(void *p_list_head, const void *data, uint32_t data_size) {if (!p_list_head || !data) {return -2; // 传入指针为空错误}// 创建新节点list_node_t *new_node = (list_node_t *)malloc(sizeof(list_node_t));if (!new_node) {return -1; // 内存申请错误}new_node->p_data = malloc(data_size);if (!new_node->p_data) {free(new_node);return -1; // 内存申请错误}memcpy(new_node->p_data, data, data_size);new_node->data_size = data_size;new_node->p_before = NULL;new_node->p_next = NULL;// 找到链表尾部list_node_t *current = (list_node_t *)p_list_head;while (current->p_next) {current = current->p_next;}// 插入新节点到尾部current->p_next = new_node;new_node->p_before = current;return 0; // 正确
}// 从链表中删除节点并释放空间
int delete_list_node(void *p_node) {if (!p_node) {return -2; // 传入指针为空错误}list_node_t *node = (list_node_t *)p_node;// 重新连接链表if (node->p_before) {node->p_before->p_next = node->p_next;}if (node->p_next) {node->p_next->p_before = node->p_before;}// 释放节点数据和节点本身free(node->p_data);free(node);return 0; // 正确
}// 示例用法
int main() {list_node_t head = {NULL, NULL, NULL, 0}; // 初始化链表头部int data1 = 100;int data2 = 20;insert_data_to_list(&head, &data1, sizeof(data1));insert_data_to_list(&head, &data2, sizeof(data2));// 遍历链表并打印数据list_node_t *current = head.p_next;while (current) {printf("%d\n", *(int *)current->p_data);current = current->p_next;}// 删除所有节点current = head.p_next;while (current) {list_node_t *next = current->p_next;delete_list_node(current);current = next;}return 0;
}
http://www.lryc.cn/news/418299.html

相关文章:

  • [other][知识]八大行星的英文各是什么?
  • 如何使用 AWS CLI 创建和运行 EMR 集群
  • HDFS写入数据的流程图
  • 【Material-UI】使用指南:快速入门与核心功能解析
  • 【Java 第十三篇章】MyBatis 持久化框架的介绍
  • AI新应用:概要设计与详细设计自动生成解决方案
  • 【物联网设备端开发】使用QEMU模拟ESP硬件运行ESP-IDF
  • #子传父父传子props和emits #封装的table #vue3
  • 尚硅谷谷粒商城项目笔记——四、使用docker安装redis【电脑CPU:AMD】
  • Java在无人驾驶方向的就业方向
  • 机器学习中的关键距离度量及其应用
  • Redis中缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题
  • 【C++】vector 的模拟实现
  • 【C++】模版详解
  • 应用商店故障(UOS系统)
  • 8月8号前端日报:web在线进行eps32固件升级
  • win7安装python3.10
  • 【Liunx】线程与进程的经典面试题总结
  • Python中的 `break` 语句:掌握循环控制的艺术
  • ES2023(ES14)新特性有什么?
  • Linux 中的特殊文件权限:SUID、GUID 和 Sticky
  • 2024 某公司python 面试真题
  • jwt伪造身份组组组合拳艰难通关
  • leetcode日记(64)最小覆盖子串
  • C语言——编译与链接
  • 你一定想看的LVS详细介绍及常见模式(NAT,DR,防火墙标记)实验详解
  • 嵌入式初学-C语言-十七
  • leetcode数论(2280. 表示一个折线图的最少线段数)-几何
  • 如何利用 LNMP 搭建 WordPress 站点
  • “Mutation Observer:让DOM变化尽在掌握