![](https://img-blog.csdnimg.cn/20190927151043371.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
c/c++算法题目汇总
常见面试,算法题目总结
孙仲谋111
这个作者很懒,什么都没留下…
展开
-
c++实现求二叉树的最大宽度
【代码】c++实现求二叉树的最大宽度。原创 2023-07-26 22:43:38 · 120 阅读 · 0 评论 -
c++学习笔记-----const指针
1.指向常量的指针:在指针定义语句的类型前加const,表示指向的对象是常量。const int a = 78;const int *pi = &a;*pi = 89; //错误做法,不能修改指针指向的值pi = &b; //ok,指针值可以修改,可以将另一个常量值b的地址赋给pipi = &c; //ok,指针值可以修改,可以将一个变量值c的地址赋给pi指针原创 2017-07-05 07:41:37 · 322 阅读 · 0 评论 -
offer面试题----3(赋值运算符函数的编写)
如下为类型CMyString的声明,请为该类型添加赋值运算符函数。 class CMyString { public: CMyString(char * pData = NULL); CMyString(const CMyString & str); ~CMyString(void); private: char * m_pDa原创 2017-07-19 07:32:10 · 314 阅读 · 0 评论 -
offer面试题----5----二维数组中查找
1 2 8 9 2 4 9 12 4 7 10 13 6 8 11 15 在上面的类似的二维数组中,每行递增排序,每列递增排序,如果在这个数组中查找7,则返回true,查找5则返回false.请编写判断数组中是否有该数字:思想: 从最右边的列的第一个元素开始判断,这样缩小判断范围:代码如下: bool Find(int *matrix,int rows,int c转载 2017-07-19 08:10:29 · 287 阅读 · 0 评论 -
c++中输入字符串
在c++中,如果用cin这个输入流来录入字符串,那么有缺点,就是遇到空格会自动的跳到下一个变量来与之对应, 可以看到,直接忽略了空格后面的world 如果想要完整的输入带空格的字符串,有两种方法,一种是用c++里面的string变量来存放字符串,而且还要用对应的getline()函数来对应,对应函数需要包含的头文件是sstream,如下是第一种方案: 第二种方法是用c语言中的get原创 2017-07-23 14:53:47 · 723 阅读 · 0 评论 -
链表基本操作
向链表中插入节点的函数操作 struct ListNode { int data; ListNode *next; }; void add_to_tail(ListNode **pHead,int value) { ListNode *pNew = new ListNode(); pNew->data = value; pNew->next原创 2017-07-23 17:00:35 · 276 阅读 · 0 评论 -
offer面试题---根据前序遍历和中序遍历的顺序输出二叉树
根据前序遍历可以找到根节点,根据中序遍历顺序中根节点的位置可以看出左子树的部分和右子树的部分,此时这种判断方法是递归的,可以依次判断各个树的结构。struct BinaryTreeNode { int value; BinaryTreeNode *left; BinaryTreeNode *right; };以上是二叉树结构体定义; 下面是构建方法BinaryTreeNode * Con原创 2017-07-24 13:29:03 · 710 阅读 · 0 评论 -
memset函数用法
memset函数使用详解使用memset函数需要包含头文件string.h 今天做题卡在MEMSET函数的使用上了,本来以为int a[100]; memset(a, MAX,sizeof(a));就是将a数组全部赋值为MAX,现在才知道他的填充是以字节为单位,一般用于对字符型变量的初值进行赋值.更详细的解说见百度百科 --> http://baike.baidu.com/view/982转载 2017-07-25 08:04:26 · 395 阅读 · 0 评论 -
offer面试题----打印1到最大的n位数
//这个函数用于输出位数为N的字符串数组,由于n的位数可能非常大,所以需要采用这种字符串数组的方式来进行运算 void printNumber(char *number) { int n = strlen(number); bool Beginwith0 = true; for(int i = 0;i < n; i++) { if(Beg原创 2017-07-25 21:50:22 · 279 阅读 · 0 评论 -
offer面试题-----链表反转
ListNode * ReverseList(ListNode *pHead) { ListNode *pReversedHead = NULL; ListNode *pNode = pHead; ListNode *pPrev = NULL; while(pNode!=NULL) { ListNode *pNext = pNod原创 2017-07-25 22:47:46 · 265 阅读 · 0 评论 -
offer面试题-----两个升序链表的合并
ListNode * Merge(ListNode *pList1,ListNode *pList2) { ListNode *pMergedList = NULL; if(pList1 == NULL) pMergedList = pList2; if(pList2 == NULL) pMergedList = pList1;原创 2017-07-25 23:00:00 · 393 阅读 · 0 评论 -
判断树的子结构
判断二叉树B是否是二叉树A的子结构bool HasSubTree(BinaryTreeNode *root1,BinaryTreeNode *root2) { bool result = false; if(root1!=NULL&&root2!=NULL) { if(root1->value == root2->value) result = D原创 2017-07-25 23:26:31 · 272 阅读 · 0 评论 -
offer面试题------求二叉树的镜像
void Mirror(BinaryTreeNode *root) { if(root==NULL) return; if(root->left == NULL&& root->right == NULL) return; BinaryTreeNode *temp = root->left; root->left = ro原创 2017-07-26 07:34:25 · 330 阅读 · 0 评论 -
顺时针打印矩阵元素
void printMatrix(int **numbers,int columns,int rows) { if(numbers==NULL||columns<0||rows<0) return; int start = 0; while(start*2原创 2017-07-26 21:28:19 · 541 阅读 · 0 评论 -
offer面试题二-----寻找链表的倒数第K个节点
大致思路是: 首先用到两个指针,第一个指针先走k-1个节点,第二个指针此时指向链表头,然后用while循环,两个指针分别向后移动,直到开始的那个指针走到链表尾,此时第二个指针所指的节点即倒数第k个节点:在这其中需要对边界值进行判断,如果节点少于k个,或者输入的k的值为0,这种意外情况也需要考虑。ListNode * FindKthToTail(ListNode * pListHead,unsign原创 2017-07-18 07:52:38 · 297 阅读 · 0 评论 -
offer面试题----1(字符串转换成整数)
offer面试题一: 将输入的字符串转换成整数: char *str = “34567”; int sum = 0;while(*str != 0) { sum = sum*10 + (*str-‘0’); str++; } 上面的代码中最关键的部分就是sum = sum*10 + (*str-‘0’); 这段中用while循环,每次将原创 2017-07-18 07:39:45 · 420 阅读 · 0 评论 -
c++学习笔记-----引用
引用是个别名,当建立引用时,程序用另一个变量的名字来初始化它,从那个时候起,引用作为目标的别名而使用,对引用的改动实际就是对目标的改动。引用不是值,不占存储空间,声明引用时,目标的存储状态不会改变,所以既然定义有具体分配空间的含义,引用就是只有声明,没有定义。原创 2017-07-07 08:26:28 · 504 阅读 · 0 评论 -
排序算法----插入排序算法
插入排序算法的思想是采用n-1趟循环,第一趟循环将第二个数插入到第一个数组成的子队列中, 第二趟循环将第3个数插入到前2个已经排好序的子队列中, 第i趟循环将第i+1个数插入到前i个已经排好序的子队列中。。。。。。源代码如下:void insert_sort(int a[],int n){int index,inserter;for(int i =原创 2017-07-02 08:18:12 · 272 阅读 · 0 评论 -
排序算法-----快速排序简单介绍
快速排序的思想就是采用分治的思想,先选定一个比较的基准元素,一般选择数组中的第一个元素,然后分别以最左边的元素,下标为0和最右边的元素下标为n-1,分别从左边和右边依次用下标从中间靠拢,期间分别与基准元素比较,如果分别比之小和比之大,则下标移动,否则两者都停止,交换元素,继续,这趟循环直到下标大小相同,随后便将基准元素放入到最终下标位置处,这便是其中的一次循环,经过这次循环,左子列的数都比这个基准原创 2017-07-02 08:44:17 · 262 阅读 · 0 评论 -
约瑟夫环问题
int joseph(int a[],int n,int m){ for(int i = 0;i a[i] = 1; int sum = n; int start = 0; int count = 0; while(sum>=2) { count = 0; while(count原创 2017-07-03 08:25:46 · 234 阅读 · 0 评论 -
矩阵乘法算法
矩阵相乘算法采用了3层循环,关键是输入二维数组时的入参时,要注意二维数组的第二个参数的大小要固定给出具体的值。int add_matrix(int a[][4],int arow,int acol,int b[][5],int brow,int bcol,int c[][5],int crow,int ccol){ if(acol!=brow)原创 2017-07-04 07:51:20 · 595 阅读 · 0 评论 -
c++学习笔记----malloc函数
1.对于malloc函数来说,如果在堆内存中没有找到足够的内存供分配,那么此时就会返回空指针NULL。原创 2017-07-05 07:31:31 · 377 阅读 · 0 评论 -
c++学习笔记----指针函数
返回指针的函数称为指针函数。指针函数不能将它内部具有局部作用域的数据地址作为返回值,可以返回堆地址、全局或者静态变量地址、但不能返回局部变量地址。原创 2017-07-06 07:17:04 · 344 阅读 · 0 评论 -
c++学习笔记----void指针
void指针是空类型指针,它不指向任何类型,即void指针仅仅是一个地址,所以空类型指针不能进行指针运算,也不能进行间接引用,因为指针运算和间接引用都需要指针的类型信息。由于其它指针都包含有地址信息,所以将其它指针的值赋给空类型指针是合法的,反之,将空类型指针赋给其它类型指针则不被允许除非进行类型转换。原创 2017-07-06 07:19:17 · 430 阅读 · 0 评论 -
c++学习笔记------memcpy函数
memcpy()函数在头文件mem.h中,功能是从源src中拷贝n个字节到目标dest中char src[10] = "*********"; char dest[10]; char *pc = (char *)memcpy(dest,src,10); cout原创 2017-07-06 07:27:45 · 295 阅读 · 0 评论 -
c++学习笔记-----字符数组和字符串常量
字符串常量的类型是指向字符的指针,它与字符数组是同属一种类型,字符串常量在内存中以‘\0’结尾,这种类型的字符串成为c字符串。字符串常量通常存放在内存data区中的const区,而字符数组根据其数据存储特点放在相应位置,如果字符数组是全局变量,就存放在内存data区中的全局或者静态区如果是局部变量,那么就存放到栈区当编译器遇到一个字符串常量时,就把它放到字符串池中(data原创 2017-07-06 07:48:18 · 766 阅读 · 0 评论 -
c++学习笔记-----函数指针
通过typedef来简化函数指针typedef int (*FUN)(int a,int b); //声明FUN是一个函数指针类型Fun funp; //funp为一个返回整型和两个整数形参的函数指针原创 2017-07-06 08:27:26 · 305 阅读 · 0 评论 -
c++学习笔记-----qsort通用排序函数
其实这个qsort函数运用的原理就是依赖最后一个形参传入编程人员自己构造的函数功能的函数指针,最后进行比较也会按照编程人员设计的函数来进行比较。要想用到qsort函数,就需要包含stdlib.h中,qsort函数的原型如下:void qsort(void *, size_t nlem , size_t width , int (*fcmp) (原创 2017-07-07 07:37:24 · 478 阅读 · 0 评论 -
c++学习笔记-----函数指针
通过typedef来简化函数指针typedef int (*FUN)(int a,int b); //声明FUN是一个函数指针类型Fun funp; //funp为一个返回整型和两个整数形参的函数指针原创 2017-07-07 07:09:34 · 388 阅读 · 0 评论 -
排序算法-----冒泡排序简单介绍
冒泡排序是一种很简单的排序方法,思想主要是对于有n个数的数组,采用n-1趟遍历,每趟遍历选出一个最大值或者最小值放入到最终的位置,对于第i趟遍历,参与比较的元素个数是n-i个,其余i个是已经放入到最终位置的元素,这种算法采用了两层for循环。以下是源代码:void bubble_sort(int a[],int n){int i,j,temp;for(i = 1 ;i{原创 2017-07-02 07:49:51 · 277 阅读 · 0 评论