- 博客(58)
- 收藏
- 关注
原创 C++----string类(模拟实现)
string类#define _CRT_SECURE_NO_WARNINGS #include <iostream>#include <assert.h>using namespace std;namespace zyf { class Mystring { public: typedef char* iterator; iterator begin(...
2020-05-07 18:21:39
212
1
原创 C++----模板(Base)
泛型编程 eg. 实现通用的交换函数void Swap(int& left, int& right) { int temp = left; left = right; right = temp;}void Swap(double& left, double& right) { double tem...
2020-04-04 02:47:06
750
原创 C++----内存管理及基本数据类型系统内存分配
内存分布 在C++中,内存区分为5个区,分别是堆、栈、自由存储区、全局/静态存储区、常量存储区;在C中,C内存区分为堆、栈、全局/静态存储区、常量存储区。C内存分布BSS段: 用来存放程序中未初始化的全局变量。BSS是英文Block Started by Symbol的简称。BSS段属于静态内存分配。数据段:用来存放程序中已初始化的...
2020-03-28 14:49:51
454
原创 C++----类与对象(forgather)
构造函数构造函数体中的语句只能将其称作为赋初值,而不能称作初始化。因为初始化只能初始化一次,而构造函数体内可以多次赋值。构造函数体赋值初始化;初始化列表;explicit关键字class {public: A(int a = 0) //初始化列表,可缺省,缺省不是初始化 :_a(a) {}private: int _a;};class B {public: B(int ...
2020-03-26 20:33:51
144
原创 Linux----进程间通信(System V)
system V共享内存创建共享内存&通信流程现在物理内存中开辟一段空间各个进程间通过页表结构将物理内存映射到自己的虚拟地址空间当中的共享区戈各个进程间的通信时通过修改自己的虚拟地址空间当中的共享区的地址来完成的特性:不同的进程对共享空间内存区进行读的时候,并不会抹除物理内存当中的值创建共享内存&使用共享内存的接口创建共享内存:int shmget(key_t ...
2020-03-21 11:49:39
179
原创 C++----默认成员函数
构造函数 构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,保证每个数据成员都有初始值,并且在对象的生命周期内只调用一次。它并不开空间创建对象,而是初始化对象。特性:#include<iostream>using namespace std;class Date {private: i...
2020-03-19 19:37:13
145
原创 C++----类与对象(Base)
C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。类定义及作用域C语言中,结构体中只能定义变量,在C++中,结构体还可以定义函数,而且更喜欢用class(默认私有)来代替struct(默认公有)。class Student { //声名,class为关键字,Stude...
2020-03-14 11:38:15
1449
原创 LinuxIO----基础
系统调用的文件操作一、接口open():打开文件: int open(const *pathname, int flags, mode_t mode);pathname: 要打开文件的路径+名称flags: 必须指定参数,O_RDONLY只读,O_WRONLY只写,O_RDWR读写; 可附加参数:O_CREAT打开文件不存在则创建,O_TRUNC打开文件后截断,O_APPEND以...
2020-03-04 20:46:48
261
原创 Linux进程----环境变量与程序地址空间
环境变量一、基本概念一般是指在操作系统中用来指定操作系统运行环境的一些参数;环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性。二、常见环境变量PATH:查看可执行程序的环境变量;HOME:指定用户的主工作目录;SHELL:保存当前所使用的shell得到的环境变量,它的值通常是/bin/bash;LD_LIBRARY_PATH:程序运行时,库文件的搜索路径的环境变量...
2019-12-30 19:00:11
591
1
原创 C----有效的括号
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合;左括号必须以正确的顺序闭合;空字符串认为是有效字符串。示例输入: "()[]{}" 输入: "(]" 输入: "([)]" 输入: "{[]}"输出: true ...
2019-12-27 15:34:24
127
原创 C----复制带随机指针的链表
给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。要求返回这个链表的深拷贝。
2019-12-22 17:34:00
116
原创 C----空格替换
将字符串中的空格替换为"%20"#include <stdio.h>void replaceSpace(char *str, int length) { if (str == NULL || length < 0) return; int i = 0; int oldnumber = 0; int replacenumber = 0; while (str[i]...
2019-12-18 16:09:11
113
原创 C----数组形式的整数加法
对于非负整数 X 而言,X 的数组形式是每位数字按从左到右的顺序形成的数组。例如,如果 X = 1231,那么其数组形式为 [1,2,3,1]。(给定非负整数 X 的数组形式 A,返回整数 X+K 的数组形式)示例: 输入:A = [2,1,5], K = 806 输入:A = [9,9,9,9,9,9,9,9,9,9], K = 1 输出:[1,0,2,1...
2019-12-07 23:46:13
161
原创 C----链表的插入排序
从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示)。每次迭代时,从输入数据中移除一个元素,并原地将其插入到已排好序的链表中。插入排序算法:插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。重复直到所有输入数据插入完为止。示例 1:输入: 4...
2019-12-03 00:11:10
221
原创 C----走向斐波那契数列
Fibonacci数列是这样定义的:F[0] = 0,F[1] = 1;for each i ≥ 2; F[i] = F[i-1] + F[i-2]即:0, 1, 1, 2, 3, 5, 8, 13, …,这些数称为Fibonacci数。给一个N,想让其变为一个Fibonacci数,每一步你可以把当前数字X变为X-1或者X+1,求最少需要多少步可以变为Fibonacci数。输入描述:输入为一个...
2019-12-01 19:33:05
130
原创 C----合并两个有序链表
将两个有序链表合并为一个新的有序链表并返回。 新链表是通过拼接给定的两个链表的所有节点组成的。示例: 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4/* Definition for singly-linked list. struct ListNode { int va...
2019-11-29 19:52:35
254
原创 C----环形单链表
一、给定一个链表,判断链表中是否有环为了表示给定链表中的环,我们使用整数pos来表示链表尾连接到链表中的位置(索引从0开始)。如果 pos 是 -1,则在该链表中没有环。/* Definition for singly-linked list struct ListNode { int val; ListNode *next; ListNode(in...
2019-11-29 19:38:58
125
原创 C----回文链表
请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?第一步:遍历链表,知道链表的长度,并找到中间节点(快慢指针实现);第二步:逆至前半段链表,使用两个指针,分别从头比较每一半的链表数值;需要注意的是链表长度可...
2019-11-29 19:38:42
176
原创 无头不循环单链表
头文件"Slist.h"#pragma once#include <stdio.h>#include <stdlib.h>#include <assert.h>typedef int DateType;typedef struct PlistNode{ DateType _date; struct PlistNode* _next;} Pli...
2019-11-24 14:45:39
132
原创 顺序表
头文件"seqlist.h"#pragma once#define _CRT_SECURE_NO_WARNINGS 1#include<windows.h>#include<cstdio>#include<malloc.h>#include<assert.h>#define SEQLIST_INIT_SIZE 8#define INC...
2019-11-15 23:31:19
161
原创 时间与空间复杂度
算法效率第一种是时间效率,被称为时间复杂度,表示一个算法的理论上的耗时,衡量的是一个算法的运行速度。第二种是空间效率,被称作空间复杂度,主要衡量一个算法所需要的额外空间。时间复杂度时间频度一个算法中,语句执行的次数,被称为时间频度T(n)大O符号:用于描述函数渐进行为的数学符号。存在某个辅助函数f(n),当n->∞时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T...
2019-11-15 12:28:18
103
原创 程序的编译
程序的翻译环境和执行环境第1种是翻译环境,在这个环境中源代码被转换为可执行的机器指令。第2种是执行环境,它用于实际执行代码。编译:.c —>.obj —>.exe1.预处理 展开头文件,宏替换,删除注释,条件编译2.编译 检查语法,生成汇编代码3.汇编 转换为二进制代码4.链接 合成可执行程序,寻找对应声名预处理:#define#define定义宏 ...
2019-11-02 21:19:33
185
原创 动态内存管理
void* malloc(size_t size); 向内存申请一块连续可用的空间,并返回指向这块空间的指针。如果开辟成功,则返回一个指向开辟好空间的指针;否则返回一个NULL指针,因此malloc的返回值一定要做检查。void* calloc(size_t num,size_t size);calloc与malloc的区别在于:calloc会在返回地址之前把申请的空间的每个字节初始化为全...
2019-10-25 22:59:11
159
原创 结构体
结构体(聚合类型)是一些值的集合,这些值称为成员变量。结构成员的类型可以是标量、数组、指针,甚至是其他结构体。typedef struct Stu{char name[20];//名字int age;//年龄char sex[5];//性别char id[20];//学号}Stu;//分号不能丢结构体变量的定义和初始化:#include<stdio.h>s...
2019-10-25 12:54:50
184
1
原创 字符函数和字符串函数
strlensize_t strlen ( const char * str );字符串已以’\0’ 作为结束标志,strlen函数返回的是在字符串中 ‘\0’ 前面出现的字符个数(不包含 ‘\0’ )。参数指向的字符串必须要以 ‘\0’ 结束。注意函数的返回值为size_t,是无符号的( 易错 )#include<stdio.h>int main(){ const c...
2019-10-21 17:32:34
267
原创 数组
一维数组:1.相同数据类型的集合,内存都是连续的,若不初始化数组,则默认值为随机值;数组整体赋值仅在初始化时有一次机会(数组和结构体都是聚合类型),且不能用赋值符将一个数组赋给另一个数组;若数组局部初始化,则其他数据默认值为0,在运行程序前编译时就确定内存大小,在运行时最大分配内存为1M/2M,数组地址由低地址向高地址(由栈顶指向栈底),存放局部变量分配先在高地址#include <st...
2019-10-18 00:18:12
144
原创 函数初始化、逆置、清空数组及退出程序
1.实现调用函数初始化、逆置、清空数组及退出程序:#include <stdio.h>#include<string.h>void init(int arr[], int len){ int i = 0; int num = 0; printf("初始化数组,请输入5个数:\n"); for (i = 0; i < len; i++) ...
2019-10-18 00:18:06
229
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人