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型结构体变量,包括两个成员,
9. 为方便操作,把头指针和链表长度再封装一个新结构体类型
struct List{
Node*head;
int length;
};
对单向链表的操作:建立链表,遍历链表,查找链表,在链表中插入或删除结点。
(建立单向链表的主要工作是把多个结点链接在一起。)
声明一个链表变量,让它的成员head(头指针)指向链表的第一个结点;
动态建立每个结点,将这些结点依次接入链表的尾端,使每个结 点的指针指向下一个结点,末尾结点的指针域为NULL;
尾插法: 先读入的数据靠近链表头部,后读入的数据靠近链表末尾。
头插法: 先读入的靠近链表末尾,后读入的靠近链表表头。
从链首开始,依次访问(输出,修改)链表每个结点的信息。
,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;
在遍历链表定位插入点或删除点的同时,注意记录当前结点的前驱结点的位置。
过程: 2,3顺序不能颠倒
插入:
1.指针pa指向结点a,结点a的后继为结点b,指针pc指向待插入结点c,
, pc->next=pa->next;
,pa->next=pc;
删除:
Pb->next=pc->next;
,delete pc;
10.共用体类型:(union类型)
与结构体的不同之处:系统为结构体的各个成员分别分配存储单元,共用体是各个成员共同占同一段存储单元。
各个成员在空间上相互覆盖
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声明一个新类型名代替已有类型名