资源描述
一 、 用 typedef说 明 一 种 新 的 类 型 名格 式 : typedef 类 型 名 标 识 符 ;例 子 : typedef int INTEG ER; INTEG ER m,n;/等 价 于 int m,n; Typedef char* CH ARP; CH ARP p;/等 价 于 char* p; 二 、 结 构 体 类 型一 般 格 式 :struct 结 构 体 标 识 符 名 类 型 名 1 结 构 体 成 员 名 表 1;类 型 名 2 结 构 体 成 员 名 表 2;类 型 名 n 结 构 体 成 员 名 表 n;;例 如 : struct dateint year,month,day; 注 意 :1、 类 型 名 1-类 型 名 n不 仅 可 以 是 简 单 数 据 类 型 , 也 可 以复 杂 的 构 造 类 型 , 包 括 结 构 类 型 。例 如 :struct student char name12;char sex;stuct date birthday;float sc4;2、 结 构 体 类 型 只 是 说 明 了 这 种 类 型 结 构 的 模 式 , 这 时 没有 分 配 内 存 空 间 。 结 构 体 类 型 变 量 、 数 组 和 指 针 变 量 的 定 义( 1) 紧 跟 在 机 构 体 类 型 说 明 之 后例 如 :struct student char name12;char sex;stuct date birthday;float sc4;std,pers3,*pstd; 结 构 体 类 型 变 量 、 数 组 和 指 针 变 量 的 定 义( 2) 无 名 结 构 体 类 型 之 后例 如 :struct std,pers3,*pstd;(3)先 说 明 结 构 体 类 型 , 再 单 独 进 行 变 量 定 义例 如 : struct ; struct student std,pers3,*pstd;(4)用 typedeftypedef struct char name12;char sex;struct date birthday;float sc4;STREC;STREC std,pers3,*pstd; 给 结 构 体 变 量 、 数 组 赋 初 值1、 给 结 构 体 变 量 赋 初 值 所 赋 初 值 顺 序 放 在 花 括 号 种 , 结 构 体 成 员 顺 序 一 一 赋值 , 对 于 为 给 初 值 的 成 员 系 统 自 动 给 定 值例 如 :struct student char name12;char sex;stuct date birthday;float sc4;std=“Li Ming”,M,1962,5,10,88,76,85.5,90;2、 结 构 体 数 组 赋 初 值 例 :struct bookcard char num5;float money;bk3= “NO.1”,35.5, “NO.2”,25.0, “NO.3”,55.7; 结 构 体 类 型 变 量 的 引 用 在 定 义 了 结 构 体 变 量 后 , 可 以 采 用 下 列 方 法 引 用结 构 体 类 型 的 变 量 : 结 构 体 变 量 名 .成 员 名 这 里 .是 成 员 (分 量 )运 算 符 , 它 在 所 有 的 运算 符 中 优 先 级 最 高 。 对 于 指 针指 针 变 量 名 - 成 员 名( *指 针 变 量 名 ).成 员 名例 如 : struct student char name12;char sex;stuct date birthday;float sc4;std,arr5,*ps; ps=std.sexps-sex(*ps).sexps-sc2函 数 之 间 结 构 体 变 量 的 数 据 传 递和 普 通 其 他 简 单 数 据 类 型 相 同 . (1)向 函 数 传 递 结 构 体 变 量 中 的 单 个 成 员 数 据( 2) 向 函 数 传 递 整 个 结 构 体 变 量 中 的 数 据 。( 3) 传 递 结 构 体 变 量 的 地 址 ( 指 针 ) 。 例 题 14.1 #includetypeof structchar s10;int t;STgetdata(ST *p)scanf(“%s%d”,p-s,main() ST a;getdata(printf(“%s,%dn”,a.s,a.t);( 4) 向 函 数 传 递 结 构 体 数 组 名 ( 5) 函 数 返 回 值 是 结 构 体 类 型 ( 6) 函 数 返 回 值 是 结 构 体 变 量 指 针 三 、 利 用 结 构 体 变 量 构 成 链 表 链 表 作 为 一 种 常 用 的 、 能 够 实 现 动 态 存 储分 配 的 数 据 结 构 , 在 数 据 结 构 课 程 中 有 详细 介 绍 。 为 方 便 没 有 学 过 数 据 结 构 的 读 者 , 本书 从 应 用 角 度 , 对 链 表 作 一 简 单 介 绍 。l 头 指 针 变 量 head指 向 链 表 的 首 结 点 。l 每 个 结 点 由 2个 域 组 成 : 1) 数 据 域 存 储 结 点 本 身 的 信 息 。 2) 指 针 域 指 向 后 继 结 点 的 指 针 。l 尾 结 点 的 指 针 域 置 为 “ NULL( 空 ) ” , 作 为链 表 结 束 的 标 志 链 表 概 述 数 组 顺 序 存 储 结 构 随 机 存 取 逻 辑 关 系 上 相 邻 的 两 个 元 素 在 物 理 位 置 上 也 相 邻1.数 组 的 致 命 弱 点 :(1)在 对 数 组 进 行 插 入 或 删 除 操 作 时 , 需 移 动 大 量 数 组 元 素(2)在 数 组 的 长 度 是 固 定 的 而 且 必 须 预 先 定 义 , 数 组 的 长度 难 以 缩 放 , 对 长 度 变 化 较 大 的 数 据 对 象 要 预 先 按 最 大 空间 分 配 , 使 存 储 空 间 不 能 得 到 充 分 利 用 在 单 链 表 , 通 常 称 它 的 数 据 元 素 为 结 点 , 每 个结 点 都 是 一 个 结 构 体 , 至 少 包 括 两 个 成 员 : 存 储 数据 元 素 信 息 的 成 员 称 为 数 据 域 ; 存 储 直 接 后 继 结 点存 储 位 置 的 成 员 称 为 指 针 域 . 显 然 , 链 表 结 点 的 指 针 域 存 放 的 地 址 类 型 与 它 自 身的 类 型 是 相 同 的 。 这 就 是 C语 言 中 较 为 特 殊 的 递 归 结 构 体 或 自 引 用结 构 体 , 这 种 结 构 体 具 指 向 自 身 结 构 体 的 指 针 , 一般 在 实 现 链 表 、 树 等 数 据 结 构 时 会 用 到 这 种 特 殊 的结 构 体 。 每 个 链 表 都 有 一 个 “ 头 指 针 ” head, 整 个 链 表 的 访 问必 须 从 头 指 针 开 始 进 行 , 头 指 针 指 示 链 表 中 的 第 一 个结 点 的 存 储 位 置 , 习 惯 上 将 “ 头 指 针 ” head指 示 的 链表 简 称 为 链 表 head, 下 同 。 同 时 , 由 于 最 后 一 个 数 据元 素 没 有 直 接 后 继 结 点 , 则 链 表 中 最 后 一 个 结 点 的 指针 为 “ 空 ” ( NULL, 即 空 地 址 ) 。 要 使 用 链 表 , 首 先 应 定 义 结 点 的 类 型 , 再 定 义 相 应的 结 构 体 变 量 。 例 如 , 前 面 链 表 中 结 点 的 结 构 类 型 可以 定 义 为 :struct student char name10; struct student *next; ; 其 中 , next为 指 针 变 量 , 其 类 型 为 结 构 体 类 型student, 它 可 存 储 一 个 student结 构 体 类 型 变 量 的 地址 , 即 实 现 链 表 中 指 向 下 一 个 结 点 的 指 针 域 。 这 是 一 个 递 归 定 义 , 它 在 结 构 体 student的 定 义未 完 成 时 又 引 用 它 定 义 其 它 的 变 量 ( 指 针 变 量 ) 。 1. 单 行 链 表 的 建 立操 作 步 骤 : ( 1) 读 取 数 据 ( 3) 生 成 新 节点 ( 3) 将 数 据 存 入 节 点 的 成 员 变 量 中( 4) 将 新 的 节 点 插 入 到 链 表 中 。 2.单 向 表 的 插 入 ( 3) 遍 历 链 表 ( 4) 删 除 单 向 链 表 的 节 点q-next=p-next;free(p); 三 、 共 同 体类 型 说 明 :union 共 同 体 表 示 名 类 型 名 1 共 同 体 成 员 名 1; 类 型 名 n 共 同 体 成 员 名 n;例 如 :Union un_1int i;float x;char ch; 共 同 体 变 量 的 定 义union un_1int i;float x;char ch;s1,s2,*p;注 意 :( 1)共 同 体 变 量 所 有 成 员 共 享 存 储 空 间 。 与 结 构体 区 别 : 结 构 体 的 每 个 成 员 分 别 占 有 独 立 的 存储 空 间 ; 而 共 同 体 重 所 有 的 成 员 共 享 一 段 公 共的 存 储 空 间 ; 例 如 un_1类 型 变 量 s1的 存 储 如 下 :( 2) 共 同 体 变 量 中 所 有 成 员 的 首 地 址 与 该 变 量地 址 相 同 。 如 s1.i=100; printf(“%fn”,s1.x);
展开阅读全文