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

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

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

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

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

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

 

沈阳工程学院

学生实验报告

(课程名称:

数据结构与算法)

 

实验题目:

线性表

 

班级网本112班学号2011414217姓名樊鹏鹏

地点F606指导教师吕海华、祝世东

实验日期:

2012年9月27日

一、实验目的

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

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

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

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

二、实验环境

TurboC或是VisualC++

三、实验内容与要求

实验1顺序表的操作

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

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

分析:

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

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

算法描述:

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

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

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

实验2单链表的操作

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

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

算法描述:

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

四、实验过程及结果分析

顺序表:

#include

#include

#defineSIZE100

intL=0;

structnumber

{

longnum;

};

/*------------------创建顺式线性表------------------*/

structnumber*creat(void)

{

structnumber*head,*p1;

p1=head=(structnumber*)malloc(SIZE*sizeof(structnumber));

scanf("%ld",&p1->num);

for(;p1->num!

=0;L++)

{

p1++;

scanf("%ld",&p1->num);

}

return(head);

}

/*------------------输出顺式线性表中的元素------------------*/

voidprint(structnumber*head)

{

structnumber*p;

ints=L;

p=head;

if(p!

=0)

{

printf("\n您输入的数据为:

\n");

for(;s>0;p++,s--)

printf("%ld",p->num);

}

}

/*------------------查找顺式线性表中的元素------------------*/

voidsearch(structnumber*head)

{

structnumber*p;

longnum1;

intn=0,s=0;

p=head;

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

\n");

scanf("%ld",&num1);

if(head!

=0)

for(;p->num!

=0;p++)

{

n++;

if(p->num==num1)

{

s=1;

break;

}

}

if(s==0)

printf("\n没有您所要查找的数据\n");

else

printf("\n找到您所需数据'%ld'在表中第%d个\n",num1,n);

}

/*------------------插入顺式线性表的元素------------------*/

structnumber*insert(structnumber*head)

{

structnumber*p1,*p2;

intn=1;

longnum1;

p1=p2=head;

p2=p2+L-1;

printf("\n请输入您要插入的数据:

\n");

scanf("%ld",&num1);

if(num1num)

{

for(p1=head;p1->num

n++;

for(;p2>=p1;p2--)

(p2+1)->num=p2->num;

}

(p2+1)->num=num1;

L++;

return(head);

}

/*------------------删除顺式线性表的元素------------------*/

structnumber*del(structnumber*head)

{

structnumber*p1,*p2;

longnum1;

intn=1;

p1=p2=head;

printf("\n请输入要删除的数据:

\n");

scanf("%ld",&num1);

p2=p2+L-1;

for(;p1->num!

=num1&&n<=L;p1++)

n=n+1;

if(n>L)

{

printf("\n没有您要删除的数据\n");

return(0);

}

else

{

for(;p1<=p2;p1++)

p1->num=(p1+1)->num;

L--;

return(head);

}

}

voidmain()

{

structnumber*head,*head1,*head2;

inta;

/*head=creat();

print(head);*/

printf("\n************************************\n");

printf("按1:

创建\n");

printf("按2:

插入\n");

printf("按3:

查找\n");

printf("按4:

删除\n");

printf("按5:

输出\n");

printf("按0:

退出\n");

printf("*************************************\n");

scanf("%d",&a);

while(a!

=0)

{

switch(a)

{

case1:

printf("请创建顺序表:

");head=creat();break;

case2:

head1=insert(head);break;

case3:

search(head);break;

case4:

head2=del(head);break;

case5:

print(head);

case0:

break;

}

printf("\n继续操作请输入,否则请按0退出:

\n");

scanf("%d",&a);

}

}

图1

图2

链表:

#include"stdio.h"

#include"malloc.h"

typedefstructnode

{

intdata;

structnode*next;

}LNode,*LinkList;

intlen;

/*------------------创建链式线性表------------------*/

LinkListCreatLink()

{

intx,count=0;

LinkListp,q,h;

h=NULL;

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

scanf("%d",&x);

p->data=x;

p->next=NULL;

while(x!

=0)

{

count++;

if(count==1)

q=h=p;

else

{

q->next=p;

q=p;

}

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

scanf("%d",&x);

p->data=x;

p->next=NULL;

}

returnh;

}

/*------------------删除链式线性表的元素------------------*/

LinkListdel(LinkListh,intdata)

{

LinkListp1,p2;

if(h==NULL)

{

printf("\nlistnull!

\n");

returnh;

}

p1=h;

while(data!

=p1->data&&p1->next!

=NULL)

{

p2=p1;

p1=p1->next;

}

if(data==p1->data)

{

if(p1==h)

h=p1->next;

elsep2->next=p1->next;

printf("delete:

%ld\n",data);

len=len-1;

}

elseprintf("%ldnotbeenfound!

\n",data);

return(h);

}

/*------------------输出链式线性表的元素------------------*/

voidPrintLink(LNode*h)

{

LNode*p;

p=h;

while(p!

=NULL)

{

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

p=p->next;

}

}

/*------------------计算链式线性表的长度------------------*/

intLinkLen(LinkListh)

{

LinkListp=h;

intcount=0;

while(p!

=NULL)

{

count++;

p=p->next;

}

returncount;

}

/*------------------查找链式线性表中的元素------------------*/

LinkListQueryLink(LinkListh,intx)

{

LinkListq,p;

q=p=h;

while(p!

=NULL)

{

if(p->data==x)

break;

else

{

q=p;

p=p->next;

}

}

if(p!

=NULL)

returnq;

else

returnNULL;

}

/*------------------向链式线性表插入元素------------------*/

LinkListInsertLink(LinkListh,inti,intx)

{

LinkListp,q;

intj;

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

p->data=x;

if(i==0)

{

p->next=h;

h=p;

}

else

{

q=h;

j=1;

while(q!

=NULL&&j

{

j++;

q=q->next;

}

if(q!

=NULL)

{

p->next=q->next;

q->next=p;

}

else

printf("nofound\n");

}

returnh;

}

voidmain()

{

LinkListh,p;

intx,a;

printf("请按菜单进行操作!

\n");

printf("********************\n");

printf("按1:

创建链表\n");

printf("按2:

插入元素\n");

printf("按3:

链表长度\n");

printf("按4:

查找元素\n");

printf("按5:

删除元素\n");

printf("按6:

输出链表\n");

printf("按0:

退出运行\n");

printf("********************\n");

printf("请选择操作:

");

scanf("%d",&a);

while(a!

=0)

{

switch(a)

{

case1:

printf("请输入:

");h=CreatLink();printf("创建链表成功!

");break;

case2:

printf("请输入要插入的元素:

");scanf("%d",&x);h=InsertLink(h,1,x);break;

case3:

len=LinkLen(h);printf("该链表的长度为:

%d",len);break;

case4:

printf("请输入要查找的元素:

");scanf("%d",&x);p=QueryLink(h,x);

if(p!

=NULL)

printf("find=%d\n",p->next->data);

else

printf("nofound\n");break;

case5:

printf("\n请输入要删除的元素:

");

scanf("%d",&x);

if(x!

=0)

h=del(h,x);break;

case6:

printf("输出链表:

");PrintLink(h);break;

case0:

break;

}

printf("\n继续操作请选择,退出请安0\n");

scanf("%d",&a);

}

}

图3

图4

五、成绩评定

及格

不及格

出勤

内容

格式

创新

效果

总评

 

指导教师:

年月日

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

当前位置:首页 > 表格模板 > 合同协议

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

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