数据结构与算法实验报告线性表Word文件下载.docx
《数据结构与算法实验报告线性表Word文件下载.docx》由会员分享,可在线阅读,更多相关《数据结构与算法实验报告线性表Word文件下载.docx(17页珍藏版)》请在冰豆网上搜索。
然后根据屏幕菜单的选择,可以进行数据的插入或删除,并在插入或删除数据后,再输出单链表;
本实验要求分别写出在单链表中第i(从1开始计数)个位置之后插入元素、创建单链表、在单链表中删除第i个位置的元素、顺序输出单链表的内容等的算法描述。
四、实验过程及结果分析
顺序表:
#include<
stdio.h>
stdlib.h>
#defineSIZE100
intL=0;
structnumber
{
longnum;
};
/*------------------创建顺式线性表------------------*/
structnumber*creat(void)
structnumber*head,*p1;
p1=head=(structnumber*)malloc(SIZE*sizeof(structnumber));
scanf("
%ld"
&
p1->
num);
for(;
num!
=0;
L++)
{
p1++;
scanf("
}
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->
/*------------------查找顺式线性表中的元素------------------*/
voidsearch(structnumber*head)
longnum1;
intn=0,s=0;
printf("
\n请输入您要查找的数据:
num1);
if(head!
p->
p++)
{
n++;
if(p->
num==num1)
{
s=1;
break;
}
}
if(s==0)
\n没有您所要查找的数据\n"
else
\n找到您所需数据'
%ld'
在表中第%d个\n"
num1,n);
/*------------------插入顺式线性表的元素------------------*/
structnumber*insert(structnumber*head)
structnumber*p1,*p2;
intn=1;
p1=p2=head;
p2=p2+L-1;
\n请输入您要插入的数据:
num1);
if(num1<
p2->
num)
for(p1=head;
num<
num1;
p1++)
n++;
p2>
=p1;
p2--)
(p2+1)->
num=p2->
num;
(p2+1)->
num=num1;
L++;
/*------------------删除顺式线性表的元素------------------*/
structnumber*del(structnumber*head)
\n请输入要删除的数据:
=num1&
&
n<
=L;
n=n+1;
if(n>
L)
\n没有您要删除的数据\n"
return(0);
else
p1<
=p2;
p1->
num=(p1+1)->
L--;
voidmain()
structnumber*head,*head1,*head2;
inta;
/*head=creat();
print(head);
*/
\n************************************\n"
按1:
创建\n"
按2:
插入\n"
按3:
查找\n"
按4:
删除\n"
按5:
输出\n"
按0:
退出\n"
*************************************\n"
%d"
a);
while(a!
switch(a)
case1:
printf("
请创建顺序表:
"
head=creat();
break;
case2:
head1=insert(head);
case3:
search(head);
case4:
head2=del(head);
case5:
print(head);
case0:
\n继续操作请输入,否则请按0退出:
图1
图2
链表:
#include"
stdio.h"
malloc.h"
typedefstructnode
intdata;
structnode*next;
}LNode,*LinkList;
intlen;
/*------------------创建链式线性表------------------*/
LinkListCreatLink()
intx,count=0;
LinkListp,q,h;
h=NULL;
p=(LinkList)malloc(sizeof(LNode));
x);
p->
data=x;
next=NULL;
while(x!
count++;
if(count==1)
q=h=p;
q->
next=p;
q=p;
returnh;
/*------------------删除链式线性表的元素------------------*/
LinkListdel(LinkListh,intdata)
LinkListp1,p2;
if(h==NULL)
\nlistnull!
returnh;
p1=h;
while(data!
=p1->
data&
next!
=NULL)
p2=p1;
p1=p1->
next;
if(data==p1->
data)
if(p1==h)
h=p1->
elsep2->
next=p1->
delete:
%ld\n"
data);
len=len-1;
elseprintf("
%ldnotbeenfound!
return(h);
/*------------------输出链式线性表的元素------------------*/
voidPrintLink(LNode*h)
LNode*p;
p=h;
while(p!
%d"
data);
p=p->
/*------------------计算链式线性表的长度------------------*/
intLinkLen(LinkListh)
LinkListp=h;
intcount=0;
returncount;
/*------------------查找链式线性表中的元素------------------*/
LinkListQueryLink(LinkListh,intx)
LinkListq,p;
q=p=h;
if(p->
data==x)
break;
returnq;
returnNULL;
/*------------------向链式线性表插入元素------------------*/
LinkListInsertLink(LinkListh,inti,intx)
LinkListp,q;
intj;
if(i==0)
next=h;
h=p;
q=h;
j=1;
while(q!
=NULL&
j<
i)
j++;
q=q->
if(q!
next=q->
nofound\n"
returnh;
LinkListh,p;
intx,a;
请按菜单进行操作!
********************\n"
按1:
创建链表\n"
按2:
插入元素\n"
按3:
链表长度\n"
按4:
查找元素\n"
按5:
删除元素\n"
按6:
输出链表\n"
按0:
退出运行\n"
请选择操作:
switch(a)
case1:
请输入:
h=CreatLink();
创建链表成功!
break;
case2:
请输入要插入的元素:
scanf("
h=InsertLink(h,1,x);
case3:
len=LinkLen(h);
该链表的长度为:
len);
case4:
请输入要查找的元素:
p=QueryLink(h,x);
find=%d\n"
next->
\n请输入要删除的元素:
if(x!
h=del(h,x);
case6:
输出链表:
PrintLink(h);
case0:
\n继续操作请选择,退出请安0\n"
图3
图4
五、成绩评定
优
良
中
及格
不及格
出勤
内容
格式
创新
效果
总评
指导教师:
年月日