算法与数据结构实验报告模版项目一

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

算法与数据结构实训(验)报告

班级:计算机3101 姓名:吴华棉座号:41 指导教师:林扬武成绩:

项目一:线性表的应用

一、实验目的:

1、掌握线性表的特点;

2、掌握线性表顺序存储结构和链式存储结构的基本运算;

3、掌握线性链表的创建、插入、删除和显示线性表中元素等基本操作;

二、实验内容:

1、顺序表的应用

有两个有序顺序表La和Lb,其数据元素均按从小到大的升序排列,编写一个算法将它们合并成一个顺序表Lc,并保持Lc中数据元素也按升序排列。

2、链表的应用

创建一个字符型的单链表,并设计一个菜单,可以分别实现链表的相关操作,例如插入、删除等

三:程序源代码:

1、顺序表合并-源代码:

int Insert(Sqlist *L,int i,int x) //插入元素

{ int j;

if(i<0||i>L->length+1)

{ printf("Error!");

return FALSE;}

if(L->length>=MAXNUM-1)

{ printf("overflow1");

return FALSE;}

for(j=L->length;j>=i;j--)

L->List[j+1];

L->List[i]=x;

L->length++;

return TRUE;

}

int Delete(Sqlist L,int i) //删除元素

{ int j;

if(i<0||i>L.length)

{ printf("Error!");

return FALSE;}

for(j=i+1;j<=L.length;j++)

L.List[j-1]=L.List[j];

L.length--;

return TRUE;

}

void Merge(Sqlist La, Sqlist Lb, Sqlist *Lc) //两个有序表合并{ int i,j,k,a,b;

int La_length,Lb_length; /*表La,Lb的最大下标*/

i=j=0;k=-1;

La_length=Length(La)-1;Lb_length=Length(Lb)-1;

Initiate(Lc); /*初始化表Lc*/

while (i<=La_length&&j<=Lb_length)

{ a=Get(La,i);b=Get(Lb,j);

if(a

else {Insert(Lc,++k,b); ++j;}

} /*将La和Lb的元素插入到Lc中*/

while (i<=La_length)

{ a=Get(La,i);Insert(Lc,++k,a); ++i;}

while (j<=Lb_length)

{ b=Get(Lb,j);Insert(Lc,++k,b); ++j;}

}

2、字符链表的操作-源代码:

slnodetype *Get(slnodetype *L,int i)

{/*存取链表中的第i个元素(i>=0)*/

slnodetype *p;

int j=-1;

p=L;

while(p!=NULL&&j

{

p=p->next;

j++;

}

if(j!=i||p==NULL)

return NULL;

else

return p;

}

int Locate(slnodetype *L,char x)

{/*查找定位,查找成功返回该元素的序号,否则返回-1;*/ slnodetype *p;

int i=-1;

p=L;

while(p->next!=NULL&&p->data!=x)

{ p=p->next;i++; }

if(p==NULL||p->data==x)

return i;

else

return -1;

}

int Traverse(slnodetype *L)

{ /*遍历链表,输出链表的元素序列;*/

slnodetype *p;

int i=0;

p=L;

while(p->next!=NULL)

{ p=p->next;i++;

printf("%c ",p->data); }

return i;

}

int Length(slnodetype *L)

{

slnodetype *p;

int i=0;

p=L;

while(p->next!=NULL)

{ i++;p=p->next;}

return i;

}

四、结果:

1、顺序表合并

1)向两组线性表输入大于0的数据元素,其运行结果如图:

则结果符合题意,答案正确。

2)向两组线性表输入小于0的数据元素,其运行结果如图:

则结果符合题意,答案正确。

3)向两组线性表分别输入大于0或小于0的数据元素,其运行结果如图:

则结果符合题意,答案正确。

3、字符链表的操作

首先程序运行主菜单如图所示:

1)创建链表输入数据元素,并以#结束标志,其结果如图:

相关文档
最新文档