C描述数据结构
1.指针的定义使用以及取地址符&使用
#include <stdio.h>
int main(int argc, char const *argv[])
{
int *point = 0;
int num = 10;
point = #
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.
使用动态规划可以减少使用的空间,只需要将重复的子问题的解存放在一个数组中即可。