
C/C++程序设计
文章平均质量分 67
--FGC--
书山有路勤为径,学海无涯苦作舟
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【故障分析】多进程资源释放问题定位与解决过程
在开发一个多进程应用程序时,发现程序运行一段时间后,会出现内存泄漏现象,导致系统资源耗尽,最终程序崩溃。原创 2024-09-06 23:41:22 · 460 阅读 · 0 评论 -
在O(1)时间删除链表结点
题目:给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点。链表结点与函数的定义如下:struct ListNode{ int m_nValue; ListNode* m_pNext;};void DeleteNode(ListNode *&pListHead, ListNode* pToBeDeleted);程序代码:#i...原创 2018-03-14 16:14:12 · 92 阅读 · 0 评论 -
打印1到最大的n位数
题目:输入数字n,按顺序打印出从1到最大的n位十进制数。比如输入3,则打印出1,2,3一直到最大的3位数999。通过循环打印程序代码:#include <iostream>void PrintNumber(char *number){ while (*number == '0') { number++; } st...原创 2018-03-14 14:56:17 · 111 阅读 · 0 评论 -
栈的压入、弹出序列
题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1、2、3、4、5是某栈的压栈序列,序列4、5、3、2、1是该压栈序列对应的一个弹出序列,但4、3、5、1、2就不可能是该压栈序列的弹出序列。 程序代码:#include <iostream>// 函数名称:I...原创 2018-03-20 11:06:59 · 188 阅读 · 0 评论 -
顺时针打印矩阵
题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。例如:如果输入如下矩阵:1 2 3 4 5 6 7 89 10 11 12 则依次打印出数字1、2、3、4、8、12、16、15、14、13、9、5、6、7、11、10。程序代码:#include <iostream>...原创 2018-03-19 22:20:10 · 111 阅读 · 0 评论 -
二进制中1的个数
题目: 请实现一个函数,输入一个整数,输出该函数二进制表示中1的个数。例如把9表示成二进制是1001,有2位是1。因此如果输入9,该函数输出2。分析: 如果一个整数不等于0,那么改整数的二进制表示中至少有一位是1。 (1) 先假设这个整数最右边是1,那么减去1时,最后一位变成0,而其他所有位都保持不变。例如1101 - 1 = 1100。 (2)然后假设这个整数的...原创 2018-03-13 17:55:03 · 122 阅读 · 0 评论 -
青蛙跳台阶
题目: 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级台阶总共有多少种跳法?分析: 当n为0时,一共有1种跳法 当n为1时,一共有1种跳法 当n>=2时: (1)假设最后一次跳1级台阶,则跳法等于n-1级台阶的跳法 (2)假设最后一次跳2级台阶,则跳法等于n-2级台阶的跳法 不难看出,此问题是一个斐波那契问题。解题代码参...原创 2018-03-13 16:33:16 · 151 阅读 · 1 评论 -
最小的k个数
题目:输入n个整数,找出其中最小的k个数。例如输入4、5、1、6、2、7、3、8这8个字,则最小的4个数字是1、2、3、4。 程序代码:#include <iostream>void ShiftValue(int *pArray, int iNode, int iLength){ int iTmp = pArray[iNo...原创 2018-03-23 10:27:34 · 103 阅读 · 0 评论 -
斐波那契数列
我们以从零开始的斐波那契为例实现斐波那契数列的求解, (0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025 121393 196418 317811 514229 832040 1346269 2178309 3524578 5702887 92274...原创 2018-03-13 14:21:43 · 1655 阅读 · 0 评论 -
从上往下打印二叉树
题目:从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印。 程序代码:#include <iostream>#include <string>#include <queue>struct BinaryTreeNode{ int data; BinaryTreeNode *leftC...原创 2018-03-20 17:00:50 · 157 阅读 · 0 评论 -
二叉搜索树的后序遍历序列
题目:输入一个整数数组,判断该数组是不是某二叉树的后序遍历结果。如果是则返回true,否则返回false。假如输入的数组的任意两个数字都互不相同。 程序代码:#include <iostream>#include <stding>#include <queue>// 函数名称:CreateBinaryTr...原创 2018-03-20 17:05:30 · 341 阅读 · 0 评论 -
TCP/IP报文格式详解
1.端口号 标记同一台计算机上的不同进程 源端口:占2个字节,源端口和IP的作用是标记报文的返回地址。 目的端口:占2个字节,指明接收方计算机上的应用程序接口。 TCP报头中的源端口号和目的端口号同IP报头中的源IP和目的IP唯一确定一条TCP连接。2.序号 占4个字节,是TCP可靠传输的关键部分。是本报文段发送的数据组的第一个字节的序号。 在TCP传输...原创 2018-09-13 19:22:29 · 17383 阅读 · 1 评论 -
decltype推导规则
(1)如果e是一个没有带括号的标记符表达式或者类成员访问表达式,那么decltype e就是e所命名的实体的类型。(如果e是一个被重载的函数,则会导致编译出错) (2)否则,假设e的类型为T,如果e是一个将亡值,那么decltype (e)为T&&。 (3)否则,假设e的类型是T,如果e是一个左值,那么decltype (e)为T&。 (4)否则,假...原创 2018-08-23 09:00:46 · 397 阅读 · 0 评论 -
C++多线程
1 基本概念计算机进程: 在计算机操作系统中,进程是指当可执行文件运行时,系统所创建的内核对象。 计算机线程: 线程是计算机中最小的执行单元。 同步: 不同进程间的若干程序段,它们的运行必须严格按照规定的某种次序来运行,这种先后次序依赖于要完成的任务。如果用对资源的访问来定义的话,同步是指在互斥的基础上,通过其它机制实现访问者对资源的有序访问。 互斥: 散布在不同进程之间的若干程...原创 2018-04-19 12:08:06 · 316 阅读 · 0 评论 -
Linux常用命令汇总
ping:检查一台主机的网络层是否连通tracert:跟踪路由,用于确定 IP 数据包访问目标所采取的路径telnet:远程控制Web服务器ipconfig:显示IP地址,子网掩码,默认网关等信息...原创 2018-08-17 09:17:15 · 155 阅读 · 0 评论 -
计算机网络常识
IPv4 IPv4地址是一个32比特的二进制数,用于标识IP网络中的一个主机或路由器,是Internet网络的统一寻址机制。IPv4地址是分层地址,主要分为NetID和HostID两部分,即网络域和主机域。 IPv4地址空间可以划分为A、B、C、D和E五类,并规定A、B、C三类可以分配给主机使用,D类地址作为组播地址,E类地址保留。同时约定了A、B、C三类地址的网络域与主机域分别占用的...原创 2018-08-17 08:46:15 · 309 阅读 · 0 评论 -
C++类
抽象基类 含有纯虚函数的类是抽象基类。抽象基类负责定义接口,并没有具体实现。抽象类不能被实例化(不能创建对象),通常是作为基类供子类继承,子类中重写虚函数,实现具体的接口。...原创 2018-08-16 20:52:21 · 250 阅读 · 0 评论 -
C++指针大全集
int *a[10]; // 指针数组,定义了一个包含10个元素数组,每个元素指向一个int*的地址int (*b)[10]; // 数组指针,指向一个包含10个数组的地址,每个元素指向一个int值int (*f)(); // 函数指针,没有输入参数,返回值为int类型...原创 2018-08-16 20:46:05 · 263 阅读 · 0 评论 -
C++运算符系列详谈
C++运算符重载可以被重载的运算符+-*/%^&|~!’=<><=>=++- -<<>>==!=&&||+=-=/=%=^=&=|=*=<<=>>=[]()->->*newnew[]deletedelet原创 2018-08-16 17:36:05 · 143 阅读 · 0 评论 -
调整数组顺序使奇数位于偶数前面
题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序。使得所有奇数位于数组的前半部分。所有偶数位于数组的后半部分。 程序代码:#include <iostream>void ReOrder(int *pData, int length, bool (*func)(int)){ if (pData == NULL || leng...原创 2018-03-14 16:45:41 · 125 阅读 · 0 评论 -
树的子结构
题目:树的子结构 题目:输入两棵二叉树A和B,判断B是不是A的子结构。 程序代码:#include <iostream>struct BinaryTreeNode{ int data; BinaryTreeNode *leftChild; BinaryTreeNode *rightChild;};void ...原创 2018-03-19 14:42:24 · 125 阅读 · 0 评论 -
旋转数组的最小数字
题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转,输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素,例如数组{3, 4, 5, 1, 2}为{1, 2, 3, 4, 5}的一个旋转,该数组的最小值为1.解题代码:#include <iostream>int MinInOrder(int *numbers, int index1, i...原创 2018-03-13 10:44:50 · 113 阅读 · 0 评论 -
操作给定的二叉树,将其变换为源二叉树的镜像。
#include <iostream>struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};class Solution {...原创 2018-03-13 09:48:10 · 516 阅读 · 0 评论 -
空类型求sizeof
定义一个空的类型,里面没有任何成员变量和成员函数,对该类型求sizeof,得到的结果是多少?答案:1 空类型的实例中不包含任何信息,本来求sizeof应该是0,但是当我们声明该类型的实例的时候,它必须在内存中占有一定的空间,否则无法使用这些实例。至于占用多少内存,由编译器决定。Visual Studio中每个空类型的实例占用1字节的空间。如果在该类型中添加一个构造函数和析构函数,...原创 2018-03-12 10:07:53 · 325 阅读 · 0 评论 -
面试官精谈
1 面试官谈基础知识: 1 “C++基础知识,如面向对象的特性、构造函数、析构函数、动态绑定等,能够反应出应聘者是否善于把握问题本质,有没有耐心深入一个问题,另外还有常用的设计模式,UML图等,这些都能体现应聘者是否有软件工程方面的经验。–王海波(Autodesk,软件工程师)” 2 对基础知识的考察我特别重视C++中对内存的使用管理,我觉得内存管理是C++程序员特别要注意的,因...转载 2018-03-12 09:50:40 · 259 阅读 · 0 评论 -
C++与类型转换相关的关键字
C++一共有四种与类型转换相关的关键字,分别为:(1): static_cast, (2): dynamic_cast, (3): const_cast (4): reinterpret_cast 它们的代码格式统一为: cast-name < type > (expression); 其中cast-name是转换方式关键字,type是转换的目标类型,expressio...转载 2018-03-11 22:54:12 · 1442 阅读 · 3 评论 -
合并两个排序的链表
题目:输入两个递增排序的链表,合并这两个链表并使新链表的结点仍然是按照递增排序的。 程序源码如下:#include <iostream>struct ListNode{public: ListNode() { data = 0; } int data; ListNode *next;...原创 2018-03-17 10:02:13 · 262 阅读 · 0 评论 -
new和malloc的区别
最大的区别就是:new/delete 是运算符,malloc/free是函数 malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。对于非内部数据类型的对象而言,仅用malloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是...转载 2018-03-16 21:38:57 · 139 阅读 · 0 评论 -
求链表的中间结点
题目:如果链表的结点总数为奇数,则返回中间结点;如果结点的总数为偶数,则返回中间结点的任意一个。 程序代码:#include <iostream>struct ListNode{ int iData; ListNode *pNext;};void PrintList(ListNode* pHead)...原创 2018-03-14 19:33:40 · 350 阅读 · 0 评论 -
链表中倒数第k个结点
题目:输入一个链表,输出该链表中倒数第k个结点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾结点是倒数第1个结点。例如一个链表有6个结点,从头结点开始它们的值一次是1,2,3,4,5,6.这个链表的倒数第3个结点是值为4的结点。 链表结点定义如下:struct ListNode{ int iValue; ListNode *...原创 2018-03-14 19:14:26 · 157 阅读 · 0 评论 -
复制构造函数的参数传递规则
首先给出下面一段代码:#include <iostream>class A{private: int value;public: A(int n){value = n;} A(A other){value = other.value;} void Print(){std::cout << value << std...原创 2018-03-12 10:44:42 · 816 阅读 · 0 评论 -
c++相关书籍推荐
《Effective C++》:这本书很适合在面试之前突击C++。这本书列举了使用C++经常出现的问题及解决这些问题的技巧。该书提到的问题也是面试官很喜欢问的问题。《C++ Primer》:读完本书,就会对C++的语法有全面的了解。《Inside C++ Object Model》:这本书有助于我们深入了解C++对像的内部。读懂这本书后很多C++难题都会变的很容易。 《The C++ Pr...原创 2018-03-12 10:51:53 · 350 阅读 · 0 评论 -
赋值运算符函数
考点剖析: 1. 是否把返回值的类型声明为该类型的引用,并在函数结束前返回实例自身的引用(即*this)。只有返回一个引用,才可以允许连续赋值。否则如果函数的返回值是void,应用就该赋值运算符不能做连续赋值。假设有3个CMyString的对象:str1、str2和str3,在程序中语句str1=str2=str3将不能通过编译。 2. 是否把传入的参数的类型声明为常量引用。如果传入的参数不是...原创 2018-03-12 11:07:11 · 195 阅读 · 0 评论 -
企业员工年龄排序
题目:已知企业所有员工得年龄,请将所有员工得年龄从小到大排序。 程序代码:#include <iostream>void SortAge(int age[], int num){ int indexAge[100] = { 0 }; // 存放0~99岁各个年龄得人数 int index = 0; ...原创 2018-03-13 07:35:53 · 505 阅读 · 0 评论 -
快速排序算法代码实现
1 算法介绍快速排序是一个“交换类”的排序,以军训排队为例,教官说:“第一个同学出列,其他人以他为中心,比他矮的全排到他的左边,比他高的全排他右边。”这就是一趟快速排序。可以看出,一趟快速排序是以一个“枢轴”为中心,将序列分成两部分,枢轴的一边全是比它小(或者小于等于)的,另一边全是比他大(或者大于等于)的。2 执行流程原始序列: 49 38 65 97 76 13 2...原创 2018-03-12 21:14:23 · 35734 阅读 · 6 评论 -
用两个队列实现栈
#include <iostream>#include <queue>template<typename T>class CStack{public: CStack(){} ~CStack(){} void push(const T& data) { if (que1.size() > 0)...原创 2018-03-12 19:12:51 · 153 阅读 · 0 评论 -
用两个栈实现队列
#include <iostream>#include <stack>template <typename T>class CQueue{public: CQueue(){ } ~CQueue(){ } void push(const T& data) { stack1.push(data)...原创 2018-03-12 19:02:11 · 107 阅读 · 0 评论 -
重建二叉树
**题目:给出了某二叉树的前序遍历和中序遍历结果,请重建二叉树。 范例: 前序遍历:1, 2, 4, 7, 3, 5, 6, 8 中序遍历:4, 7, 2, 1, 5, 3, 8, 6 二叉树结构为:** 解题代码:#include <iostream>struct BTNode{ int data; BTNode *lchild; ...原创 2018-03-12 18:45:20 · 194 阅读 · 0 评论 -
从尾到头打印链表
题目:输入一个链表的头结点,从尾到头反过来打印出每个结点的值 解题思路: 首先遍历链表,然后将结点依次存入栈中,然后再通过栈打印结点信息。 代码如下:#include <iostream>#include <stack>struct ListNode{ int data; ListNode *next;};// 尾插法建立链表vo...原创 2018-03-12 16:42:45 · 113 阅读 · 0 评论 -
替换空格
题目:实现一个函数,把字符串中的每个空格替换成%20,例如输入“We are happy”, 则输出“We%20are%20happy”。 解题代码:#define _CRT_SECURE_NO_WARNINGS#include <iostream>void RepalceBlank(char str[], int len){ int n = 0; ...原创 2018-03-12 16:20:55 · 108 阅读 · 0 评论