- 博客(22)
- 收藏
- 关注
原创 引用计数的写时拷贝
提起写时拷贝,自然就得说到深浅拷贝的问题了,到底什么是深浅拷贝呢?深浅拷贝到底都做了什么?浅拷贝:浅拷贝是位拷贝,使俩个对象指向了同一块空间,并没有重新开辟一块新的空间。一个对象如果对这块空间进行了改变,则另一个对象也会跟着改变。深拷贝:深拷贝就是另外开辟一个空间出来,将原有的数据全部复制一份放到新的空间中,然后把新的空间交给你,经过深拷贝的对象
2017-12-01 17:38:45
297
翻译 STL库中的list的接口
STL库中的listassign() 给list赋值 back() 返回最后一个元素 begin() 返回指向第一个元素的迭代器 clear() 删除所有元素 empty() 如果list是空的则返回true end() 返回末尾的迭代器 erase() 删除一个元素 front() 返回第一个元素 get_allocator() 返回list的配置器 in
2017-12-01 11:43:58
285
原创 malloc/free和new/delete
malloc和free:malloc的职责就是负责内存的分配,使用malloc函数可以指定的申请一份想要申请的一份空间。 free负责内存的释放,它与malloc搭配使用,如果使用malloc函数申请了空间,但是在使用完毕后没有释放,则会产生内存泄漏,造成很严重的后果new和delete : new不仅仅能分配空间,它还会去调相应的析构函数。 delete和new搭配使用,
2017-11-17 18:01:45
286
原创 什么是this指针?this指针在背后默默的付出了什么?
1.类中的每个成员函数都有一个隐形的指针形式(构造函数除外,构造函数是一个特殊的成员函数,函数内没有this指针),在所有的成员函数中都有一个固定的名称,this指针是一个隐形的指针,它不需要且不允许使用者手动的传参。2.编译器会对成员函数进行处理,在对象调用成员函数时,对象地址做实参传递给成员函数的第一个形参指针。3.
2017-10-27 14:00:29
540
原创 类的4个默认成员函数和运算符重载
1.类的四个默认成员函数:⑴构造函数 ⑵析构函数 ⑶拷贝构造函数 ⑷赋值函数⑴构造函数是一种特殊的函数,它不需要用户来调用它,在创建对象时构造函数会自动执行。注意:构造函数的函数名必须与类名相同,不能任意命名。构造函数没有返回值,没有函数类型。构造函数的内部结构由用户自己来定义。构造函数分为:①带参数的构造函数 ⑵不带参数的构造函数 ⑶wanqua
2017-10-09 14:59:25
708
原创 一个链表的每个节点,有一个指向next指针指向下一个节点,还有一个rand指针指向这个链表中的一个随机节点或NULL,现在要求复制一个单链表来实现这个链表,返回复制后的新链表。
假设有List 为: 1 3 5 7 9List* phead为此链表的头结点typedef struct ComNode{int _data;struct ComNode* next;struct ComNode* rand;}ComNode;ComNode* BuyNode(Data x){ComN
2017-09-24 12:05:59
2095
原创 求两个链表是否相交,若相交,求交点(链表可能带环)
解题思路:1.判断两个链表是否带环,若两个链表一个带环一个不带环,不可能相交 2.若俩个链表都不带环,判断交点,前文已有 3.若俩个链表都带环,则有俩种情况,一种在环外相交,一种是在环内相交。需要分情况判断Data LoopList(List* phead){assert(phead);Li
2017-09-24 11:55:35
239
原创 判断俩个不带环的链表是否相交
思路:计算出两个单链表的长度,再使用较长的减去较短的,让较长的先走两个链表长度的差值的步数,然后俩个链表同时走,每走一步判断地址是否相等,若相等,则为交点,不相等则没有交点。void crossList(List* phead_1, List* phead_2){assert(phead_1);assert(phead_2);List* phead_1_1 = phead_1;
2017-09-24 11:50:00
248
原创 判断单链表是否带环?若带环,求环的长度,求环的入口点
判断是否带环解题思路,定义俩个一快一慢的指针,快指针一次走俩步,慢指针一次走一步,如果俩指针最终相遇,则带环,否则不带环。List* LoopList(List* phead){assert(phead);List* fast = phead; List* slow = phea
2017-09-24 11:47:58
186
原创 链表题_2
typedef int Data;typedef struct List{Data arrary;struct List* next;}List;List* BuyList(Data x){List* node = (List*)malloc(sizeof(List));node->next = NULL;node->arrary = x
2017-09-21 08:41:51
184
原创 链表题_1
typedef int Data;typedef struct List{Data arrary;struct List* next;}List;List* BuyList(Data x){List* node = (List*)malloc(sizeof(List));node->next = NULL;node->arrary = x
2017-09-21 08:37:08
171
原创 比较顺序表和链表的优缺点,说说它们分别在什么场景下使用?
顺序表:内存中地址连续,优点是随机访问比较便捷快速,创建也比较简单,随机查找比较方便,可以直接给出下标,排序也方便简单。 缺点是不够灵活,删除增加的工作量叫大,比较麻烦,长度不能实时变化 适用场景:适用于需要大量访问元素的 而少量增添/删除元素的程序单链表:内存中地址不是连续的,优点是插入删除比较方便,长度可以实时
2017-09-21 08:33:07
8921
原创 链表题_2
1.单链表实现约瑟夫环2.逆置/反转单链表3.单链表排序(冒泡排序)void BubbleSort(List** pphead){int count = 0;List* start = NULL;List* cur = *pphead;while (cur){count++;cur = cur->next;}while (
2017-09-21 08:18:14
183
原创 使用C语言实现单链表
List.h文件#ifndef __LIST_H__#define __LIST_H__#include#include#includetypedef int Data;typedef struct List{Data arrary;struct List* next;}List;List* BuyList(Data x);
2017-09-16 19:33:02
364
原创 C语言实现静态顺序表
SepList.h文件#ifndef __TEST_H__#define __TEST_H__#include#include#include#include#define N 100typedef int DataType;typedef struct SepList
2017-09-16 19:23:51
375
原创 编写一个可容纳1000人的通讯录(【结构体】静态通讯录的实现)
实现一个通讯录:通讯录可以用来存储1000个人的信息,每个人的信息包括:姓名,性别,年龄,电话,地址。功能:1.添加联系人信息2.删除指定联系人的信息3.查找指定联系人信息4.修改指定联系人信息5.显示所有联系人的信息6.清空所有联系人7.以名字排序所有联系人contact.h文件#ifndef __CONTACT_H_#define __C
2017-08-14 14:24:43
322
原创 模拟库函数strchr和strrstr
函数名: strchr功能:查找字符串s中首次出现字符c的位置说明:返回首次出现c的位置的指针,返回的地址是字符串在内存中随机分配的地址再加上你所搜索的字符在字符串位置,如果s中不存在c则返回NULL。char* my_strchr( char* arr,const char member){assert(arr);while (*arr){if (*arr ==
2017-08-14 14:12:37
351
原创 函数调用过程解析图
main函数及Add函数的调用解析图#include#includeint Add(int _x, int _y){int ret = 0;ret = _x + _y;return ret;}int main(){int x = 10;int y = 20;int ret = 0; ret=Add(x, y);printf("%
2017-08-06 15:53:43
4615
原创 关于二维数组
1.二维数组的创建与初始化对数组的定义:数组类型+数组名+【常量表达式】【常量表达式】例如:int arr[3][4] //表示整型类型的二维数组,数组名为arr,数组大小为四行五列⑵在定义二维数组的同时对二维数组中每一个元素赋值,称为二维数组的初始化①分行初始化例如:int arr[3][4]={{1,2,3,4},{,5,6,7,8},{9,10,11,12}};上述
2017-07-14 18:36:09
387
原创 关于一维数组
1:一维数组的定义和初始化⑴使用一维数组前,需要对一维数组定义,即通知计算机,由哪些数据组成数组,数组中有多少个元素,属于哪个数组类型。 对数组的定义:数组类型+数组名+【常量表达式】 例如:int arr【10] //表示为整型数组,数组名为arr,数组内有10个元素 ⑵在定义一维数组的同时给数组每一个元素赋值,称为一维数组的初始化。 以i
2017-07-13 17:29:44
553
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人