2021-5-8学习记录

主题:

日常学习记录,包括

  • 算法题:斐波那契数列
  • 算法题:带重复值的二叉查找
  • 结构体的内存对齐

代码:

#include <stdio.h>
#include <iostream>
#include <string>
using namespace std;

struct A {
	char c = 'r';
	short s = 12;
	int i = 100;
	//int a = 12;
	void* v = NULL;
}; 

int main()
{
//--------------斐波那契数列-----------------
//输入一个数n,输出这个下标对应得数字 
//基本思路:设置两个int变量,来模拟一前一后两个数,然后一步一步向后“跳”,这个
//跳要注意,基本思路是先将front原本的值赋值给back,然后front进行赋值为back和
//front的和。但是腰注意,应该先把back或者front的数值先存起来,不然的话,向前推进
//要求的都是原来的值,那么不管哪个先来,另外一个都会收到影响。
/*
int Fibonacci(int n) {
        
        int front = 1;
        int back = 0;
        int i=0;
        int buff;
        while(i<n)
        {
            buff = front;
            front = back+front;
            back = buff;
            i++;
        }
        return back;
    } 
*/

//--------------------有重复数字的升序数组的二叉查找(非递归实现)------------- 
//要求给出最左边的那个数字的编号,比如 1 2 3 3 4 6 种查找3,需要给出2 而不是3
//实现思路:当查找到mid相等的元素的时候,不是退出,而是将mid入栈,进行记录,然后
//继续 向左边查找(right = mid-1).
//注意最外层循环的判断条件,为left<=right.因为这样可以避免right ”坐“ 到target
//但是由于left和right相当就直接退出的情况。(内部使用left = mid+1 right = mid-1)
//而且最终也还是会因为mid相等,然后移动right,最终出去的情况。
/* 
 int search(vector<int>& nums, int target) {
        // write code here
        int left=0;
        int right = nums.size()-1;
        int mid = (left+right)/2;
        stack<int> s;
        
        while(left<=right)
        {
            if(nums[mid]==target)
            {
                s.push(mid);
                right = mid-1;
            }
            else if(nums[mid]>target)
            {
                right = mid-1;
            }
            else{
                left = mid+1;
            }
            mid = (left+right)/2;
        }
        if(s.empty()==0)
        {
            return s.top();
        }
        else{
            return -1;
        }
    } 
*/
	
//-------------------------结构体的内存对齐------------------------
//结构体成员自身对齐时,存放的地址为min{有效对齐值为自身对齐值, 指定对齐值} 的最小整数倍的地址处.
//注:自身对齐值:结构体变量里每个成员的自身大小
//注:指定对齐值:有宏 #pragma pack(N) 指定的值,这里面的 N一定是2的幂次方.如1,2,4,8,16等.如果没有通过宏那么在32位Linux主机上默认指定对齐值为4,64位的默认对齐值为8,AMR CPU默认指定对齐值为8;
//注:有效对齐值:结构体成员自身对齐时有效对齐值为自身对齐值与指定对齐值中 较小的一个.
//找到有效对齐值之后,需要把数据放在后面,放在是有效对其值的整数倍的地方。
// 
	cout<<sizeof(A)<<endl;
	
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值