2015年数据结构总0820(上交)实验一线性表的链式存储结构.pdf
《2015年数据结构总0820(上交)实验一线性表的链式存储结构.pdf》由会员分享,可在线阅读,更多相关《2015年数据结构总0820(上交)实验一线性表的链式存储结构.pdf(50页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、实 验 一 线 性 表 的 链 式 存 储 结 构 一、实 验 目 的:1.掌 握 线 性 表 的 链 式 存 储 结 构。2.熟 练 地 利 用 链 式 存 储 结 构 实 现 线 性 表 的 基 本 操 作。3.能 熟 练 地 掌 握 链 式 存 储 结 构 中 算 法 的 实 现。二、实 验 内 容:1.用 头 插 法 或 尾 插 法 建 立 带 头 结 点 的 单 链 表。2.实 现 单 链 表 上 的 插 入、删 除、查 找、修 改、计 数、输 出 等 基 本 操 作。三、实 验 要 求:I.根 据 实 验 内 容 编 写 程 序,上 机 调 试、得 出 正 确 的 运 行 程 序。
2、2.写 出 实 验 报 告(包 括 源 程 序 和 运 行 结 果)。四、实 验 学 时:2 学 时 五、实 验 步 骤:1.进 入 编 程 环 境,建 立 一 新 文 件;2.参 考 以 下 相 关 内 容,编 写 程 序,观 察 并 分 析 输 出 结 果。定 义 单 链 表 的 数 据 类 型,然 后 将 头 插 法 和 尾 插 法、插 入、删 除、查 找、修 改、计 数、输 出 等 基 本 操 作 都 定 义 成 子 函 数 的 形 式,最 后 在 主 函 数 中 调 用 它,并 将 每 一 种 操 作 前 后 的 结 果 输 出,以 查 看 每 一 种 操 作 的 效 果。部 分 参
3、 考 程 序 单 链 表 的 建 立(头 插 法),插 入,删 除,查 找、修 改、计 数、输 出#i n c 1 ude#define elemtype intstruct link elemtype data;元 素 类 型 link*next;指 针 类 型,存 放 下 一 个 元 素 地 址);头 插 法 建 立 带 头 结 点 的 单 链 表 link*hcreat()link s,p;elemtype i;coutnext=NULL;while(i)当 输 入 的 数 据 不 为 0 时;循 环 建 单 链 表 s=new link;s-data=i;s-next=p-next;p
4、-next=s;c in i;return p;输 出 单 链 表 void print(1 ink*head)(link*p;p=head-next;while(p-next!=NULL)(c o u t p-d ata-”;输 出 表 中 非 最 后 一 个 元 素 p=p-next;)coutp-data;输 出 表 中 最 后 一 个 元 素 coutendl;I 在 单 链 表 head中 查 找 值 为 x 的 结 点 Link*Locate(link*head,elemtype x)(Link*p;p=head-next;while(p!=NULL)&(p-data!=x)p=p
5、-next;return p;在 head为 头 指 针 的 单 链 表 中,删 除 值 为 x 的 结 点 void deletel(link*head,elemtype x)(link*p,*q;q=head;p=head-next;while(p!=NULL)&(p-data!=x)(q=p;p=p-next;If(p=NULL)c o u t 要 删 除 的 结 点 不 存 在”;elseq-next=p-next;delete(p);)在 头 指 针 head所 指 的 单 链 表 中,在 值 为 x 的 结 点 之 后 插 入 值 为 y 的 结 点 void insert(lin
6、k*head,elemtype x,elemtype y)link*p,*s;s=new link;s-data=y;if(head,next=NULL)链 表 为 空(head-next=s;s-next=NULL:)p=Locate(head,x);调 用 查 找 算 法 if(p=NULL)c o u tv插 入 位 置 非 法”:else(s-next=p-next;p-next=s;)将 单 链 表 p 中 所 有 值 为 x 的 元 素 修 改 成 yvoid change(link*p,elemtype x,elemtype y)(link*q;q=p-next;while(q!
7、=NULL)if(q-data=x)q-data=y;q=q-next;)void count(link*h)统 计 单 链 表 中 结 点 个 数(link*p;int n=0;p=h-next;while(p!=NULL)n+;p=p-next;return n;)void main()int n;elemtype x,y;link*p,*q;p=hcreat();头 插 法 建 立 链 表 print(p);输 出 刚 建 立 的 单 链 表c o u t 请 输 入 要 删 除 的 元 素”;c in y;deletel(p,y);print(p);输 出 删 除 后 的 结 果 co
8、utvv”请 输 入 插 入 位 置 的 元 素 值(将 待 插 元 素 插 入 到 它 的 后 面)”;c in x;coutvv”请 输 入 待 插 元 素 值&c in y;insert(p,x,y);print(p);输 出 插 入 后 的 结 果 coutcv”请 输 入 要 修 改 前、后 的 元 素 值”;c i n x y;change(p,x,y);print(p);c o u t 请 输 入 要 查 找 的 元 素 值”;c in x;q=Locate(p,x);if(q=NULL)coutvvxv”不 在 表 中,找 不 到!”vendl:else coutvvxvv”在
9、 表 中,己 找 到!”vendl;n=count(p);c o u t 链 表 中 结 点 个 数 为:n e n d l:)单 链 表 的 建 立(尾 插 法)、插 入、删 除、查 找、修 改、计 数、输 出#include#define elemtype intstruct link elemtype data;元 素 类 型 link*next;指 针 类 型,存 放 下-个 元 素 地 址);尾 插 法 建 立 带 头 结 点 的 单 链 表 link*rcreat()link*s,*p,*r;elemtype i;coutnext=NULL;while(i)s=new link;s
10、-data=i;r-next=s;r=s;c in i;r-next=NULL;return p;输 出 单 链 表 void print(link*head)link*p;p=head-next;while(p-next!=NULL)(coutvvp-datavv”-”;输 出 表 中 非 最 后 一 个 元 素 p=p-next;)coutp-data;输 出 表 中 最 后 一 个 元 素 coutendl;)link*Locate(1 ink*head,int x)在 单 链 表 中 查 找 第 x 个 结 点 link*p;p=head:int j=0;while(p!=NULL)&
11、(jnext;j+;return p;void delete 1(link*head,elemtype x)在 head为 头 指 针 的 单 链 表 中,删 除 值 为 x 的 结 点(link*p,*q;q=head;p=head-next;while(p!=NULL)&(p-data!=x)(q=p;p=p-next;)if(p=NULL)coutnext=p-next;delete(p);void insert(link*head,int x,elemtype y)在 头 指 针 head所 指 单 链 表 中,在 第 x 个 结 点 之 后 插 入 值 为 y 的 结 点 link*
12、p,*s;s=new link;s-data=y;if(head-next=NULL)链 表 为 空(head-next=s;s-next=NULL:p=Locate(head,x);调 用 查 找 算 法 if(p=NULL)c o u t 插 入 位 置 非 法”;elses-next=p-next;p-next=s;)void change(link*p,elemtype x,elemtype y)将 单 链 表 P 中 所 有 值 为 X的 元 素 改 成 值 为 ylink*q;q=p-next;while(q!=NULL)if(q-data=x)q-data=y;q=q-next;
13、)void count(link*h)统 计 单 链 表 中 结 点 个 数(link*p;int n=0;p=h-next;while(p!=NULL)n+;p=p-next;return n;void main()int n;link p,q;p=rcreat();尾 插 法 建 立 链 表 print(p);输 出 刚 建 立 的 单 链 表 cout”请 输 入 要 删 除 的 元 素”;c in y;deletel(p,y);print(p);/输 出 删 除 后 的 结 果 c o u t”请 输 入 插 入 位 置”;c in x;coutvv”请 输 入 待 插 元 素 值”;
14、c in y;insert(p,x,y);print(p);输 出 插 入 后 的 结 果 c o u tv请 输 入 修 改 前、后 的 元 素 值”;c i n x y;change(p,x,y);print(p);c o u t 请 输 入 要 查 找 的 元 素 值”;c in x;q=Locate(p,x);if(q=N U L L)coutxw 不 在 表 中,找 不 到!e n d l;else c o u t x v 在 表 中,已 找 到!”e n d l:n=count(p);coutv”链 表 中 结 点 个 数 为:n endl;六、选 作 实 验 试 设 计 一 元
15、多 项 式 相 加(链 式 存 储)的 加 法 运 算。A(X)=7+3X+9X8+5X9B(X)=8X+22X7-9X81.建 立 一 元 多 项 式;2.输 出 相 应 的 一 元 多 项 式;3.相 加 操 作 的 实 现。实 验 二 循 环 链 表 的 操 作 一、实 验 目 的:通 过 本 实 验 中 循 环 链 表 和 双 向 链 表 的 使 用,使 学 生 进 一 步 熟 练 掌 握 链 表 的 操 作 方 式。二、实 验 内 容:本 次 实 验 可 以 从 以 下 两 个 实 验 中 任 选 一 个:1.建 立 一 个 单 循 环 链 表 并 实 现 单 循 环 链 表 上 的
16、 逆 置。所 谓 链 表 的 逆 置 运 算(或 称 为 逆 转 运 算)是 指 在 不 增 加 新 结 点 的 前 提 下,依 次 改 变 数 据 元 素 的 逻 辑 关 系,使 得 线 性 表,a2,a3,a j成 为,a?,a2,a)。2.构 建 一 个 双 向 链 表,实 现 插 入、查 找 和 删 除 操 作。三、实 验 要 求:1.根 据 实 验 内 容 编 写 程 序,上 机 调 试、得 出 正 确 的 运 行 程 序。2.写 出 实 验 报 告(包 括 源 程 序 和 运 行 结 果)。四、实 验 学 时:2 学 时 五、实 验 步 骤:1.进 入 编 程 环 境,建 立 一
17、新 文 件;2.参 考 以 下 相 关 内 容,编 写 程 序,观 察 并 分 析 输 出 结 果。建 立 一 个 带 头 结 点 的 单 循 环 链 表,从 头 到 尾 扫 描 单 链 表 L,把 p 作 为 活 动 指 针,沿 着 链 表 向 前 移 动,q 作 为 p 前 趋 结 点,r 作 为 q 的 前 趋 结 点。其 中,q 的 next值 为 r;r 的 初 值 置 为 heado 双 向 链 表 的 构 造 与 单 链 表 相 同,至 于 它 的 插 入 与 删 除 运 算 比 单 链 表 复 杂,插 入 运 算 需 要 4 步 操 作,删 除 运 算 需 要 2 步 操 作,
18、注 意 语 句 的 次 序,不 要 任 意 交 换 位 置,以 免 不 能 正 确 插 入 或 删 除 结 点。部 分 参 考 程 序 循 环 链 表 头 文 件 h l.h 的 内 容#define NULLO#include#includetypedef struct nodeint num;struct node*next;linklist;以 下 是 主 程 序 in clu d e”h l.h 输 出 循 环 链 表 的 信 息 void output(linklist*head)linklist*p;p=head-next;while(p!=head)printf(%d”,p-nu
19、m);p=p-next;printf(“n”);建 立 单 循 环 链 表 Linklist*creat(int n)(int k;linklist*head,*r,*p;p=(linklist*)malloc(sizeof(linklist);head=p;r=p;p-next=p;for(k=l;knum=k;r-next=p;r=p;)p-next=head;retum(head);)逆 置 函 数 linklist*invert(linklist*head)(Linklist*p,*q,*r;p=head-next;q=head;while(p!=head)r=q;q二 p;p=p-n
20、ext;q-next=r;)head-next=q;retum(head);void main()int n;Linklist.head;printf(“输 入 所 建 立 的 循 环 链 表 的 结 点 个 数:n”);scanf(d”,&n);head=creat(n);p rin tfC输 出 建 立 的 单 循 环 链 表:n);output(head);p rin tfC现 在 进 行 逆 置!n);head=invert(head):printf(输 出 进 行 逆 置 运 算 后 的 单 循 环 链 表 的 结 点 信 息!n j;output(head);)双 向 链 表 参
21、考 程 序 以 下 是 头 文 件 hh.h 的 内 容#include#includetypedef struct dupnodeint data;struct dupnode*next,prior;Jdulinklist;以 下 是 主 程 序 的 内 容#inckide”hh.h/create函 数 用 来 构 建 双 向 链 表 dulinklist create。dulinklist*head,*p,int i,n;head=(dulinklist*)malloc(sizeof(dulinklist);head-next=NULL;head-prior=NULL;r=head;pri
22、ntf(“请 输 入 所 建 双 向 链 表 中 结 点 的 个 数:n”);scanf(%d”,&n);for(i=l;idata);p-next=NULL;r-next=p;p-prior=r;r=r-next;return(head);fin d函 数 用 来 实 现 在 双 向 链 表 中 按 序 号 查 找 某 个 结 点 的 功 能。void find(dulinklist*h)(int k,i;dulinklist*p;p=h;i=0:primf(输 入 要 查 找 结 点 的 序 号:n);scanf(v%d”,&k);while(p!=NULL)&(inext;i+:)if(
23、p)printfC所 查 到 的 结 点 的 值 为:n);printf(w%dn”,p-data);)elsep rin tf(没 找 到 该 结 点!n);)/insdulist函 数 用 来 实 现 在 双 向 链 表 中 按 序 号 插 入 结 点 的 功 能 dulinklist*insdulist(dulinklist*head,int i,int x)dulinklist*p,*s;in tj;p=head;j=0;whi 1 e(p-next!=head)&(jnext;j+;)If(j=i-1)(s=(dulinklist*)malloc(sizeof(dulinklist)
24、;s-data=x;s-prior=p;s-next=p-next;p-next-prior=s;p-next=s;)elseprintf(v errorll);return head;deledulist函 数 实 现 在 双 向 链 表 中 按 序 号 删 除 某 个 结 点 的 功 能 dulinklist*deledulist(dulinklist*head,int i)dulinklist*p;in tj;p=head;j=while(p-next!=head)&(jnext;j+;If(j=i)p-prior-next=p-next;p-next-prior=p-prior;fre
25、e(p);)elseprintf(v error n);return head;/output函 数 用 来 输 出 整 个 双 向 链 表 的 结 点 值 void output(dulinklist*h)(dulinklist*p;p=h-next;while(p!=NULL)printfC输 出 该 双 向 链 表 的 结 点,分 别 为:n);printf(d n,p-data);p=p-next;void main()dulinklist*head;int flag=l,i,k,x;while(flag)/flag作 为 判 断 循 环 的 标 志 位 printfC 1.建 立 双
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2015 数据结构 0820 上交 实验 线性 链式 存储 结构
限制150内