- 博客(12)
- 资源 (1)
- 收藏
- 关注
原创 线性表
线性表的基本概念定义:具有相同数据类型的n (n>=0)个数据元素的有限序列特点:元素类型都相同,所以每一个元素占有相同大小的存储空间;元素个数有限;元素具有逻辑顺序性,序列中各元素排列有先后顺序;线性表的基本操作//表的建立和销毁InitList(&L):初始化表,构造一个空的线性表L,分配内存空间DestroyList(&L):销毁操作。销毁线性表,并释放L所占用的内存空间//增、删ListInsert(&L,i,e):插入操作。在表中的第
2020-09-20 16:27:32
225
原创 习题11-8 单链表结点删除 (20分)
本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中所有存储了某给定值的结点删除。链表结点定义如下:struct ListNode { int data; ListNode *next;};函数接口定义struct ListNode *readlist();struct ListNode *deletem( struct ListNode *L, int m );函数readlist从标准输入读入一系列正整数,按照读入顺序建立单链表。当读到−1时表示输入结束,函数应返
2020-08-31 22:24:57
271
原创 习题11-7 奇数值结点链表 (20分)
本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中奇数值的结点重新组成一个新的链表。链表结点定义如下:struct ListNode *readlist();struct ListNode *getodd( struct ListNode **L );函数readlist从标准输入读入一系列正整数,按照读入顺序建立单链表。当读到−1时表示输入结束,函数应返回指向单链表头结点的指针。函数getodd将单链表L中奇数值的结点分离出来,重新组成一个新的链表。返回指向新链表头结点的指针,同时将L
2020-08-31 22:18:53
250
原创 字符串的格式化输入与输出
字符串的格式化输入与输出1.gets() 和 puts()gets()#include <stdio.h>char *gets(char *s);功能:从标准输入读入字符,并保存到指定的内存空间,直到出现换行符或读到文件结尾为止。参数:s 字符串首地址返回值: 成功 读入的字符串 失败 NULLputs() #include<stdio.h> int puts(const char *s); 功能:标准设备输出s字符串,在输出
2020-08-23 17:15:44
699
原创 双指针-简单
题目:345.反转字符串中的元音字母编写一个函数,以字符串作为输入,反转该字符串中的元音字母。Given s = "leetcode", return "leotcede".使用双指针,一个指针从头向尾遍历,一个指针从尾到头遍历,当两个指针都遍历到元音字符时,交换这两个元音字符。翻转字符串中的元音字母,元音字母有五个a,e,i,o,u,需要注意的是大写的也算,所以总共有十个字母。我们写一个is_Vowel的函数来判断当前字符是否为元音字母,如果两边都是元音字母,那么我们交换,如果左边的不是,向
2020-08-06 12:23:45
202
原创 二维数组与数组指针详解
二维数组深入理解二维数组首先定义一个二维数组int a[2][3]={{1,2,3},{4,5,6}};#or int a[2][2]={1,2,3,4};新的理解:我们可以这样认为,a可以看作是一个一维数组,包含2个元素,每个元素恰好是包含3个整型的元素,a这个名字的值成了指向一个包含3个整型元素的数组的指针(你学过数组指针就该知道,他们是一个道理,后面我会讲解数组指针)然后开始讨论二维数组和数组名的关系a表示的是整个数组的首地址,a[0]表示的是第一行的首地址,这两者在数值上是一
2020-07-26 18:18:53
4537
原创 指针与数组及const修饰指针
指针及指针与数组及const修饰指针什么是指针?指针是一个值为地址的变量,形如int* p=&a;通过这个简单的例子我们可以清楚指针的四个部分:指针的类型int *、指针所指向数据的类型int、指针的值&a即a的地址、指针本身所占据的内存区。而机器中地址的长度是固定的,所以指针的长度是确定的,也就是说,int * 、char *、double *类型的指针都是相同长度的内存大小,用函数sizeof(p)测一下,64位下指针占据8个字节的长度。使用指针这里只谈谈最基础的指针初始化、赋
2020-07-21 12:07:04
558
原创 结构体字节大小与位域
结构体大小首先我们先定义一个非空结构体,通过sizeof()命令观察其内存字节大小,发现一个结构体的大小并不是结构体内各数据类型大小简单的相加。那么56究竟是怎么来的呢?这就引入了结构体对齐方式的问题。#include<stdio.h>struct Stu{ char name[20];//20 unsigned int age;//4 char tel[15];//15 float scores[3];//12 char sex;//1};//简
2020-07-16 19:28:47
757
原创 动态内存分配后的深拷贝与析构函数处理
上一篇博文我们结尾讨论了拷贝构造函数中深拷贝与浅拷贝的区别以及深拷贝出现的原因,本节将学习类使用动态内存需考虑的拷贝构造函数和析构函数的处理。回顾当类中存在new初始化的指针(类对象在堆中申请了动态内存),默认构造函数只复制指针,不开辟新空间。导致两个指针指向同一块动态内存(浅拷贝),析构时会造成二次释放。深拷贝:在堆区新开辟一块空间进行拷贝。浅拷贝:简单的赋值拷贝操作,指向原来已经存在的内存;带来堆区内存重复释放的问题。要点1、只要类中带指针,就必须要有拷贝构造函数、析构函数、拷贝赋值函数
2020-07-12 13:21:31
567
原创 拷贝构造函数的调用时机与深拷贝
拷贝构造函数的使用拷贝构造函数拷贝构造函数用于将一个对象复制到新创建的对象中。它的函数原型:Class_A(const Class_A&);需要注意的是它的参数类型必须是引用,形如Class_A(const Class_A),相当于按值传递,会调用该类的拷贝构造函数,从而造成无穷递归的调用拷贝构造函数。调用拷贝构造函数的时机用一个已存在的类的对象去初始化该类新建立的对象(1)声明一个对象并初始化为现有对象时。(2)当函数的形参是类的对象(值传递)时。(3)当类的返回值是类的对
2020-07-11 22:22:34
283
原创 Ubuntu16.04下安装并快速切换gcc版本
linux下gcc版本切换起因是最近在ubuntu中安装了多个gcc版本,想要方便地实现版本互相切换,就发现了这个方法,不局限于gcc,它还可以更改比如java的配置。具体相关,goolge update-alternatives可以得到详细解答。再讲具体方法之前,可以先查询下自己ubuntu中的gcc版本,通过以下命令:gcc -v # 用于查询当前版本which gcc # 查询gcc所在位置(一般为/usr/bin/gcc)查询得到linux中gcc原来版本为5.5.0gcc -6安
2020-07-05 12:56:20
827
原创 判断系统大小端字节序
什么是大小端字节序?字节序----大于一个字节类型的数据在内存中的存放顺序。多字节对象在机器上被存储为连续的字节序列,对象的地址为所使用字节的首地址(最小地址)。在linux中经过sizeof(int)得到int类型占4个字节例如,假设一个类型为int的变量x的地址为0x4000,那么x的四个字节将被存储在存储器的0x4000,0x4001,0x4002,0x4003位置。字节序分类定义:大端: 高位字节存放在内存的低地址端,低位字节存放在内存的高地址端小端: 低位字节存放在内存的低
2020-07-01 18:38:20
445
spring_struts2_all.zip
2020-07-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人