C描述数据结构

C描述数据结构

1.指针的定义使用以及取地址符&使用

#include <stdio.h>
int main(int argc, char const *argv[])
{
    
    
    int *point = 0;
    int num = 10;

    point = &num;

    printf("*point value = %d.\n",*point);
    return 0;
}

result:

*point value = 10.

2.函数定义调用以及参数指针传递实际值修改

#include <stdio.h>
int max(int x, int y);
void swap_two_nums(int *xp, int *yp);
int main(int argc, char const *argv[])
{
    
    
    int *point1 = 0;
    int *point2 = 0;
    int num1 = 10;
    int num2 = 11;

    printf("num1 value = %d.\n", num1);
    printf("num2 value = %d.\n", num2);

    point1 = &num1;
    point2 = &num2;
    swap_two_nums(point1, point2);
    printf("After swap:===========================\n");
    printf("num1 value = %d.\n", num1);
    printf("num2 value = %d.\n", num2);

    printf("Max value = %d.\n", max(num1, num2));

    return 0;
}

int max(int x, int y)
{
    
    
    return x > y ? x : y;
}

void swap_two_nums(int *xp, int *yp)
{
    
    
    int temp = *xp;
    *xp = *yp;
    *yp = temp;
}

result:

num1 value = 10.
num2 value = 11.
After swap:===========================
num1 value = 11.
num2 value = 10.
Max value = 11.

3. 结构体调用,typedef 使用

#include <stdio.h>

// struct Node
// {
    
    
//     int value;
//     struct Node *Next;
// };

typedef struct Node
{
    
    
    int value;
    Node *Next;
} Node;

int main(int argc, char const *argv[])
{
    
    
    Node n1, n2, n3;
    Node *np1, *np2, *np3;

    np1 = &n1;
    np2 = &n2;
    np3 = &n3;

    n1.value = 1;
    n1.Next = np2;

    n2.value = 2;
    n2.Next = np3;

    n3.value = 3;
    n3.Next = 0;

    return 0;
}

result:

在这里插入图片描述

4. 递归调用以及动态规划解决斐波那契数列第n项值

#include <stdio.h>
int feibo(int n);
int main(int argc, char const *argv[])
{
    
    

    int sum = feibo(5);
    return 0;
}

// int feibo(int n){ // 递归
//     if(n<=1) return 1;

//     return feibo(n-1) + feibo(n-2);
// }

int feibo(int n)
{
    
    

    int array[10] = {
    
    0};
    array[0] = array[1] = 1;
    while (--n) // 数组滚动,[n & 1],一直让数组下标 在 0和1之间重复
    {
    
    
        array[n & 1] = array[0] + array[1];
        printf("%d.\n", n & 1);
    }

    return array[1];
}

result:

0.
1.
0.
1.
The fifth num is :8.

使用动态规划可以减少使用的空间,只需要将重复的子问题的解存放在一个数组中即可。

猜你喜欢

转载自blog.csdn.net/qq_44880154/article/details/113087241