预备知识

主要是数据结构太难了,有很多地方根本看不懂!先用郝斌的数据结构视频来入个门:
废话不多说:
开始第一课:

模块一:线性结构:
连续存储
离散存储

队列
模块二:非线性结构:


模块三:查找和排序:
感觉入门是够了!
看完这些再看国嵌唐老师的数据结构视频··

数据结构概述:

定义:
我们用来描述客观事物的数据和关系以特定的方式来进行保存的操作,叫做数据结构。
在此基础上实现的一些操作称为算法–(主要是数学基础) 叫做算法

数据结构 = 个体+个体的关系
在狭义上来说算法就是对数据结构进行的操作

衡量算法的标准:
1.时间复杂度(执行的次数而不是执行的时间)–大O记法
2.空间复杂度(占的内存的大小)
3.难易程度
4.健壮性

预备知识:
伪算法+C语言实现
链表是以后数据结构的基础··

指针:

指针的重要性:是C的灵魂
定义:
    地址内存单元的编号
    1.指针的重要性

指针是C语言的灵魂。

2.定义

地址:内存单元的编号。范围为0-FFFFFFFF(4G-1)。
地址线总共有32根.就可以访问2的32次方的空间,也就是4GB。
指针:指针就是地址,地址就是指针,指针和地址是一个概念
指针变量:存放地址的变量
指针的本质是一个操作受限的非负整数。

分类:基本类型的指针

环境:vs2013

int main(void)
{
    int *p ; 
    //P是个指针变量,int* p表示只能存储int类型变量的地址。
    int  i = 10;
    int j;

    j = *p; //err使用了未初始化的局部变量p,p没有保存有效变量的值

    system("pause");
    return 0;
}

//p存放的地址,但是p并没有存放地址
//函数更改值
void f(int* i)
{
    *i = 100;
}

int main(void)
{
    int i = 9;

    f(&i);

    printf("%d\n",i);

    system("pause");
    return 0;
}
 指针和一维数组的关系
int main(void)
{

    int a[] = { 1, 2, 3, 4, 5 };

    printf("%d\n",*(a+1));//2

    system("pause");
    return 0;
}

结构体:

结构体是根据用户定义的复杂数据类型,不是变量,没有分配内存

#include <stdio.h>

struct Student
{
    int sid;
    int age;
};

int main(void)
{
    struct Student st = { 20, 30 };
    printf("%d\n%d\n", st.age,st.sid);
    //printf("%d\n%d\n", st->age, st->sid);//表达式必须包含指针类型

    system("pause");
    return 0;
}
#include <stdio.h>

struct Student
{
    int sid;
    int age;
};
int main(void)
{
    struct Student st1 = { 20, 30 };
    struct Student *st ;//只占4个字节,指针只占四个字节

    st = &st1;

    printf("%d\n%d\n", st->age, st->sid);//表达式必须包含指针类型
    printf("%d\n%d\n", (*st).age, (*st).sid);//表达式必须包含指针类型


    system("pause");
    return 0;
}
void f(struct Student* s)
{
    (*s).age = 99;
    s->sid = 100;
}


int main(void)
{

    struct Student Sy;
    f(&Sy);

    printf("%d\n%d\n",Sy.age,Sy.sid);

    system("pause");



    return 0;

}

两种方式使用结构体:
struct Student St;
struct Student *St;
St->age 表示st所指向的age这个成员

注意:不能加减乘除,可以相互赋值。
结构体变量和结构体指针作为函数传参的问题

动态内存分配

#include <stdio.h>
#include <malloc.h>
//malloc分配内存,返回的是第一个字节的地址,没有实际含义,我们把(int*),把20个字节转换为int类型使用
//malloc可以用数组的方式来进行内存访问


int main(void)
{

    int a[] = { 1, 2, 3, 4, 5, 6 };

    int* p = (int*)malloc(sizeof(int) * 6);

    printf("%p\n",p);

    p[0] = 1;
    p[1] = 2;

    free(p);
    system("pause");
    return 0;
}

跨函数使用内存:malloc
申请了内存,要人工释放

你可能感兴趣的:(数据结构)