C & C++
文章平均质量分 54
C语言基础,以及到C++的过度
Y-ANG
这个作者很懒,什么都没留下…
展开
-
22题:栈的压入、弹出顺序
题目描述输入两个整数序列,第一个序列表示栈的压入序列,请判断第二个序列是否是栈的弹出序列。假设压入栈的所有数字均不相等。例如序列1、2、3、4、5是某栈的压栈序列,序列4、5、3、2、1是该压栈序列对应的一个弹出序列,但4、3、5、1、2就不可能是该压栈序列的弹出序列。‘思路分析首先考虑这个问题肯定是需要一个辅助栈,方便后边讲思路,我们将压入序列称为pushV,弹出序列称为popV,按照pushV将原创 2017-06-29 12:28:20 · 3038 阅读 · 1 评论 -
二叉树的镜像
题目描述完成一个函数,输入一个二叉树,该函数输出它的镜像。二叉树结点定义如下:struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};原创 2017-06-19 14:50:23 · 976 阅读 · 0 评论 -
重建二叉树
题目描述:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建出如图所示的二叉树并输出它的头结点。 分析及实现:思路分析 根据二叉树前序遍历的特点(根-左-右),每次读取的第一个值一定是根节点,这样我们可以在中序遍历的序列中找到原创 2017-05-28 10:24:26 · 7535 阅读 · 4 评论 -
旋转数组的最小数字
题目描述:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小数组。例如数组{3,4,5,1,2}是数组{1,2,3,4,5}的旋转数组,该数组的最小值为1。思路解析:O(N)的算法 这种算法的思想就是遍历这个数组,由于这个数组是两部分有序的数组,因此遍历这个数组时当后一个数字小于前一个数字时,则后一个(即较小)一定为整个数组中最原创 2017-05-25 15:51:19 · 934 阅读 · 4 评论 -
替换空格
题目:请实现一个函数,把字符串中的每个空格替换成”%20”。例如:输入”we are happy.”,则输出”we%20are%20happy.”思路分析: 我们比较替换之前与替换之后的字符串长度,很明显,字符串长度增加了4,所以,第一点,将”we are happy.”用一个字符指针指向肯定不可行,那么就应该将其放入一个数组中。其次我们就应该考虑如何输出想要的结果。 1.题目没有给出要求原创 2017-03-07 16:55:36 · 1233 阅读 · 3 评论 -
关于C和c++中的文件结构
一、头文件 头文件用于保存程序生命的文件,后缀是".h" 1、头文件的内容包括 (1)头文件开头处的版权和版本声明 (2)预处理块 (3)函数和类结构声明等 2、对于头文件做出的一些规则和建议 规则一: 使用ifndef/define/endif预处理块——————防止头文件原创 2016-05-14 16:48:32 · 596 阅读 · 0 评论 -
c语言编写猜数字游戏
#include#include#includeint main(){ int num = 0; int ret = 0; srand((unsigned)time(NULL)); ret = rand()%100+1; //产生一个小于100的随机数 while(1) { printf("请输入一个数字>>\n"); scanf("%d",&n原创 2016-05-14 16:28:37 · 1251 阅读 · 0 评论 -
通讯录-静态实现
头文件: “Contact.h”#include#include#includeenum po{ EXIT, ADD, DELE, SER, MODIFY, DISPLAY, CLEAR, SORT};#define NAME_MAX 100#define SEX_MAX 5#define TELE_MAX 12#define ADDR_MAX原创 2016-05-14 16:31:03 · 858 阅读 · 0 评论 -
返回一个参数中二进制数中1的个数
#include#includeint _Count(int n){ int arr[30]; int i=0; int j=0; int m=0; while(n) { arr[i++]=n%2; n=n/2; j++; } for(i=0;i<=j;i++) { if((arr[i]^1)==0) m++; } return(m); }原创 2016-05-14 16:47:19 · 1036 阅读 · 0 评论 -
输出1-100的整数中出现数字9的次数
#include#includeint main(){ int i,count=0; for(i=0;i<100;i++) { if((i%10==9) || (i%10==0)) count++; } printf("%d\n",count); system("pause"); return 0;}原创 2016-05-12 22:09:10 · 625 阅读 · 0 评论 -
输出乘法口诀表
#include#includeint main(){ int i = 0; int j = 0; int m = 0; int num = 0; printf("enter a number:"); scanf("%d",&num); //确定要打印的行数 for(i=1;i<=num;i++) { for(j=1;j<=i;j++) { m=原创 2016-05-12 22:17:43 · 411 阅读 · 0 评论 -
如何变换两个变量的数值
一、创建第三个变量交换两个值 这种办法是最普通最直观的。#include#includeint main(){ int a=1,b=8; int c=0; c=a; a=b; b=c; printf("%d %d\n",a,b); system("pause"); return 0;}二、不创建第三个变量交换两个值 可以通原创 2016-05-12 22:54:35 · 976 阅读 · 0 评论 -
模拟三次密码输入
#include#include#include#includeint main(){ char *passwrd="123456"; char ch[10]; int i=0; for(i=0;i<3;i++) { printf("请输入密码:\n"); scanf("%s",ch); //判断输入的数字是否和原始密码相同 if(str原创 2016-05-12 23:08:23 · 625 阅读 · 0 评论 -
关于#define
一、#define1、仅仅作为标识符: #define作为标识符时是没有参数的2、作为宏: #define 作为宏与它作为标识符的区别就是宏有参数而标识符没有 例如:#define MAX(X,Y) ((X)>(Y)?(X):(Y))二、宏与函数的区别1、宏在使用时(编译阶段)会直接被替换掉(即简单的原创 2016-05-14 16:56:02 · 598 阅读 · 0 评论 -
怎样判断你的电脑是大端字节序还是小端字节序
简单来讲所谓的大端存储就是将高字节序的内容存在低地址处,那么,小端存储就是将低字节序的内容存在高地址处。 (图片做以解释)在计算机中,数据的是以其二进制补码的形式存储于计算机中的,上边又提到了大端存储和小段存储,但是,每台计算机的存储方式又是不一样 的,那么,怎么判断一台计算机是打断存储还是小段存储呢?!下面就来分装一个函数来实现此功能:原创 2016-05-14 17:13:29 · 8835 阅读 · 5 评论 -
字符串操作函数的模拟
要模拟库函数的实现,必须要搞清楚的是在程序调用中它的实现原理是什么,接下来就讲解几个字符串相关的函数,比如strcmp(),strncmp(),strcat(),strncat()......字符串函数主要包括受限制字符串函数与不受限制字符串函数,那么什么是受限制字符串函数与不受限制字符串函数呢?!简单来讲,不受限制字符串函数就是使用这些函数时,它们只是通过字符串结尾的NULL原创 2016-05-14 17:15:36 · 489 阅读 · 0 评论 -
字符串操作函数模拟之番外篇
一、strchr() 函数原型:char *strchr( const char *string, int c ); strchr() 函数查找字符在指定字符串中首次出现的位置,如果找到,就返回指定字符在已知字符串中最后一次开始出现的位置,找不到就返回NULL。例如:已知字符串“abdedef”,该函数返回“dedef”#include#include#in原创 2016-05-14 17:39:13 · 410 阅读 · 0 评论 -
内存操作函数memcopy和memmove
我们以前在拷贝一个字符串时只想到过strcpy()函数拷贝,但是这个函数在使用时存在一定的缺点,一方面它只能用来拷贝字符串并不能拷贝其他类型的数据,另一方面它只有在遇到'\0'时才结束拷贝,所以容易溢出。所以,就引入memcpy()这个内存操作函数。首先,先看一下二者的区别:memcpy:1.函数原型:void *memcpy( void *dest, const void原创 2016-05-21 15:22:35 · 740 阅读 · 0 评论 -
通讯录——文件版
在之前已经写过了动态版的通讯录,要将此改为文件版本,只需增加两个函数,一个函数是将每次输入的内容写入文件内,另外一个函数是在每次打开该程序时读入文件内容代码如下:"Contact.h"#define _CRT_SECURE_NO_WARNINGS#ifndef __CONTACT_H__#define __CONTACT_H__#include#include#inclu原创 2016-05-25 18:43:31 · 555 阅读 · 0 评论 -
通讯录——动态版
实现了静态版本以后,要实现动态增容版只要在之前的基础上增加增容函数和缩容函数即可,在此主要使用realloc函数实现。"Contact.h"#define _CRT_SECURE_NO_WARNINGS#ifndef _CONTACT_H__#define _CONTACT_H__#include#include#includeenum po{ EXIT, ADD,原创 2016-05-25 19:22:46 · 443 阅读 · 0 评论 -
c语言项目-注释转换
题目要求:要将全部的c语言风格的注释转换为c++风格的注释,如下图所示,需要将input.c文件经过注释转换程序转换为output.c文件所示分析:从input.c文件可以看书,每行开头遇见的内容有三种 // , /* ,其他代码。因此,这里就要分情况讨论。可以定义三个函数,分别处理NULL,C,C++对应状态。将 // 定义为CPP_STATE原创 2016-05-25 23:19:05 · 731 阅读 · 0 评论 -
冒泡排序及其优化
冒泡排序的基本思路是(以升序为例):每次将相邻两个数字进行比较,将小的数字放在大的前边。例如已知六个数字为9,8,5,4,2,0,第一次现将最前边的9和8进行调换,其次再将9和5进行调换......如图(只进行了两趟交换)如此进行下去,如果有n个数,就要进行n-1趟比较;在第一趟要进行n-1次交换,在第j次就要进行n-j次交换。void bubble_sort(int *p,i原创 2016-05-31 18:59:21 · 440 阅读 · 0 评论 -
const在c与c++中的不同地位
我们都知道,const关键字是防止某个变量被修改的,即限定这个变量是只读的。C和C++中应用const会使程序的健壮性更高一些。C和C++中,const的区别:一、const修饰一般变量在C中,const修饰一般变量是常变量,它具有变量属性,但同时,它又具有常性不可被修改。在C++中,加const修饰以后变量就是个常量,不可被修改。二、const修饰指针变量先回想一下我们以原创 2016-07-01 00:04:27 · 923 阅读 · 1 评论