c++自定义数据类型知识总结

1.结构体的定义:(不分配任何空间,只是定义一个新的数据类型)

              struct 结构体类型名

                {

                    成员列表

                 }

  可以使用结构体名直接定义结构体变量    Student stud1;

  结构体成员可以是一个别的结构体变量

2,结构体变量的初始化:

与数组初始化一样,花括号的初始值表

3.  相同类型的结构体变量可以相互赋值

4.  访问结构体变量的成员,需要使用成员访问运算符

                                  圆点运算符  .     结构体变量.成员名

                                  箭头运算符  ->  

5. 结构体和指针:

                 结构体指针的值是它所指向的结构体变量的首地址

                 声明:  结构体名*结构体指针变量名

6. (1)结构体变量成员可以作为函数的参数

        如果形参是指针或者数组类型,可以将结构体变量的地址传送给函数

   (2)结构体变量可以作为函数的参数或者返回值

        采用传引用或者传指针方式时,被调函数可以修改实参的值。

7. 数组中的元素也可以是结构体变量,这样的数组叫做结构体数组

   引用结构体数组元素的某一成员可以用圆点运算符  .

          结构体数组名[下标] .成员名

8.  new用法:

            (1)单变量空间:int *p1=new int;   int *p2=new int(5);

            (2)数组空间:int*p3=new int[100];  int(*p4)[6]=new int[5][6];

             分配失败返回NULL

             访问用new开辟的空间,只能通过返回指针间接访问。

Delete用法:

            (1)delete 指针变量 ;  //释放动态开辟的普通变量

            (2)delete[]指针变量;  //释放动态开辟的数组空间

单向链表:

            定义:

结点中只有一个指针域,存放下一个结点的首地址,如此串联下去

指定最后一个结点。最后一个结点指针域置为NULL(表示链尾)

            单向链表结点类型声明:

                 struct Node{

                         int data;  //数据域

                         Node*next;//指针域,指向后继节点

 };

            头指针:

指向链表第一个结点的指针

声明方式: Node*head;

            链表中每个结点都是Node型结构体变量,包括两个成员,

  1. data存放实际数据2.next作为后继指针,存放后继结点首地址。

9.  为方便操作,把头指针和链表长度再封装一个新结构体类型

           struct List{

                Node*head;

                int length;

               };

   对单向链表的操作:建立链表,遍历链表,查找链表,在链表中插入或删除结点。

  1. 建立单向链表,增加结点

(建立单向链表的主要工作是把多个结点链接在一起。)

声明一个链表变量,让它的成员head(头指针)指向链表的第一个结点;

动态建立每个结点,将这些结点依次接入链表的尾端,使每个结 点的指针指向下一个结点,末尾结点的指针域为NULL;

   尾插法: 先读入的数据靠近链表头部,后读入的数据靠近链表末尾。

  头插法: 先读入的靠近链表末尾,后读入的靠近链表表头。

  1. 遍历链表

        从链首开始,依次访问(输出,修改)链表每个结点的信息。

        ,list.head->data=15;//给第一个结点data赋值

        ,list.head->next->data//访问第二个结点

 有较多结点时,声明一个Node*类型的指针变量pCurNode,

 首先让pCurNode指向第一个结点。通过“pCurNode=pCurnode->next”使

         指针pCurNode后移(指向当前结点的后继结点),反复执行知道指针的值变为NULL,遍历所有结点。

         Node*pCurNode=list.head;

         While(pCurNode)

              pCurNode=pCurNode->next;

  1. 在链表中插入,删除结点

       在遍历链表定位插入点或删除点的同时,注意记录当前结点的前驱结点的位置。

       过程:   2,3顺序不能颠倒

       插入:

1.指针pa指向结点a,结点a的后继为结点b,指针pc指向待插入结点c,

  1. 把b的地址赋给结点c的指针域next

, pc->next=pa->next;

  1. 把结点c的地址赋给结点a的指针域next

  ,pa->next=pc;

删除

  1. 待删除的结点c,指针pc指向c,指针pb指向b
  2. 结点b的指针域指向结点c的后继结点d

Pb->next=pc->next;

  1. 释放结点c占用的空间。

,delete pc;

10.共用体类型:(union类型)

               

与结构体的不同之处:系统为结构体的各个成员分别分配存储单元,共用体是各个成员共同占同一段存储单元。

c++自定义数据类型知识总结_第1张图片

各个成员在空间上相互覆盖

11.枚举类型:

           在程序中用自然语言表示非数值数据,可以将非数值数据一一列出的数据类型。

       声明:   enum枚举名{标识符1,标识符2,,,标识符n};

               ,enumweekday{sun,mon,tue,wed,thu,fri,sat};

                表示weekday只能取以上7个值之一。每个枚举常量对应一个整数,默认从0开始,也可以指定值(wed=3

       定义:   weekday workday=sun;//定义并初始化枚举常量workday

       使用:  不能直接给枚举变量赋整数值,除非强制类型转换

                                            ,a=(weekday)2;

              枚举变量不能加引号

12.类型定义typedef:

           可以用typedef声明一个新类型名代替已有类型名

       

你可能感兴趣的:(c++,linq,p2p)