数据结构预备知识

1.如何定义结构题(三种类型)

(1)先定义结构体类型,在定义结构体类型变量

struct student

{

        long number;

        char name[20];

        char sex;

        int age;

        float score[3];

};

定义结构体类型变量: struct student stu1,stu2;

(2)定义结构体类型同时定义结构体类型变量

struct student

{

        long number;

        char name[20];

        char sex;

        int age;

        float score[3];

}stu1,stu2;

再定义变量:struct student stu3,xtu4;

(3)直接定义结构体类型变量

struct 

{

        long number;

        char name[20];

        char sex;

        int age;

        float score[3];

}stu1,stu2;

//该定义方法由于无法记录该结构体类型,除直接定义外不能再定义变量。

typedef:为数据类型定义一个别名

eg:typedef int interger

int x,y;  <=> interger x,y;

int:存在变量         interger:别名

typedef + struct 结合使用

typedef struct tagMyStruct

{

        int num;

        long length;

}MyStruct;      (1)

MyStruct:类型名

struct tagMyStruct

{

        int num;

        long length;

};   

typedef struct tagMyStruct MyStruct;  (2)

(1) <=>(2)

typedef + struct + 指针 结合使用

typedef struct node

{

        int data;

        struct node *next;

}*pointer;

等价于

typedef struct node *pointer;

struct node

{

        int data;

        pointer next;

};

等价于

struct node

{

        int data;

        struct node *next;

};

typedef struct node *pointer;

结构体变量的引用:

(1)结构体变量名.成员名

(2)指向结构体的指针变量名->成员名

pointer p;

printf("%d",*p.data);        <=>      printf("%d",p->data);

2.动态分配和释放存储单元的相关函数

malloc(size):

在内存的动态存储区中分配一个长度为size的连续空间(单位是字节)。返回一个指针,指向所分配的这个存储区域的起始地址。

返回指针为void类型  使用时需强制类型转换。

eg: int *p; p=(int*)malloc(3);

若无内存空间 则返回空指针

calloc(n,size):

在内存的动态存储区中分配n个长度为size的连续空间。

realloc(p,size):

将p所指出的已分配内存区的大小改为size,size可以比原来分配的空间大或小。

若更改后的存储空间不够,则重新申请一个size那么大的 存储空间,将原有的存储空间释放。

free(p):

释放有p所指向的内存区,使这部分存储区能被其他变量使用,free无返回值。

sizeof(type):

返回是一个对象或者类型所占的内存字节数。

new/delete使用要点:

new的使用:前后类型名要保持一致

(1)开辟单变量地址空间

        int *p = new int;                    //定义一个int类型的量 将其起始地址赋值给指针p

        int *p = new int(5);               //定义一个int类型的量初值为5 将其起始地址赋值给指针p

(2)开辟数组空间   

一维:int *p = new int[100];        //将数组这片连续空间的起始地址赋给指针变量p

                                                   //p相当于一维数组的数组名

二维:int (*p)[6] = new int[4][6];

delete的使用:释放new开辟的空间

(1)单变量空间的释放:

        delete p;

(2)数组空间的释放(一维,二维)

        delete [ ]p;

注意:若申请用int *p = new int[ ]; 但在释放时用delete p;则只释放了第一个变量的空间。

eg:

为p开辟单变量空间:

未开辟空间时:

修改后:

3.C++参数传递问题:

传值方式:

把实参的值传送给函数局部工作区相应的副本中,函数使用这个副本执行必要的功能,函数修改的时副本的值,实参的值不变。

传地址方式-----指针变量做参数

若在被调用函数中没有改变指针的指向,而只是改变指针所指向单元的值,则形参值的变化会影响实参的值。

若在被调用函数中改变了指针的指向,则形参值的变化不影响实参的值。

传地址方式-----引用类型做参数

j是一个引用类型,代表i的一个替代品

i值改变时,j值也跟着改变,所以输出如上

--------------------------------------------------------

使用引用类型进行交换:

传地址方式------数组名做参数

传递的是数组的首地址

对形参数组所做的任何改变都将反映到实参数组中

4.指针的定义

1.地址

内存单元的编号

从0开始的非负整数

范围:0-FFFFFFFF [0----4G-1]

 2.指针

指针就是地址,地址就是指针

指针变量是存放内存单元地址的变量

指针的本质是一个操作受限的非负整数

  基本类型的指针:

int a = 5;

int *p; p=&a;  //等价于  int *p = &a;

数组名

        一维数组名是一个指针常数

        它存放的是一堆数组第一个元素的地址

        它的值不能被改变

        一维数组名指向的是数组的第一个元素

下标与指针的关系

若定义了 :int a[10]; int *p; p=a;

可以以下方式访问:

(1) a[i]

(2) *(a+i)

(3) *(p+i)

5.fstream读写txt

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值