typedef--数据结构--复杂度分析

数据结构:

      1.数据的4种逻辑结构:   集合   线性结构   树形结构   图

      2.数据存储:   逻辑关系   和   物理关系

                 顺序表:  逻辑相连,物理地址也相连

                 链表:  逻辑相连,物理地址不一定相连

      3.线性表包括:    顺序表     链表

                区分一下数组和顺序表:  数组主要关注数据的存取; 顺序表可实现存,取,插,删,改等

typedef:

      

#include<stdio.h>

typedef int Int;
typedef int *pint;

int main()
{
	int a = 10;
	Int b = 20;
	printf("%d,%d\n", a, b);

	int x = 100;
	int *p1 = &x;
	pint p2 = &x;
	printf("%d,%d\n", p1, p2);

	return 0;
}

上述代码请个位读者运行并观察结果,可以得到这样的结论:

typedef int Int; 的含义就是将 int 重新命名为 Int, 因此printf("%d,%d\n", a, b);的结果为两个整数;

typedef int *pint; 的含义就是将  int *(指针类型) 重新命名为 pint ,即用pint 声明一个变量和 int* 声明一个类型等价;

关于typedef有一个好记的方法(仅供参考,如果有更好的办法可以交流):

       比如: int Int; 意思是定义一个整形的Int 变量,加上 typedef 后就将 Int 提升为int 这种数据类型

                那么 typedef int *pint; 就是将pint 提升为int * 这种数据类型

请理解下列代码:

typedef struct student
{
	int name[20];
	int age;
}student; //定义一个结构体并且重命名为student

//定义一个 struct student 变量
struct student stu1;

//定义一个 struct student 变量
student stu2; 

//定义一个 struct student 类型的指针变量
student *stu3;

在很多数据结构书中我们可以看到下列类型的结构体:

typedef struct student
{
	int name[20];
	int age;
}student,*pstudent;

student *stu1;
pstudent stu2;

/*
* 其实就是将pstudent升级为student *这种指针类型
* 所以下面的 stu1 和 stu2是同类型的指针变量
*/

复杂度分析:

     1.时间复杂度:计算时间复杂度的两个原则

                               一个是只保留高阶项(如计算得复杂度为 n^2+n 则复杂度为O(n^2) )

                               另一个是不要系数( 如 计算得复杂度为 2*n 则复杂度为 O(n)  )

     2.空间复杂度:实现算法需要的 额外辅助空间

计算复杂度时需要一定的数学计算,要记得 等差,等比数列求和公式;

时间复杂度例子:

int Fun(int n)
{
    if(i<=1)
        return 1;
    else
        return Fun(n-1)+1;      // O(n),进行n次,在返回n次
        //return Fun(n-2)+1;    // O(n),循环n/2次,在返回n/2次
        //return Fun(n/2)+1;    /* O(logn) 底数为2
                                   n,n/2,n/4,n/8,n/16,...,1
                                   反着看 1 2 4 8 16 32...n  总共x项
                                   即 2^x <= n
                                   则x等于以二为底n的对数
                                */
}

/*
   从1到1000
   一次走一个数的路程,走1000次  Fun(n-1)
   一次走两个数的路程,走500次   Fun(n-2)
   一次走一半路程,走10次    Fun(n/2)
*/

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值