Linux_C笔记day05

递归(二)
对于二叉树来说,递归相较于迭代更好实现。在斐波那锲(fibnacci)数列中进行较多的应用。
int gettimeofday(struct timeval *tv,const struct timezone *tz);用来计算程序的运行时间,包含在sys/time.h头文件中。
迭代所用的时间明显比递归所用的时间要短;
走迷宫递归输出全部路线(4层递归)
罗汉塔递归输出全部路线(2层递归)


结构体(联合,共用体)
联合,共用体是基于内存较少的情况下所使用的;
结构体在c中默认是公有的,包含在string.h头文件中
结构体的声明(在函数体外):
struct 【结构体数据类型名】 {
            int age;
            char name[20];
            float high;
            char phone[20];
            struct person* a;
};   //结构体声明

在函数体内定义结构体:
struct 【结构体数据类型名】 【结构体变量名】;
eg:struct person jim;
    jim.age=30;
    strcpy(jim.name,"jim");//调用strcpy函数给数组变量赋值
    jim.high=1.73;
    printf("age:%d\n",jim.age);

字节对齐与地址对齐访问
#字节对齐
#pragma pack(1)   //最大对齐字节数为32位4字节,64位8字节,按多少字节的整数倍对程序进行字节对齐,如果没有定义按最大字节数的整数倍对齐
    如何计算结构体的大小
当前结构体的大小是下一个类型的整数倍,否则用字节补齐;
总大小是最宽字节的整数倍;64位是8位,32位是4位;否则用字节补齐
数组在结构体中单一拆分进行对齐,longlong型和double型在32位的计算是8字节,对齐是以2个4字节;64位的计算和对齐都是8字节
补齐的字节中没有数据。
#地址对齐访问
如果地址能被8整除的是double型或longlong型,
如果地址能被4整除的是int型,若int型地址不能被4整除则是地址非对齐访问,会造成程序崩溃
如果地址不能被4整除但能被2整除的是short型,若不是同上
如果地址是个奇数的是char型。若不是同上

结构体指针的声明与定义
struct 【结构体数据类型名】* 【结构体指针变量名】;
eg:struct person* pa=NULL;
   pa=(struct person*)malloc(sizeof(struct person));
   pa->age =100;
   printf("pa->age:%d\n",tmp->age);
   free(pa);

C++中的结构体
@@@
class preson{
private:
    int age;
    char* name;
public:
    int eat(char* name)
    {
        printf("%s\n",name);
    }
    int run();
};
int main()
{
    jim.eat("jitui");
    return 0;
}
@@@

在结构体中用函数指针调用函数
struct person{
    int age;
    char* name;
    int (*peat)(char*);
}
void eat(char* name)
{
    printf("%s\n",name);
}
int main()
{
    struct person jim;
    jim.tmp=eat;
    jim.peat("paomo");
    return 0;
}

struct preson jim = {
    .age=100,
    .name="jim",
};    \\结构体内的数组类型不可直接赋值

联合
union person{
    int age;
    char name;
};
int main()
{
    union person a;
    a.age = 100;
    a.name = 'x';
}
所占空间大小为联合体中占用空间最大的类型的大小。联合只有一块空间,重复输值回覆盖当前的值。

结构体类型名的重定义
typedef struct person{
    int age;
    char* name;
}PRE,*PPRE;
 int main()
{
    PPRE a;
    a->name ="jim";
    a->age = 100;
    PRE b;
    b.name = "kaka";
    b.age = 21;
    return 0;
}

如何计算程序运行的详细时间效率
#include<sys/time.h>
struct timeval start,end;
gettimeofday(&start,NULL);
gettimeofday(&end,NULL);    //传空按内核时区进行计算
printf("time:%lu us \n",(end.tv_sec - start.tv_sec)*1000000 + (end.tv_usec - start.tv_usec));

如何在mian函数之前执行一个函数(主要利用在用户登陆的情况)
__attribute((constructor))int before_main()
{
    printf("hello main!\n");
}
int main()
{
    printf("main\n");
    return 0;
}

作业:
迷宫
在字符串中找出第一个只一次的字符;eg:abaccdeff   put:a 时间复杂度为O(n)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值