线性表的操作算法实验报告Word文档格式.docx

上传人:b****5 文档编号:17920984 上传时间:2022-12-12 格式:DOCX 页数:25 大小:224.48KB
下载 相关 举报
线性表的操作算法实验报告Word文档格式.docx_第1页
第1页 / 共25页
线性表的操作算法实验报告Word文档格式.docx_第2页
第2页 / 共25页
线性表的操作算法实验报告Word文档格式.docx_第3页
第3页 / 共25页
线性表的操作算法实验报告Word文档格式.docx_第4页
第4页 / 共25页
线性表的操作算法实验报告Word文档格式.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

线性表的操作算法实验报告Word文档格式.docx

《线性表的操作算法实验报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《线性表的操作算法实验报告Word文档格式.docx(25页珍藏版)》请在冰豆网上搜索。

线性表的操作算法实验报告Word文档格式.docx

}

if(!

p||j>

i-1)return0;

LinkLists=(LinkList)malloc(sizeof(LNode));

s->

data=e;

next=p->

p->

next=s;

return1;

}

删除:

intListDelete(LinkList&

L,inti,int&

e){

while(p->

next&

(p->

next)||j>

LinkListq=p->

next=q->

e=q->

data;

free(q);

cout<

<

"

被删除的元素数据为"

e<

\n"

;

return0;

查找:

intGetElem(LinkList&

L,inti,int&

e){

LinkListp=L->

intj=1;

while(p&

j<

i){

if(!

p||j>

i)return0;

e=p->

该元素的值为"

排序:

LinkListSort(LinkListL)

{LinkListp,q;

inttemp;

for(p=L;

p!

=NULL;

p=p->

next)

{

for(q=p->

q!

q=q->

next)

{

if(p->

data>

q->

data)

{

temp=q->

q->

data=p->

p->

data=temp;

}

}

returnL;

合并:

voidMergeList_L(LinkList&

L,LinkList&

La,LinkList&

Lb){

LinkListp,pa,pb;

p=L->

pa=La->

Lb=pb=L;

//用L的头结点作为Lb的头结点

while(p&

pa){

if(p->

data<

=pa->

data){

pb->

next=p;

pb=p;

p=p->

}

else{

next=pa;

pb=pa;

pa=pa->

pb->

next=p?

p:

pa;

free(La);

3.完成函数框架后开始写主函数,先输入一个链表L,然后出现功能栏目,可供选择,此处应做一个循环,使其可不断对该链表L操作,用多支选择语句加上do…while循环。

intmain()

{

LinkListL;

intn,s,e,i,f,g,h;

输入链表长度n:

cin>

>

n;

请输入L中的元素:

endl;

CreateList(L,n);

输入的链表为:

"

LNode*q=L->

while(q){cout<

intchoice;

请选择功能:

1.插入元素"

2.删除元素"

3.查找元素"

4.给元素排序"

5.合并链表"

0.退出程序"

PS:

若先排序再合并,可将得到新的排序后的合并链表。

do{

cout<

cin>

choice;

switch(choice)

{

case1:

{

cout<

输入插入的位置:

s;

输入插入的数据元素:

e;

ListInsert(L,s,e);

插入后的链表:

q=L->

while(q){

q=q->

}

break;

}

case2:

输入删除位置:

g;

ListDelete(L,g,h);

删除后的链表:

cout<

break;

case3:

输入查找位置:

i;

GetElem(L,i,f);

case4:

LinkListp;

Sort(L);

排序后的链表为:

case5:

LinkListLa,Lb;

intm;

请输入另一个链表La的长度m:

cin>

m;

请输入La中的元素:

CreateList(La,m);

输入的链表La为:

LNode*q=La->

while(q){

cout<

q=q->

Sort(La);

MergeList_L(L,La,Lb);

合并后的链表:

while(choice!

=0);

return0;

数组:

同理,代码附在报告后。

实验结果分析与总结

1、程序运行结果(请提供所完成的各道题运行结果界面截图):

2、在实验过程中遇到的问题与解决方法:

问题有很多,比如局部变量与全局变量的声明,常常顾此失彼,此处概念仍然不清。

数组的概念出从零开始的命名与使用者角度的转换也常常忘记,所以经常出现空出一位的表,那一位为系统随机赋值。

还有便是在值的传递上,思路不甚明确,导致常常断开,不能调用函数后改变表的值。

3、实验过程中的发现与收获,未解决或需进一步解决的问题:

在循环嵌套方面还是有些害怕,不能一次调试成功,常常需要加减来改变。

收获是学会了在写代码前画流程图来清晰思路,毕竟在算法这方面并不擅长,还需要更多的世间来适应并练习。

指导老师评阅意见

指导老师:

年月日

填写内容时,可把表格扩大。

附:

实验源程序代码

顺序表(链表):

//线性表(链表)

#include<

stdio.h>

#include"

malloc.h"

iostream>

usingnamespacestd;

//创建一个长度为n的链表

voidCreateList(LinkList&

L,intn){

L=(LinkList)malloc(sizeof(LNode));

L->

next=NULL;

for(inti=n;

i>

0;

--i)

{

LinkListp=(LinkList)malloc(sizeof(LNode));

p->

next=L->

next=p;

//在链表L第i个元素之前插入元素e

}

//在链表L中删除第i个元素,并由e返回其值

//查找第i个元素,并由e返回其值

//让链表L中的元素按从小到大的顺序排列

//归并L和La得到新的单链性表Lb

顺序表(数组):

//顺序表(数组).cpp

//#include"

stdafx.h"

#include<

#defineLIST_INIT_SIZE100

#defineLISTINCREMENT10

structS{

int*p;

intlength;

intlistsize;

};

//构造一个空的线性表L

intInitList(S&

L){

L.p=(int*)malloc(LIST_INIT_SIZE*sizeof(int));

L.p)return0;

L.length=0;

L.listsize=LIST_INIT_SIZE;

//在表中第i个位置之前插入新的元素e

intListInsert(S&

L,inti,inte){

if(i<

1||i>

L.length+1)return0;

if(L.length>

=L.listsize)

{int*newbase=(int*)realloc(L.p,(L.listsize+LISTINCREMENT)*sizeof(int));

newbase)return0;

L.p=newbase;

L.listsize+=LISTINCREMENT;

int*q=&

(L.p[i-1]);

for(int*y=&

(L.p[L.length-1]);

y>

=q;

--y)*(y+1)=*y;

*q=e;

++L.length;

//在表中删除第i个元素,并用e返回其值

intListDelete(S&

L,inti,int&

e){

if((i<

1)||(i>

L.length))return0;

int*k=&

e=*k;

int*q=L.p+L.length-1;

for(++k;

k<

++k)*(k-1)=*k;

--L.length;

//在表中查找某位置上的元素

intGetElem(S&

returne;

//给表中元素按从小到大的顺序排序

/*SLSort(S&

L){

intn,t;

for(intj=0;

n-1;

j++){

for(intk=0;

n-j-1;

k++){

if(p[k]>

p[k+1]){

t=p[k+1];

p[k+1]=p[k];

p[k]=t;

}

}

for(inti=0;

i<

i++)

p[i]<

}*/

//与另一个表La合并成为新的表Lb

//voidMergeList_L(S&

L,S&

La,S&

//}

voidLSort(S&

L)

inta=L.p[0];

for(inti=1;

L.length;

++i)

if(L.p[i]<

L.p[i-1])

L.p[0]=L.p[i];

for(intj=i-1;

L.p[0]<

L.p[j];

--j)

L.p[j+1]=L.p[j];

L.p[j+1]=L.p[0];

L.p[0]=a;

Smerge(S&

La)

{

structSLb;

int*p=L.p;

int*pa=La.p;

Lb.length=L.length+La.length;

int*pb=Lb.p=(int*)malloc(Lb.length*sizeof(int));

int*p_last=p+L.length-1;

int*pa_last=pa+La.length-1;

while(p<

=p_last&

pa<

=pa_last)

if(*p<

=*pa)

*pb++=*p++;

else

*pb++=*pa++;

=p_last)

while(pa<

returnLb;

{intn;

structSlist;

InitList(list);

=n-1;

i++)

{cin>

list.p[i];

list.length++;

};

for(ints=0;

s<

s++)

list.p[s]<

0.退出程序

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 电力水利

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1