912数据结构chapter1—序

算法与数据结构知识树

0x01数据结构与时空复杂度

数据结构是一种组织和存储数据的方式。它包含三方面的内容,逻辑关系、存储关系以及操作。

逻辑结构

线性结构:一般线性表;受限线性表 - 栈和队列;线性表推广 - 数组,广义表
非线性结构:集合;树形结构 - 一般树,二叉树;图形结构 - 有向图,无向图

存储结构

顺序存储:将逻辑相邻元素存储在物理相邻单元中。
链式存储:通过指示元素存储地址的指针来标书元素之间的逻辑关系。
索引存储:附加索引表,索引表一般形式(关键字,地址)。
散列存储(哈希存储):根据关键字直接计算存储地址。

时间复杂度

1348953-20180609233011516-2118695603.png1348953-20180609233018243-955657318.png
时间复杂度计算要找最深层循环内语句的频度

0x02一些C语言知识

结构体

结构体是一种复合数据类型。C 数组允许定义可存储相同类型数据项的变量,结构是 C 编程中另一种用户自定义的可用的数据类型,它允许您存储不同类型的数据项。

typedef struct X { 
    int a;
    float b;
    double c;
    char d;
    user_defined e;
} X;

*
  • 表示变量为指针类型
    int *i; i is an uninitialized pointer to an int.

  • 解引用,表示指针变量所指向的存储单元的值
    *k

&
  • 取得变量地址,将其赋值给等式左边
    k = &i; make k point to i. We take the address of i and store it in k.

  • 引用,C++概念, a引用b,即a是b的别名
    int &a=b

sample

int i = 10;    //定义整型变量i,值为10
int *k;    //定义int*类型指针k
k = &i;    //取出i的地址,存于k
int j = *k;    //定义整型变量j,*k取出存储单元中的值并存储到j当中
//此时j的值为10

.

The dot . operator is used to access a member of a struct
结构体成员运算符
a.b 可能是lvalue也可能是non-lvalue(按a决定);而 a->b 必然是 lvalue。
一般来说 *.-> 是等价的,就是a->b(*a.b) 写起来简单一些。
左值指的是可以取地址的变量,左值与右值的根本区别在于能否获取内存地址 ;在 c 中,左值指的是既能够出现在等号左边也能出现在等号右边的变量(或表达式),右值指的则是只能出现在等号右边的变量(或表达式)。

->

The arrow operator ->in C is used to access a member of a struct which is referenced by the pointer in question.
指向结构体成员运算符

sample

#include <stdio.h>
 
struct Pair {
    int first, second;
};
 
int main(void) {
    struct Pair p;
    p.first = 10;
    p.second = 20;
    printf("%d %d\n", p.first, p.second);
 
    struct Pair *q = &p;
    q->first = 30; // q is a pointer
    (*q).second = 40; // *q is not
    printf("%d %d\n", p.first, p.second);
}

拓展链接

C语言指针详解
C语言中“.”与“->”有什么区别?
Why does the arrow (->) operator in C exist?

转载于:https://www.cnblogs.com/yexuesong/p/9161770.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值