数据结构与算法实验报告线性表.docx

上传人:b****4 文档编号:4030020 上传时间:2022-11-27 格式:DOCX 页数:14 大小:17.93KB
下载 相关 举报
数据结构与算法实验报告线性表.docx_第1页
第1页 / 共14页
数据结构与算法实验报告线性表.docx_第2页
第2页 / 共14页
数据结构与算法实验报告线性表.docx_第3页
第3页 / 共14页
数据结构与算法实验报告线性表.docx_第4页
第4页 / 共14页
数据结构与算法实验报告线性表.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

数据结构与算法实验报告线性表.docx

《数据结构与算法实验报告线性表.docx》由会员分享,可在线阅读,更多相关《数据结构与算法实验报告线性表.docx(14页珍藏版)》请在冰豆网上搜索。

数据结构与算法实验报告线性表.docx

数据结构与算法实验报告线性表

 

沈阳工程学院

学生实验报告

〔课程名称:

数据构造与算法〕

 

实验题目:

线性表

 

班级学号姓名

地点指导教师

实验日期:

年月日

一、实验目的

1.理解线性表的逻辑构造特性,以及这种特性在计算机内的两种存储构造。

2.掌握线性表的顺序存储构造的定义及其C语言的实现。

3.掌握线性表的链式存储构造——单链表的定义及其C语言的实现。

4.掌握线性表的根本操作

二、实验环境

TurboC或是VisualC++

三、实验内容与要求

实验1顺序表的操作

请编制C程序,利用顺序存储方式来实现以下功能:

根据键盘输入数据建立一个线性表,并输出该线性表;然后根据屏幕菜单的选择,可以进展表的创立,数据的插入删除并在插入和删除数据后再输出线性表;最后在屏幕菜单中选择0,即可完毕程序的运行。

分析:

当我们要在顺序表的第i个位置上插入一个元素时,必须先将线性表的第i个元素之后的所有元素一次后移一个位置,以便腾出一个位置,再把新元素插入到该位置。

当要删除第i个元素时,也只需将第i个元素之后的所有元素前移一个位置。

算法描绘:

对每个算法,都要写出算法的中文描绘。

本实验中要求分别写出在第i个〔从1开始计数〕结点前插入数据为x的结点、删除指定结点、创立一个线性表。

打印线性表等的算法描绘。

实验2单链表的操作

请编制C程序,利用链式存储方式来实现线性表的创立、插入、删除和查找等操作。

详细地说,就是要根据键盘输入的数据建立一个单链表;然后根据屏幕菜单的选择,可以进展数据的插入或删除,并在插入或删除数据后,再输出单链表;最后在屏幕菜单中选择0,即可完毕程序的运行。

算法描绘:

本实验要求分别写出在单链表中第i〔从1开始计数〕个位置之后插入元素、创立单链表、在单链表中删除第i个位置的元素、顺序输出单链表的内容等的算法描绘。

四、实验过程及结果分析

实验1顺序表的操作

#defineTURE1

#defineFALSE0

#defineOK1

#defineERROR0

#defineOVERFLOW-2

#include

#include

#defineML1//线性表

#defineTURE1

#defineFALSE0

#defineOK1

#defineERR0

typedefstruct

{

intlist[ML];

intsize;

intMAXSIZE;

}sqList;

sqList*Init_List(sqList*L,intms);

voidDisp_List(sqList*L);

intLocateElem_List(sqList*L,intx);

intInsert_List(sqList*L,intx,intmark);

intDelete_List1(sqList*L,intitem);

intDelete_List2(sqList*L,intmark);

sqList*Init_List(sqList*L,intms){

L=(sqList*)malloc(ms*sizeof(sqList));

if(!

L){

printf("Memoryallocationfailure\n");

exit(OVERFLOW);

}

else

L->size=0;

L->MAXSIZE=ms;

returnL;

}

voidDisp_List(sqList*L){

inti;

for(i=0;isize;i++)

printf("%d",L->list[i]);

printf("\n");

}

intLocateElem_List(sqList*L,intx){

inti=0;

for(i=0;i<=L->size;i++)

if(L->list[i]==x)

returni;

if(i>L->size)

return-1;

}

intInsert_List(sqList*L,intx,intmark){

inti=1;

if(L->size>=L->MAXSIZE)

return-1;

if(mark>0){

for(i=L->size+1;i>=mark;i--)

L->list[i+1]=L->list[i];

L->list[i]=x;

}

elseif(mark<0)

L->list[L->size]=x;

L->size++;

returnFALSE;

}

intDelete_List1(sqList*L,intitem){

inti,j;

for(i=0;isize;i++)

if(item==L->list[i])

break;

if(isize){

for(j=i+1;jsize-1;j++)

L->list[j]=L->list[j+1];

L->size--;

returni;

}

returnFALSE;

}

intDelete_List2(sqList*L,intmark){

inti,item;

if(mark>0){

item=L->list[mark];

for(i=mark+1;isize-1;i++)

L->list[i]=L->list[i+1];

L->size--;

returni;

}

returnFALSE;

}

