华北水利水电大学数据结构实验一

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;jlength-1;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 typedef char ElemType;

(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++)

相关文档
最新文档