华北水利水电大学数据结构实验一
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
华北水利水电大学数据结构实验报告
2019~2020学年第2学期19级计算机科学与技术专业
实验一线性表及其应用
实验目的:
1 .掌握用C/C++ 语言调试程序的基本方法。
2.掌握线性表的基本运算,如插入、删除等。
实验内容:
1.编写一个程序,实现顺序表的各种基本运算,在此基础上完成如下功能:
1)初始化顺序表L。
2)依次在顺序表L 中插入元素a、b、c、
e。
3)输出顺序表L 。
4)输出顺序表L 的长度。
5)输出顺序表L 的第 3 个元素。
6)输出元素 a 的位置。
7)在第 4 个元素之前插入元素f。
8)输出顺序表L 。
9)删除第 3 个元素。
10)输出顺序表L 。
2.编写一个程序,实现以下功能,L1=(x1,x2,⋯,x n),L2=(y 1,y2,⋯,y m),它们是两个线性表(L1和L2中的值都不重复),采用带头结点的单链表存储,设计一个算法合并L1和L 2,结果存放
在线性表L3 中,要求如下:
L3=(x1,y1,x2,y2,⋯,x m,y m,x m+1,⋯,x n)当m n 时
L3=(x1,y1,x2,y2,⋯,x n,y n,y n+1,⋯,y m)当m>n 时
L3 仍采用单链表存储,算法的空间复杂度为O(1)。
(1)建立两个单链表L1和L2 并输出。
(2)将合并L1和L 2为L3。
(3)输出单链表L3。
三、实验要求:
1.完成算法设计和程序设计并上机调试通过。
2.撰写实验报告,提供实验结果和数据。
3.写出算法设计小结和心得。
四、程序源代码:
第 1 题:#include
#include
#define MaxSize 10
typedef char ElemType;
1)顺序表定义
typedef struct{
ElemType data[MaxSize];
int length;
}SqList;
(2)初始化顺序表
void InitList(SqList *&l){ l=(SqList *)malloc(sizeof(SqList)); l->length=0;
}
(3)返回顺序表的长度
int ListLength(SqList *l){ return(l->length);
}
( 4)在顺序表第i 个位置插入元素 e bool ListInsert(SqList *&l,int i,ElemType e){ int j;
if(i<1||i>l->length+1){
return false;
}
i--;
if(l->length==MaxSize){
return false;
}
for(j=l->length;j>i;j--){ l->data[j]=l->data[j-1];
}
l->data[i]=e;
++l->length;
return true;
}
5)在顺序表中取值
bool GetElem(SqList *l,int i,ElemType &e){ if(i<1||i>l->length){ return false;
}else{
e=l->data[i-1];
return true;
}
}
( 6)删除顺序表中第i 个元素bool ListDelete(SqList *&l,int i){
int j;
if(i<1||i>l->length){
return false;
}
i--;
for(j=i;j
l->data[j]=l->data[j+1];
}
l->length--;
return true;
}
(7) 主函数
int main(){
SqList *l;
InitList(l);
ListInsert(l,1,'a');
ListInsert(l,2,'b');
ListInsert(l,3,'c');
ListInsert(l,4,'d');
printf(" 输出顺序表:");
PrintList(l);
printf(" 此时顺序表的长度为%d\n",ListLength(l)); ElemType e;
GetElem(l,3,e);
printf(" 顺序表上的第 3 个元素为%c\n",e);
printf(" 在第 4 个元素之前插入元素f:\n");
ListInsert(l,4,'f');
PrintList(l);
printf(" 删除第 3 个元素:\n");
ListDelete(l,3);
PrintList(l);
return 0;
}
第二题:#include
#include
(1)定义单链表typedef struct LNode {
ElemType data; // 数据域
struct LNode *next; // 指向后继结点
}LinkNode; // 声明单链表结点类型
(2)尾插法建立单链表
static void CreateListRear(LinkNode *&L, ElemType a[], int n)
{ // 指针的引用n 指明元素个数
LinkNode *s, *r;
int i;
L = (LinkNode *)malloc(sizeof(LinkNode)); // 创建头结点
L->next = NULL;
r = L; // r 始终指向尾结点, 开始时指向头结点
for(i = 0; i < n; i++)