实验报告专用纸Word格式文档下载.docx
《实验报告专用纸Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《实验报告专用纸Word格式文档下载.docx(41页珍藏版)》请在冰点文库上搜索。
2、实验内容:
(1)、线性表的顺序存储的基本操作;
(2)、线性表的链式存储的基本操作;
(3)、线性表的应用---一元多项式的表示及相加都基本操作。
3、实验步骤与方法:
(1)、采用线性表的链式存储结构;
(2)、用菜单的形式完成线性表链式存储结构的基本操作;
(3)、采用线性表的顺序存储结构;
(4)、用菜单的形式完成线性表顺序存储结构的基本操作;
(5)、运用线性表链式存储结构解决常见实际应用问题;
(6)、运用线性表顺序结构解决常见实际应用问题。
4、实验数据与程序清单:
实验一:
线性表中查找元素位置
#include<
stdio.h>
stdlib.h>
#defineNULL0
#defineOVERFLOW-2
实验室:
机号:
实验日期:
年月日
延安大学计算机学院实验报告附页
实验名称
#defineOK1
#defineERROR0
#defineTRUE1
#defineFALSE0
#defineElemTypeint
#defineMAXSIZE100/*此处的宏定义常量表示线性表可能达到的最大长度*/
typedefstruct
{
ElemTypeelem[MAXSIZE];
/*线性表占用的数组空间*/
intlast;
/*记录线性表中最后一个元素在数组elem[]中的位置(下标值),空表置为-1*/
}SeqList;
intLocate(SeqListL,ElemTypee)
{
inti=0;
/*i为扫描计数器,初值为0,即从第一个元素开始比较*/
while((i<
=L.last)&
&
(L.elem[i]!
=e))
i++;
if(i<
=L.last)
return(i+1);
/*若找到值为e的元素,则返回其序号*/
else
return(-1);
/*若没找到,则返回空序号*/
}
voidmain()
SeqListl;
intp,q,r;
inti;
printf("
请输入线性表的长度:
"
);
scanf("
%d"
&
r);
l.last=r-1;
请输入线性表的各元素值:
\n"
for(i=0;
i<
=l.last;
i++)
{
scanf("
l.elem[i]);
}
请输入要查找的元素值:
q);
p=Locate(l,q);
if(p==-1)
printf("
在此线性表中没有该元素!
该元素在线性表中的位置为:
%d\n"
p);
实验二:
线性表中插入元素操作
malloc.h>
intInsList(SeqList*L,inti,ElemTypee)
intk;
if((i<
1)||(i>
L->
last+2))/*首先判断插入位置是否合法*/
插入位置i值不合法"
return(ERROR);
if(L->
last>
=MAXSIZE-1)
表已满无法插入"
for(k=L->
last;
k>
=i-1;
k--)/*为插入元素而移动位置*/
L->
elem[k+1]=L->
elem[k];
L->
elem[i-1]=e;
/*在C语言数组中,第i个元素的下标为i-1*/
last++;
return(OK);
SeqList*l;
l=(SeqList*)malloc(sizeof(SeqList));
l->
last=r-1;
=l->
l->
elem[i]);
请输入要插入的位置:
p);
请输入要插入的元素值:
InsList(l,p,q);
%d"
l->
实验三:
线性表中删除元素操作
intDelList(SeqList*L,inti,ElemType*e)
1)||(i>
last+1))
{
删除位置不合法!
*e=L->
elem[i-1];
/*将删除的元素存放到e所指向的变量中*/
for(k=i;
=L->
k++)
elem[k-1]=L->
/*将后面的元素依次前移*/
last--;
intp,r;
int*q;
l=(SeqList*)malloc(sizeof(SeqList));
q=(int*)malloc(sizeof(int));
请输入要删除的元素位置:
DelList(l,p,q);
删除的元素值为:
*q);
实验四:
线性表的合并
voidmerge(SeqList*LA,SeqList*LB,SeqList*LC)
inti,j,k;
i=0;
j=0;
k=0;
while(i<
=LA->
last&
j<
=LB->
last)
if(LA->
elem[i]<
elem[j])
{
LC->
elem[k]=LA->
elem[i];
i++;
k++;
}
else
elem[k]=LB->
elem[j];
j++;
last)/*当表LA有剩余元素时,则将表LA余下的元素赋给表LC*/
LC->
i++;
k++;
while(j<
last)/*当表LB有剩余元素时,则将表LB余下的元素赋给表LC*/
elem[k]=LB->
j++;
LC->
last=LA->
last+LB->
last+1;
SeqList*la,*lb,*lc;
intr;
inti;
la=(SeqList*)malloc(sizeof(SeqList));
请输入线性表A的长度:
la->
请输入线性表A的各元素值:
=la->
la->
lb=(SeqList*)malloc(sizeof(SeqList));
请输入线性表B的长度:
lb->
请输入线性表B的各元素值:
=lb->
lb->
lc=(SeqList*)malloc(sizeof(SeqList));
merge(la,lb,lc);
合并后线性表C中的元素为:
=lc->
lc->
实验五:
用头插法建立单链表
#defineElemTypechar
typedefstructNode/*结点类型定义*/
ElemTypedata;
structNode*next;
}Node,*LinkList;
/*LinkList为结构指针类型*/
LinkListCreateFromHead()
LinkListL;
Node*s;
charc;
intflag=1;
L=(LinkList)malloc(sizeof(Node));
/*建立头结点*/
next=NULL;
/*建立空的单链表L*/
while(flag)/*flag初值为1,当输入"
$"
时,置flag为0,建表结束*/
c=getchar();
if(c!
='
$'
s=(Node*)malloc(sizeof(Node));
/*建立新结点s*/
s->
data=c;
next=L->
next;
/*将s结点插入表头*/
L->
next=s;
flag=0;
returnL;
LinkListl;
Node*p;
用头插法建立单链表,请输入链表数据,以$结束!
l=CreateFromHead();
p=l->
while(p!
=NULL)
%c\n"
p->
data);
p=p->
实验六:
用尾插法建立单链表
typedefcharElemType;
voidinit_linklist(LinkList*l)/*对单链表进行初始化*/
*l=(LinkList)malloc(sizeof(Node));
(*l)->
voidCreateFromTail(LinkListL)
Node*r,*s;
charc;
intflag=1;
/*设置一个标志,初值为1,当输入"
时,flag为0,建表结束*/
r=L;
/*r指针动态指向链表的当前表尾,以便于做尾插入,其初值指向头结点*/
while(flag)/*循环输入表中元素值,将建立新结点s插入表尾*/
c=getchar();
r->
r=s;
/*将最后一个结点的next链域置为空,表示链表的结束*/
}
}
init_linklist(&
l);
用尾插法建立单链表,请输入链表数据,以$结束!
CreateFromTail(l);
实验七:
查找线性表结点值
Node*Get(LinkListL,inti)
intj;
p=L;
j=0;
/*从头结点开始扫描*/
while((p->
next!
=NULL)&
(j<
i))
/*扫描下一结点*/
/*已扫描结点计数器*/
if(i==j)
returnp;
/*找到了第i个结点*/
else
returnNULL;
/*找不到,i≤0或i>
n*/
请输入链表数据,以$结束!
请输入要查找的结点序号:
j);
p=Get(l,j);
if(p!
该结点的值为:
未找到此结点!
实验八:
判断线性表长度