数据结构实验报告
姓名: 学号: 专业:电子商务 班 级:10-1班
指导教师:张先宜 实验时间: 实验地点:合工大新区四号实验楼
链表试验
1. 实验内容和要求 内容:
编写算法实现下列问题的求解。
<1>求链表中第i个结点的指针(函数),若不存在,则返回NULL。 实验测试数据基本要求:
第一组数据:链表长度n≥10,i分别为5,n,0,n+1,n+2 第二组数据:链表长度n=0,i分别为0,2 <2>在第i个结点前插入值为x的结点。 实验测试数据基本要求:
第一组数据:链表长度n≥10,x=100, i分别为5,n,n+1,0,1,n+2 第二组数据:链表长度n=0,x=100,i=5 <3>删除链表中第i个元素结点。 实验测试数据基本要求:
第一组数据:链表长度n≥10,i分别为5,n,1,n+1,0 第二组数据:链表长度n=0, i=5
<4>在一个递增有序的链表L中插入一个值为x的元素,并保持其递增有序特性。 实验测试数据基本要求:
链表元素为 (10,20,30,40,50,60,70,80,90,100), x分别为25,85,110和8
<5>将单链表L中的奇数项和偶数项结点分解开(元素值为奇数、偶数),申请2个头结点,把分开的奇数项和偶数项分别链接到这2个头结点上,然后再将这两个新链表同时输出在屏幕上,并保留原链表的显示结果,以便对照求解结果。 实验测试数据基本要求:
第一组数据:链表元素为 (1,2,3,4,5,6,7,8,9,10,20,30,40,50,60) 第二组数据:链表元素为 (10,20,30,40,50,60,70,80,90,100)
<6>求两个递增有序链表L1和L2中的公共元素,并以同样方式连接成链表L3。 实验测试数据基本要求: 第一组
第一个链表元素为 (1,3,6,10,15,16,17,18,19,20)
第二个链表元素为 (1,2,3,4,5,6,7,8,9,10,18,20,30) 第二组
第一个链表元素为 (1,3,6,10,15,16,17,18,19,20) 第二个链表元素为 (2,4,5,7,8,9,12,22) 第三组
第一个链表元素为 ()
第二个链表元素为 (1,2,3,4,5,6,7,8,9,10)
要求:
一、本次实验中的链表结构均为带头结点的单链表; 二、链表结构定义,算法实现放入库文件“linkList.h”; 三、运算和变量命名直观易懂,并有相应的注释。 2. 实验目的
一、理解线性表的链式存储结构。
二、熟练掌握单链表结构及有关算法的设计。
三、根据具体问题的需要,设计出合理的表示数据的链表结构,并设计相关算法。
3. 数据结构设计
typedef int ElemType; typedef struct LNode { ElemType data; struct LNode *next; }LNode,*LinkList;
4. 算法设计
#include\void main() {
LinkList LA, La,Lb,Lc,A,B,C; ElemType e; int pos,Len_La; InitLinkList(La); InitLinkList(LA); InitLinkList(Lb); InitLinkList(Lc); InitLinkList(C); InitLinkList(A); InitLinkList(B);
puts(\以下为第1题程序***\ printf(\的长度为: \ scanf(\ putchar('\\n');
FillLinkList(La,Len_La); putchar('\\n');
printf(\添加元素后的La为:\\n\ PrintLinkList(La,Len_La); putchar('\\n');
printf(\请输入要插入新节点的位置:\
scanf(\
printf(\请输入要插入新节点的值:\ scanf(\
LinkListInsert(La,pos,e); Len_La++; putchar('\\n');
printf(\插入新节点后的La为:\\n\ PrintLinkList(La,Len_La); putchar('\\n');
puts(\以下为第2题程序***\ printf(\请输入要删除节点的位置:\ scanf(\
LinkListDelete(La,pos,e); Len_La--; putchar('\\n');
printf(\删除节点后的La为:\\n\ PrintLinkList(La,Len_La); putchar('\\n');
puts(\以下为第3题程序***\ printf(\请输入要查找的节点的值:\ scanf(\
pos = LinkListLocate(La,e);
printf(\值为%d的节点的位置是:%d\\n\ putchar('\\n');
puts(\以下为第4题程序***\ printf(\的长度为: \ scanf(\ putchar('\\n');
FillLinkList(LA,Len_La); putchar('\\n');
printf(\添加元素后的La为:\\n\ PrintLinkList(LA,Len_La); putchar('\\n');
printf(\请输入要插入新节的值为:\ scanf(\ ListInsert(LA,e); Len_La++;
putchar('\\n');
printf(\插入新节点后的La为:\\n\ PrintLinkList(LA,Len_La); putchar('\\n'); InitLinkList(La);
puts(\以下为第5题程序***\ printf(\的长度为: \
scanf(\ putchar('\\n');
FillLinkList(La,Len_La); putchar('\\n');
printf(\添加元素后的La为:\\n\ PrintLinkList(La,Len_La); putchar('\\n'); wjj(La,Lb,Lc); putchar('\\n'); printf(\为:\\n\ PrintLinkList1(Lb); putchar('\\n');
printf(\为:\\n\ PrintLinkList1(Lc); putchar('\\n');
puts(\以下为第6题程序***\ printf(\的长度为: \ scanf(\ putchar('\\n');
FillLinkList(A,Len_La); putchar('\\n');
printf(\的长度为: \ scanf(\ putchar('\\n');
FillLinkList(B,Len_La); putchar('\\n'); wji(A,B,C);
printf(\为:\\n\ PrintLinkList1(C); }
5. 运行和测试