数据结构基本知识

439 阅读4分钟

一、数据类型

1、基本数据类型

int、long、unsigned int、unsigned long、long long

char

float、double

int a,b,c;
a = 1;
b= 2;
c = a+b;

char s;
s = 'a';
float f;
f = 3.1415;

2、结构体类型,struct关键字

struct Student
{
    int num;
    char name[20];
    float score;
}
struct Student s1;
s1.num = 1;

3、typedef方式

typedef struct Student
{
    int num;
    char name[20];
    float score;
}Student;
Student s1;
s1.num = 1;

4、变量指针*

保存变量指针的变量称为“变量指针”;

int *a;
int b = 2;
a = &b;
*a = 3; //b= 3;

char *s;
char d = 'str';
s = &d;
*s = 'ssss'; //d = 'ssss'

Student *s1_p;
Student s2;
s1_p = &s2;
s2.num = 11;
(*s1_p).score = 100;
//等同于
*s1_p->score = 200;

5、函数,及参数会不会被修改,使用&就改变,数组也会改变

void fun(int num)
{
    num++;
}
int a = 1;
fun(a);
printf("%d", a) //a=1不改变

//改变
void fun2(int &num)
{
    num++;
}

//改变
void fun3(int a[])
{
    a[0]++;
}
int a[10];
a[0] = 0;
func3(a) //a[0] = 1;

三、动态分配内存

1、使用malloc函数分配空间

函数原型: void *malloc(unsigned int size);

函数作用:在内存的动态存储区中分配一个长度为size的连续空间,并返回所分配的第一个字节的地址。

float *f = (float *)malloc(4);
char *s = (char *)malloc(1);
Student *s1_p = (Student *)mallo(??); //此时计算不出内存长度

使用sizeof配合malloc函数分配空间。

sizeof定义:是测量类型或者变量长度的运算符。

float *f = (float *)malloc(sizeof(float));
char *s = (char *)malloc(sizeof(char));
Student *s1_p = (Student *)mallo(sizeof(Student));


//
int num1 = sizeof(float); //4
int num2 = sizeof(char); //1
int num3 = sizeof(Student); //代码运行后会得到数字

2、使用free函数释放空间

函数原型: void free(void *p);

函数作用:释放指针p所指向的动态空间,使这部分空间可以被其他变量使用。


float *f = (float *)malloc(sizeof(float));
char *c = (char *)malloc(sizeof(char));
Student *s1_p = (Student *)malloc(sizeof(Student));

free(*f);
free(*c);
free(*s1_p); 

四、数据结构中常见代码段实例

例如:单链表结点描述与初始化

typedef char ElemType;
typedef struct LNode
{
    ElemType data;
    struct LNode *next;
}LNode,*LinkList;

LNode *node1 ; // 等同  LinkList node1;    
int InitLinkList(LinkList &L) 
{
    L = (LNode *)malloc(sizeof(LNode));
    if(L!==NULL)
    {
        return 1;
    }else{
        return 0;
    }
}

LinkList L;
if(InitLinkList(L)==0)
{
    printf("error");
}else {
    ....
}

4、数据结构的概念与三要素

一、数据结构:一个值的集合以及定义在此集合上的一组操作的总称。

1、原子类型:其值不可再分的数据类型,(例如整型、字符型)

2、结构类型:由若干成分按某种结构组成的,其值可被拆分(例如Student、Frog);

3、抽象数据类型:抽象数据组织与之相关的操作。

抽象数据类型(Abstract Data Type):ADT指一个数学模型以及定义在该模型上的一组操作。通常使用数据对象、数据关系、基本操作集三元祖表示。

二、数据结构的三要素:

1、数据的逻辑结构。指数据元素之间的逻辑关系。与数据的存储无关。分为线性结构和非线性结构。

线性结构:线性表、栈、队列、串、数组、广义表。

非线性结构:树、图、集合。

2、数据的存储结构。指数据在计算机中的表示,也称物理结构。存储结构是逻辑结构在计算机中的实现。

分为4类:顺序存储、链式存储、索引存储、散列存储(也称hash存储)。

3、数据的运算。施加在数据上的运算(包括定义、实现)。包含增删改查排序。

运算的定义是针对逻辑结构。

运算的实现是针对物理结构。

五、算法和时间复杂度

定义:对特定问题求解步骤的一种描述,是指令的有限序列。

算法的5个基本特征:有穷性、确定性、可行性、输入、输出。

好的算法应考虑的目标:正确性、可读性。

1、算法的效率度量:时间复杂度、空间复杂度。

时间复杂度:一个语句的频度指语句在算法中被重复执行的次数。

算法中所有语句的频度之和记作T(n).

通常采用算法中基本运算的频度f(n)来分析算法的时间复杂度

T(N)=O(f(n));

空间复杂度:算法所耗费的存储空间g(n).S(n)=O(g(n))