voidmain(){

intp,n,x=0;

sqLista,*b;

b=Init_List(&a,ML);

printf("listaddr=%d\tsize=%d\tMaxSize=%d",b->list,b->size,b->MAXSIZE);

while

(1){

printf("\n请输入值,0为完毕输入:

");

scanf("%d",&x);

if(!

x)break;

printf("请输入插入位置:

");

scanf("%d",&p);

Insert_List(b,x,p);

printf("线性表为:

\n");

Disp_List(b);

}

while

(1){

printf("请输入查找值,输入0完毕查找操作:

");

scanf("%d",&x);

if(!

x)break;

n=LocateElem_List(b,x);

if(n<0)printf("没找到\n");

else

printf("又符合条件的值,位置为:

%d\n",n+1);

}

while

(1){

printf("请输入删除值,输入0完毕查找操作:

");

scanf("%d",&x);

if(!

x)break;

n=Delete_List1(b,x);

if(n<0)

printf("没找到\n");

else{

printf("删除成功,线性表为:

");

Disp_List(b);

}

}

while

(1){

printf("请输入删除值位置,输入o完毕查找操作:

");

scanf("%d",&p);

if(!

p)break;

n=Delete_List2(b,p);

if(p<0)printf("位置越界\n");

else{

printf("线性表为:

");

Disp_List(b);

}

}

}

实验2单链表的操作

#include

#include

#definenull0

typedefintElemType;/*字符型数据*/

structLNode

{

ElemTypedata;

structLNode*next;

};

voidsetnull(structLNode**p);

intlength(structLNode**p);

ElemTypeget(structLNode**p,inti);

voidinsert(structLNode**p,ElemTypex,inti);

voiddele(structLNode**p,inti);

voiddisplay(structLNode**p);

intlocate(structLNode**p,ElemTypex);

voidmain()

{

structLNode*head,*q;/*定义静态变量*/

intselect,x1,x2,x3,x4;

inti,n;

intm,g;

chare,y;

setnull(&head);/*建立链表并设置为空表*/

printf("请输入数据长度:

");

scanf("%d",&n);

for(i=1;i<=n;i++)

{

printf("将数据插入到单链表中:

");

scanf("%d",&y);

insert(&head,y,i);

}/*插入数据到链表*/

display(&head);/*显示链表所有数据*/

printf("select1求长度length()\n");

printf("select2取结点get()\n");

printf("select3求值查找locate()\n");

printf("select4删除结点delete()\n");

printf("select0退出\n");

printf("inputyourselect:

");

scanf("%d",&select);

while(select!

=0)

{switch(select)

{

case1:

{

x1=length(&head);

printf("输出单链表的长度%d",x1);

display(&head);

}break;

case2:

{

printf("请输入要获得结点:

");

scanf("%d",&m);

x2=get(&head,m);

printf("%d",x2);

display(&head);

}break;

case3:

{

printf("请输入要查找的数据:

");

scanf("%d",&e);

x3=locate(&head,e);

printf("%d",x3);

display(&head);

}break;

case4:

{

printf("请输入要删除的结点:

");

scanf("%d",&g);

dele(&head,g);

display(&head);

}break;

}

printf("select1求长度length()\n");

printf("select2取结点get()\n");

printf("select3求值查找locate()\n");

printf("select4删除结点delete()\n");

printf("select0退出\n");

printf("inputyourselect:

");

scanf("%d",&select);

}

}

voidsetnull(structLNode**p)

{

*p=null;

}

intlength(structLNode**p)

{

intn=0;

structLNode*q=*p;

while(q!

=null)

{

n++;

q=q->next;

}

return(n);

}

ElemTypeget(structLNode**p,inti)

{

intj=1;

structLNode*q=*p;

while(j

=null)

{

q=q->next;

j++;

}

if(q!

=null)

return(q->data);

else

{printf("位置参数不正确!

\n");

return0;}

}

intlocate(structLNode**p,ElemTypex)

{

intn=0;

structLNode*q=*p;

while(q!

=null&&q->data!

=x)

{

q=q->next;

n++;

}

if(q==null)

return(-1);

else

return(n+1);

}

voidinsert(structLNode**p,ElemTypex,inti)

{

intj=1;

structLNode*s,*q;

s=(structLNode*)malloc(sizeof(structLNode));

s->data=x;

q=*p;

if(i==1)

{

s->next=q;

*p=s;

}

else

{

while(jnext!

=null)

{

q=q->next;

j++;

}

if(j==i-1)

{

s->next=q->next;

q->next=s;

}

else

printf("位置参数不正确!

\n");

}

}

voiddele(structLNode**p,inti)

{

intj=1;

structLNode*q=*p,*t;

if(i==1)

{

t=q;

*p=q->next;

}

else

{

while(jnext!

=null)

{

q=q->next;

j++;

}

if(q->next!

=null&&j==i-1)

{

t=q->next;

q->next=t->next;

}

else

printf("位置参数不正确!

\n");

}

if(t!

=null)

free(t);

}

voiddisplay(structLNode**p)

{

structLNode*q;

q=*p;

printf("单链表显示:

");

if(q==null)

printf("链表为空!

");

elseif(q->next==null)

printf("%d\n",q->data);

else

{

while(q->next!

=null)

{

printf("%d->",q->data);

q=q->next;

}

printf("%d",q->data);

}

printf("\n");

}

 

五、成绩评定

及格

不及格

出勤

内容

格式

创新

效果

总评

 

指导教师:

年月日

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

当前位置:首页 > 农林牧渔 > 林学

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

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