1、第 一 章 绪 论一 、 选 择 题 1.组 成 数 据 的 基 本 单 位 是 ( ) ( A) 数 据 项 ( B) 数 据 类 型 ( C) 数 据 元 素 ( D) 数 据 变 量 2.数 据 结 构 是 研 究 数 据 的 ( ) 以 及 它 们 之 间 的 相 互 关 系 。 ( A) 理 想 结 构 , 物 理 结 构 ( B) 理 想 结 构 , 抽 象 结 构 ( C) 物 理 结 构 , 逻 辑 结 构 ( D) 抽 象 结 构 , 逻 辑 结 构 3.在 数 据 结 构 中 , 从 逻 辑 上 可 以 把 数 据 结 构 分 成 ( ) ( A) 动 态 结 构 和 静
2、态 结 构 ( B) 紧 凑 结 构 和 非 紧 凑 结 构 ( C) 线 性 结 构 和 非 线 性 结 构 ( D) 内 部 结 构 和 外 部 结 构 4.数 据 结 构 是 一 门 研 究 非 数 值 计 算 的 程 序 设 计 问 题 中 计 算 机 的 ( ) 以 及 它 们 之 间 的( ) 和 运 算 等 的 学 科 。 ( A) 数 据 元 素 ( B) 计 算 方 法 ( C) 逻 辑 存 储 ( D) 数 据 映 像 ( A) 结 构 ( B) 关 系 ( C) 运 算 ( D) 算 法 5.算 法 分 析 的 目 的 是 ( ) 。 ( A) 找 出 数 据 结 构 的
3、 合 理 性 ( B) 研 究 算 法 中 的 输 入 和 输 出 的 关 系 ( C) 分 析 算 法 的 效 率 以 求 改 进 ( D) 分 析 算 法 的 易 懂 性 和 文 档 性 6.计 算 机 算 法 指 的 是 ( ) ,它 必 须 具 备 输 入 、 输 出 和 ( ) 等 5 个 特 性 。 ( A) 计 算 方 法 ( B) 排 序 方 法 ( C) 解 决 问 题 的 有 限 运 算 序 列 ( D) 调 度 方 法 ( A) 可 执 行 性 、 可 移 植 性 和 可 扩 充 性 ( B) 可 行 性 、 确 定 性 和 有 穷 性 ( C) 确 定 性 、 有 穷
4、性 和 稳 定 性 ( D) 易 读 性 、 稳 定 性 和 安 全 性 二 、 判 断 题 1.数 据 的 机 内 表 示 称 为 数 据 的 存 储 结 构 。 ( ) 2.算 法 就 是 程 序 。 ( ) 3.数 据 元 素 是 数 据 的 最 小 单 位 。 ( ) 4.算 法 的 五 个 特 性 为 : 有 穷 性 、 输 入 、 输 出 、 完 成 性 和 确 定 性 。 ( ) 5.算 法 的 时 间 复 杂 度 取 决 于 问 题 的 规 模 和 待 处 理 数 据 的 初 态 。 ( ) 三 、 填 空 题 1.数 据 逻 辑 结 构 包 括 _、 _、 _ 和 _四 种
5、类 型 ,其 中 树 形 结 构和 图 形 结 构 合 称 为 _。 2.在 线 性 结 构 中 ,第 一 个 结 点 _前 驱 结 点 ,其 余 每 个 结 点 有 且 只 有 _个 前 驱 结 点 ; 最 后一 个 结 点 _后 续 结 点 ,其 余 每 个 结 点 有 且 只 有 _个 后 续 结 点 。 3.在 树 形 结 构 中 ,树 根 结 点 没 有 _结 点 ,其 余 每 个 结 点 有 且 只 有 _个 前 驱 结 点 ; 叶子 结 点 没 有 _结 点 ,其 余 每 个 结 点 的 后 续 结 点 可 以 _。 4.在 图 形 结 构 中 ,每 个 结 点 的 前 驱 结
6、点 数 和 后 续 结 点 数 可 以 _。 5.线 性 结 构 中 元 素 之 间 存 在 _关 系 ,树 形 结 构 中 元 素 之 间 存 在 _关 系 ,图 形 结 构 中元 素 之 间 存 在 _关 系 。6.算 法 的 五 个 重 要 特 性 是 _、 _、 _、 _、 _。 7.数 据 结 构 的 三 要 素 是 指 _、 _和 _。 8.链 式 存 储 结 构 与 顺 序 存 储 结 构 相 比 较 ,主 要 优 点 是 _。 9.设 有 一 批 数 据 元 素 ,为 了 最 快 的 存 储 某 元 素 ,数 据 结 构 宜 用 _结 构 ,为 了 方 便 插 入 一个 元 素
7、 ,数 据 结 构 宜 用 _结 构 。 四 、 算 法 分 析 题 1.求 下 列 算 法 段 的 语 句 频 度 及 时 间 复 杂 度 参 考 答 案 :一 、 选 择 题1. C 2.C 3. C 4. A、 B 5. C 6.C、 B二 、 判 断 题 :1、 2、 3、 4、 5、 三 、 填 空 题1、 线 性 、 树 形 、 图 形 、 集 合 ? ; 非 线 性 ( 网 状 ) 2、 没 有 ; 1; 没 有 ; 1 3、 前 驱 ; 1; 后 继 ;任 意 多 个 4、 任 意 多 个 5、 一 对 一 ; 一 对 多 ; 多 对 多 6、 有 穷 性 ; 确 定 性 ;
8、可 行 性 ; 输 入 ; 输出 7、 数 据 元 素 ; 逻 辑 结 构 ; 存 储 结 构 8、 插 入 、 删 除 、 合 并 等 操 作 较 方 便 9、 顺 序 存 储 ;链 式 存 储 四 、 算 法 分 析 题for(i=1; inext=p;p-next=s; ( B) s-next=p-next;p-next=s;( C) s-next=p-next;p=s; ( D) p-next=s;s-next=p;5.在 一 个 单 链 表 中 , 若 删 除 p 所 指 结 点 的 后 续 结 点 , 则 执 行 ( ) ( A) p-next=p-next-next; ( B)
9、p=p-next; p-next=p-next-next;( C) p-next=p-next; ( D) p =p-next-next;6.下 列 有 关 线 性 表 的 叙 述 中 , 正 确 的 是 ( ) ( A) 线 性 表 中 的 元 素 之 间 隔 是 线 性 关 系 ( B) 线 性 表 中 至 少 有 一 个 元 素 ( C) 线 性 表 中 任 何 一 个 元 素 有 且 仅 有 一 个 直 接 前 趋 ( D) 线 性 表 中 任 何 一 个 元 素 有 且 仅 有 一 个 直 接 后 继 7.线 性 表 是 具 有 n 个 ( ) 的 有 限 序 列 ( n 0)( A
10、) 表 元 素 ( B) 字 符 ( C) 数 据 元 素 ( D) 数 据 项 二 、 判 断 题 1.线 性 表 的 链 接 存 储 , 表 中 元 素 的 逻 辑 顺 序 与 物 理 顺 序 一 定 相 同 。 ( ) 2.如 果 没 有 提 供 指 针 类 型 的 语 言 , 就 无 法 构 造 链 式 结 构 。 ( ) 3.线 性 结 构 的 特 点 是 只 有 一 个 结 点 没 有 前 驱 , 只 有 一 个 结 点 没 有 后 继 , 其 余 的 结 点 只 有 一 个 前 驱和 后 继 。 ( ) 4.语 句 p=p-next 完 成 了 指 针 赋 值 并 使 p 指 针
11、 得 到 了 p 指 针 所 指 后 继 结 点 的 数 据 域 值 。 ( ) 5.要 想 删 除 p 指 针 的 后 继 结 点 , 我 们 应 该 执 行 q=p-next ; p-next=q-next; free(q)。( ) 三 、 填 空 题 1.已 知 P 为 单 链 表 中 的 非 首 尾 结 点 , 在 P 结 点 后 插 入 S 结 点 的 语 句 为 :_ 。2.顺 序 表 中 逻 辑 上 相 邻 的 元 素 物 理 位 置 ( )相 邻 , 单 链 表 中 逻 辑 上 相 邻 的 元 素 物 理 位 置_相 邻 。 3.线 性 表 L ( a1, a2, ., an)
12、 采 用 顺 序 存 储 , 假 定 在 不 同 的 n 1 个 位 置 上 插 入 的 概 率 相同 , 则 插 入 一 个 新 元 素 平 均 需 要 移 动 的 元 素 个 数 是 _ 4.在 非 空 双 向 循 环 链 表 中 , 在 结 点 q 的 前 面 插 入 结 点 p 的 过 程 如 下 : p-prior=q-prior;q-prior-next=p;p-next=q;_; 5.已 知 L 是 无 表 头 结 点 的 单 链 表 , 是 从 下 列 提 供 的 答 案 中 选 择 合 适 的 语 句 序 列 , 分 别 实 现 : ( 1) 表 尾 插 入 s 结 点 的
13、语 句 序 列 是 _(2) 表 尾 插 入 s 结 点 的 语 句 序 列 是 _1. p-next=s; 2. p=L; 3. L=s; 4. p-next=s-next; 5. s-next=p-next; 6. s-next=L; 7. s-next=null; 8. while(p-next!= Q)? p=p-next; 9. while(p-next!=null) p=p-next; 四 、 算 法 设 计 题 1.试 编 写 一 个 求 已 知 单 链 表 的 数 据 域 的 平 均 值 的 函 数 ( 数 据 域 数 据 类 型 为 整 型 ) 。 2.已 知 带 有 头 结
14、 点 的 循 环 链 表 中 头 指 针 为 head,试 写 出 删 除 并 释 放 数 据 域 值 为 x 的 所 有 结 点的 c 函 数 。 3.某 百 货 公 司 仓 库 中 有 一 批 电 视 机 , 按 其 价 格 从 低 到 高 的 次 序 构 成 一 个 循 环 链 表 , 每 个 结 点 有 价格 、 数 量 和 链 指 针 三 个 域 。 现 出 库 ( 销 售 ) m 台 价 格 为 h 的 电 视 机 , 试 编 写 算 法 修 改 原 链 表 。 4.某 百 货 公 司 仓 库 中 有 一 批 电 视 机 , 按 其 价 格 从 低 到 高 的 次 序 构 成 一
15、个 循 环 链 表 , 每 个 结 点 有 价格 、 数 量 和 链 指 针 三 个 域 。 现 新 到 m 台 价 格 为 h 的 电 视 机 , 试 编 写 算 法 修 改 原 链 表 。 5.线 性 表 中 的 元 素 值 按 递 增 有 序 排 列 , 针 对 顺 序 表 和 循 环 链 表 两 种 不 同 的 存 储 方 式 , 分 别 编 写 C函 数 删 除 线 性 表 中 值 介 于 a 与 b( a b) 之 间 的 元 素 。 6.设 A=(a0,a1,a2,.,an-1),B=(b0,b1,b2,.,bm-1)是 两 个 给 定 的 线 性 表 ,它 们 的 结 点 个
16、数分 别 是 n 和 m,且 结 点 值 均 是 整 数 。 若 n=m, 且 ai= bi ( 0 iB。 试 编 写 一 个 比 较 A 和 B 的 C 函 数 , 该 函 数 返 回 -1 或 0 或 1, 分 别 表 示 AB。 7.试 编 写 算 法 ,删 除 双 向 循 环 链 表 中 第 k 个 结 点 。 8.线 性 表 由 前 后 两 部 分 性 质 不 同 的 元 素 组 成 (a0,a1,.,an-1,b0,b1,.,bm-1),m 和 n 为 两部 分 元 素 的 个 数 ,若 线 性 表 分 别 采 用 数 组 和 链 表 两 种 方 式 存 储 ,编 写 算 法 将
17、 两 部 分 元 素 换 位 成(b0,b1,.,bm-1,a0,a1,.,an-1),分 析 两 种 存 储 方 式 下 算 法 的 时 间 和 空 间 复 杂 度 。 9.用 循 环 链 表 作 线 性 表 (a0,a1,.,an-1)和 ( b0,b1,.,bm-1) 的 存 储 结 构 ,头 指 针 分 别 为ah 和 bh, 设 计 C 函 数 , 把 两 个 线 性 表 合 并 成 形 如 ( a0,b0,a1,b1,) 的 线 性 表 , 要 求 不 开 辟新 的 动 态 空 间 ,利 用 原 来 循 环 链 表 的 结 点 完 成 合 并 操 作 ,结 构 仍 为 循 环 链
18、表 ,头 指 针 为 head,并 分 析 算 法 的 时 间 复 杂 度 。 10.试 写 出 将 一 个 线 性 表 分 解 为 两 个 带 有 头 结 点 的 循 环 链 表 , 并 将 两 个 循 环 链 表 的 长 度 放 在 各 自 的头 结 点 的 数 据 域 中 的 C 函 数 。 其 中 ,线 性 表 中 序 号 为 偶 数 的 元 素 分 解 到 第 一 个 循 环 链 表 中 ,序号 为 奇 数 的 元 素 分 解 到 第 二 个 循 环 链 表 中 。 11.试 写 出 把 线 性 链 表 改 为 循 环 链 表 的 C 函 数 。 12.己 知 非 空 线 性 链 表
19、 中 x 结 点 的 直 接 前 驱 结 点 为 y,试 写 出 删 除 x 结 点 的 C 函 数 。 参 考 答 案 : 一 、 选 择 题1. B 2.C 3. D 4. B 5. A 6.A 7、 C二 、 判 断 题 :参 考 答 案 : 1、 2、 3、 4、 5、 三 、 填 空 题1、 s-next=p-next; p-next=s; 2、 一 定 ; 不 一 定 3、 n/2 4、 q-prior=p; 5、 (1)6) 3)(2) 2) 9) 1) 7)四 、 算 法 设 计 题1、#include “stdio.h“#include “malloc.h“typedef s
20、truct nodeint data; struct node *link;NODE;int aver(NODE *head)int i=0,sum=0,ave; NODE *p; p=head;while(p!=NULL)p=p-link;+i;sum=sum+p-data;ave=sum/i;return (ave);2、#include “stdio.h“#include “malloc.h“typedef struct nodeint data; /* 假 设 数 据 域 为 整 型 */struct node *link;NODE;void del_link(NODE *head,i
21、nt x) /* 删 除 数 据 域 为 x 的 结 点 */NODE *p,*q,*s;p=head;q=head-link;while(q!=head)if(q-data=x)p-link=q-link;s=q;q=q-link;free(s); elsep=q;q=q-link;3、void del(NODE *head,float price,int num)NODE *p,*q,*s;p=head;q=head-next;while(q-pricenext;if(q-price=price)q-num=q-num-num;else printf(“无 此 产 品 “);if(q-nu
22、m=0)p-next=q-next;free(q);4、#include “stdio.h“#include “malloc.h“typedef struct nodefloat price;int num;struct node *next;NODE;void ins(NODE *head,float price,int num)NODE *p,*q,*s;p=head;q=head-next;while(q-pricenext;if(q-price=price)q-num=q-num+num;elses=(NODE *)malloc(sizeof(NODE);s-price=price;s
23、-num=num;s-next=p-next;p-next=s;5、 顺 序 表 : 算 法 思 想 : 从 0 开 始 扫 描 线 性 表 , 用 k 记 录 下 元 素 值 在 a 与 b 之 间 的 元 素 个 数 , 对 于 不 满 足 该条 件 的 元 素 , 前 移 k 个 位 置 , 最 后 修 改 线 性 表 的 长 度 。 void del( elemtype list, int *n, elemtype a, elemtype b) int i=0, k=0; while( i=a /* 假 设 循 环 链 表 带 有 头 结 点 */while(q!=head while
24、(q!=head free(r); if(p!=q)p-link=q;6、#define MAXSIZE 100int listAMAXSIZE,listBMAXSIZE;int n,m;int compare(int a,int b)int i=0;while(ai=biif(ibi) return(1);7、void del(DUNODE *head,int i)DUNODE *p;if(i=0)*head=*head-next;*head-prior=NULL;return(0); Elsefor(j=0;jnext;if(p=NULL|ji) return(1);p-prior-nex
25、t=p-next;p-next-prior=p-proir;free(p);return(0);8.顺 序 存 储 :void convert(elemtype list,int l,int h) /* 将 数 组 中 第 l 个 到 第 h 个 元 素 逆 置 */int i;elemtype temp;for(i=h;ilink; /*q 指 向 an-1 结 点 */r=q-link;q-link=NULL; while(r-link!=NULL)r=r-link; /*r 指 向 最 后 一 个 bm-1 结 点 */*head=q;r-link=p; 该 算 法 的 时 间 复 杂
26、度 为 O(n+m),但 比 顺 序 存 储 节 省 时 间 (不 需 要 移 动 元 素 ,只 需 改 变 指 针 ),空间 复 杂 度 为 O(1)9.typedef struct nodeelemtype data;struct node *link;NODE;NODE *union(NODE *ah,NODE *bh)NODE *a,*b,*head,*r,*q;head=ah;a=ah;b=bh;while(a-link!=ahq=b-link;a-link=b;b-link=r;a=r;b=q;if(a-link=ah) /*a 的 结 点 个 数 小 于 等 于 b 的 结 点
27、个 数 */a-link=b;while(b-link!=bh)b=b-link;b-link=head;if(b-link=bh) /*b 的 结 点 个 数 小 于 a 的 结 点 个 数 */ r=a-link;a-link=b;b-link=r;return(head);该 算 法 的 时 间 复 杂 度 为 O(n+m),其 中 n 和 m 为 两 个 循 环 链 表 的 结 点 个 数 .10. typedef struct nodeelemtype data;struct node *link;NODE;void analyze(NODE *a) NODE *rh, *qh, *
28、r,*q,*p; int i=0, j=0; /*i 为 序 号 是 奇 数 的 结 点 个 数 j 为 序 号 是 偶 数 的 结 点 个 数 */p=a; rh=( NODE *) malloc( sizeof( NODE) ) ; /*rh 为 序 号 是 奇 数 的 链 表 头 指 针 */qh=(NODE *)malloc(sizeof(NODE); /*qh 为 序 号 是 偶 数 的 链 表 头 指 针 */r=rh;q=qh;while(p!=NULL)r-link=p;r=p;i+;p=p-link;if(p!=NULL)q-link=p;q=p;j+;p=p-link;rh
29、-data=i;r-link=rh;qh-data=j; q-link=qh; 11.typedef struct nodeelemtype data;struct node *link;NODE;void change(NODE *head)NODE *p;p=head; if(head!=NULL)while(p-link!=NULL)p=p-link;p-link=head;12.typedef struct nodeelemtype data;struct node *link;NODE;void del(NODE *x,NODE *y)NODE *p,*q;elemtype d1;
30、p=y;q=x;while(q-next!=NULL) /* 把 后 一 个 结 点 数 据 域 前 移 到 前 一 个 结 点 */ p-data=q-data;q=q-link;p=q;p-link=NULL; /* 删 除 最 后 一 个 结 点 */free(q);第 三 章 栈 和 队 列一 、 选 择 题 1. 一 个 栈 的 入 栈 序 列 是 a,b,c,d,e,则 栈 的 不 可 能 的 输 出 序 列 是 ( ) 。( A) edcba( B) decba( C) dceab ( D) abcde 2.栈 结 构 通 常 采 用 的 两 种 存 储 结 构 是 ( ) 。(
31、 A) 线 性 存 储 结 构 和 链 表 存 储 结 构 ( B) 散 列 方 式 和 索 引 方 式( C) 链 表 存 储 结 构 和 数 组 ( D) 线 性 存 储 结 构 和 非 线 性 存 储 结 构3.判 定 一 个 栈 ST(最 多 元 素 为 m0)为 空 的 条 件 是 ( ) 。( A) ST- top!=0 ( B) ST- top=0 ( C) ST- top!=m0 ( D) ST- top=m04.判 定 一 个 栈 ST(最 多 元 素 为 m0)为 栈 满 的 条 件 是 ( ) 。( A) ST-top!=0 ( B) ST-top=0 ( C) ST-t
32、op!=m0-1( D) ST-top=m0-15.一 个 队 列 的 入 列 序 列 是 1,2,3,4,则 队 列 的 输 出 序 列 是 ( ) 。( A) 4,3,2,1( B) 1,2,3,4( C) 1,4,3,2( D) 3,2,4,16.循 环 队 列 用 数 组 A0,m-1存 放 其 元 素 值 ,已 知 其 头 尾 指 针 分 别 是 front 和 rear 则 当 前 队 列中 的 元 素 个 数 是 ( )( A) (rear-front+m)%m ( B) rear-front+1 ( C) rear-front-1( D) rear-front7.栈 和 队 列
33、 的 共 同 点 是 ( )( A) 都 是 先 进 后 出 ( B) 都 是 先 进 先 出( C) 只 允 许 在 端 点 处 插 入 和 删 除 元 素 ( D) 没 有 共 同 点8.表 达 式 a*(b+c)-d 的 后 缀 表 达 式 是 ( ) 。( A) abcd*+-( B) abc+*d- ( C) abc*+d-( D) -+*abcd9.4 个 元 素 a1, a2, a3 和 a4 依 次 通 过 一 个 栈 , 在 a4 进 栈 前 , 栈 的 状 态 , 则 不 可 能 的 出 栈 序 是( )(A)a4, a3, a2, a1 (B)a3, a2, a4, a1
34、 (C)a3, a1, a4, a2 (D)a3, a4, a2, a110.以 数 组 Q0m 1存 放 循 环 队 列 中 的 元 素 , 变 量 rear 和 qulen 分 别 指 示 循 环 队 列 中 队 尾元 素 的 实 际 位 置 和 当 前 队 列 中 元 素 的 个 数 , 队 列 第 一 个 元 素 的 实 际 位 置 是 ( )(A)rear qulen (B)rear qulen m (C)m qulen (D)1 ( rear m qulen) % m二 、 填 空 题1.栈 的 特 点 是 _,队 列 的 特 点 是 _。2.线 性 表 、 栈 和 队 列 都 是
35、 _结 构 ,可 以 在 线 性 表 的 _位 置插 入 和 删 除 元 素 , 对 于 栈 只 能 在 _插 入 和 删 除 元 素 , 对 于 队 列 只 能 在 _插 入 元素 和 _删 除 元 素 。3.一 个 栈 的 输 入 序 列 是 12345,则 栈 有 输 出 序 列 12345 是 _。 (正 确 /错 误 )4.设 栈 S 和 队 列 Q 的 初 始 状 态 皆 为 空 , 元 素 a1, a2, a3, a4, a5 和 a6 依 次 通 过 一 个 栈 , 一个 元 素 出 栈 后 即 进 入 队 列 Q, 若 6 个 元 素 出 队 列 的 顺 序 是 a3, a5
36、, a4, a6, a2, a1 则 栈 S至 少 应 该 容 纳 _个 元 素 。三 、 算 法 设 计 题 1.假 设 有 两 个 栈 s1 和 s2 共 享 一 个 数 组 stackM,其 中 一 个 栈 底 设 在 stack0处 , 另 一 个 栈底 设 在 stackM-1处 。 试 编 写 对 任 一 栈 作 进 栈 和 出 栈 运 算 的 C 函 数 push( x,i)和 pop(i),i=l,2。 其 中 i=1 表 示 左 边 的 栈 , ,i=2 表 示 右 边 的 栈 。 要 求 在 整 个 数 组 元 素 都 被 占 用 时 才 产 生溢 出 。2.利 用 两 个
37、 栈 s1,s2 模 拟 一 个 队 列 时 ,如 何 用 栈 的 运 算 来 实 现 该 队 列 的 运 算 ?写 出 模 拟 队 列 的插 入 和 删 除 的 C 函 数 。 一 个 栈 s1 用 于 插 入 元 素 ,另 一 个 栈 s2 用 于 删 除 元 素 .参 考 答 案 :一 、 选 择 题1. C 2.A 3. B 4. B 5. B 6.B 7、 C 8、 C 9、 C 10、 D 二 、 填 空 题1、 先 进 先 出 ; 先 进 后 出 2、 线 性 ; 任 何 ; 栈 顶 ; 队 尾 ; 对 头 3、 正 确 的 4、 3三 、 算 法 设 计 题1.#define
38、M 100elemtype stackM;int top1=0,top2=m-1;int push(elemtype x,int i)if(top1-top2=1) return(1); /*上 溢 处 理 */elseif(i=1) stacktop1+=x;if(i=2)stacktop2-=x;return(0); int pop(elemtype *px,int i)if(i=1)if(top1=0) return(1);else top1-;*px=stacktop1;return(0);elseif(i=2)if(top2=M-1) return(1);elsetop2+;*px=
39、stacktop2;return(0);2.elemtype s1MAXSIZE,s2MAZSIZE;int top1,top2;void enqueue(elemtype x)if(top1=MAXSIZE) return(1);elsepush(s1,x);return(0);void dequeue(elemtype *px)elemtype x;top2=0;while(!empty(s1)pop(s1,push(s2,x);pop(s2,while(!empty(s2)pop(s2,push(s1,x);第 四 章 串 一 、 选 择 题 1.下 列 关 于 串 的 叙 述 中 ,
40、正 确 的 是 ( ) (A)一 个 串 的 字 符 个 数 即 该 串 的 长 度 (B)一 个 串 的 长 度 至 少 是 1 (C)空 串 是 由 一 个 空 格 字 符 组 成 的 串 (D)两 个 串 S1 和 S2 若 长 度 相 同 , 则 这 两 个 串 相 等2.字 符 串 “abaaabab“的 nextval 值 为 (? )(A)(0,1,01,1,0,4,1,0,1) (B)(0,1,0,0,0,0,2,1,0,1)(C)(0,1,0,1,0,0,0, 1,1) (D)(0,1,0,1,0,1,0,1,1)3.字 符 串 满 足 下 式 ,其 中 head 和 tai
41、l 的 定 义 同 广 义 表 类 似 ,如 head(xyz)= x,tail(xyz)= yz,则 s=( )。 concat(head(tail(s),head(tail(tail(s)= dc。(A)abcd (B)acbd (C)acdb (D)adcb4.串 是 一 种 特 殊 的 线 性 表 ,其 特 殊 性 表 现 在 ( )(A)可 以 顺 序 存 储 (B)数 据 元 素 是 一 个 字 符(C)可 以 链 式 存 储 (D)数 据 元 素 可 以 是 多 个 字 符5 设 串 S1=ABCDEFG,s2=PQRST,函 数 CONCAT( X, Y) 返 回 X 和 Y
42、串 的 连 接 串 ,SUBSTR( S, I, J) 返 回 串 S 从 序 号 I 开 始 的 J 个 字 符 组 成 的 字 串 , LENGTH( S) 返 回 串 S 的长 度 , 则 CONCAT( SUBSTR( S1, 2, LENGTH( S2) ) , SUBSTR( S1, LENGTH( S2) , 2) ) 的结 果 串 是 ( )( A) BCDEF (B) BCDEFG (C)BCPQRST (D)BCDEFEF 二 、 算 法 设 计 1.分 别 在 顺 序 存 储 和 一 般 链 接 存 储 两 种 方 式 下 ,用 C 语 言 写 出 实 现 把 串 s1
43、复 制 到 串 s2 的 串复 制 函 数 strcpy(s1,s2)。2.在 一 般 链 接 存 储 (一 个 结 点 存 放 一 个 字 符 )方 式 下 ,写 出 采 用 简 单 算 法 实 现 串 的 模 式 匹 配 的C 语 言 函 数 int L_index(t,p)。参 考 答 案 :一 、 选 择 题 1. A 2.B 3. D 4. D 5. D 二 、 算 法 设 计 1.顺 序 存 储 : #include “string.h“#define MAXN 100char sMAXN;int S_strlen(char s)int i;for(i=0;si!=0;i+);re
44、turn(i);void S_strcpy(char s1,char s2) /4.3 题int i;for(i=0;s1i!=0;i+)s2i=s1i;s2i=0;一 般 链 接 存 储 : #include “stdio.h“typedef struct nodechar data;struct node *link;NODE;NODE *L_strcpy(NODE *s1) NODE *s2,*t1,*t2,*s;if(s1=NULL) return(NULL);elset1=s1;t2=(NODE *)malloc(sizeof(NODE);s2=t2;while(t1!=NULL)s
45、=(NODE *)malloc(sizeof(NODE);s-data=t1-data;t2-link=s;t2=s;t1=t1-link;t2-link=NULL;s=s2;s2=s2-link;free(s);return(s2); 2.#include “stdio.h“typedef struct nodechar data;struct node *link;NODE;int L_index(NODE *t,NODE *p) NODE *t1,*p1,*t2;?int i;t1=t;i=1;while(t1!=NULL)p1=p;t2=t1-link;while(p1-data=t1
46、-datat1=t1-link;if(p1=NULL) return(i);i+;t1=t2;return(0);第 五 章 数 组 和 广 义 表一 、 选 择 题 1. 常 对 数 组 进 行 的 两 种 基 本 操 作 是 ( )( A) 建 立 与 删 除 ( B) 索 引 和 修 改 ( C) 查 找 和 修 改 ( D) 查 找 与 索 引2.二 维 数 组 M 的 元 素 是 4 个 字 符 (每 个 字 符 占 一 个 存 储 单 元 )组 成 的 串 ,行 下 标 i 的 范 围 从 0到 4,列 下 标 j 的 范 围 从 0 到 5,M 按 行 存 储 时 元 素 M35
47、的 起 始 地 址 与 M 按 列 存 储 时 元 素 ( ) 的 起 始 地 址 相 同 。( A) M24( B) M34( C) M35( D) M443.数 组 A810中 ,每 个 元 素 A 的 长 度 为 3 个 字 节 ,从 首 地 址 SA 开 始 连 续 存 放 在 存 储 器 内 ,存 放 该 数 组 至 少 需 要 的 单 元 数 是 ( ) 。( A) 80( B) 100( C) 240( D) 2704.数 组 A810中 ,每 个 元 素 A 的 长 度 为 3 个 字 节 ,从 首 地 址 SA 开 始 连 续 存 放 在 存 储 器 内 ,该 数 组 按 行 存 放 时 ,元 素 A74的 起 始 地 址 为 ( ) 。( A) SA+141( B) SA+144( C)