数据结构与算法实验报告线性表.docx
- 文档编号:8534408
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:17
- 大小:67KB
数据结构与算法实验报告线性表.docx
《数据结构与算法实验报告线性表.docx》由会员分享,可在线阅读,更多相关《数据结构与算法实验报告线性表.docx(17页珍藏版)》请在冰豆网上搜索。
数据结构与算法实验报告线性表
沈阳工程学院
学生实验报告
(课程名称:
数据结构与算法)
实验题目:
线性表
班级网本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(num1
{
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 五、成绩评定 优 良 中 及格 不及格 出勤 内容 格式 创新 效果 总评 指导教师: 年月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 算法 实验 报告 线性