线性表数据结构试验Word格式文档下载.docx
《线性表数据结构试验Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《线性表数据结构试验Word格式文档下载.docx(14页珍藏版)》请在冰豆网上搜索。
1)创建任意整数线性表(即线性表的元素值随机在键盘上输入)的顺序存储结构(即顺序表),长度限定在25之内;
2)打印/显示(遍历)该线性表(依次打印/显示出表中元素值);
3)在顺序表中查找第i个元素,并返回其值;
4)在顺序表第i个元素之前插入一已知元素;
5)在顺序表中删除第i个元素;
6)求顺序表中所有元素值(整数)之和;
二、链表(带头结点)基本操作实验
数据元素类型ElemType取字符型char。
按照动态单链表结构实现如下算法:
1)按照头插法或尾插法创建一个带头结点的字符型单链表(链表的字符元素从键盘输入),长度限定在10之内;
2)打印(遍历)该链表(依次打印出表中元素值,注意字符的输入顺序与链表的结点顺序);
3)在链表中查找第i个元素,i合法返回元素值,否则,返回FALSE;
4)在链表中查找与一已知字符相同的第一个结点,有则返回TRUE,否则,返回FALSE;
5)在链表中第i个结点之前插入一个新结点;
6)在线性表中删除第i个结点;
\
7)计算链表的长度。
3实验步骤与源程序
一、顺序表的基本操作实现实验
Common.h
#include<
stdio.h>
stdlib.h>
malloc.h>
#defineOK1
#defineERROR0
#defineTRUE1
#defineFALSE0
Seqlist.h
#defineElemTypeint
#defineMAXSIZE25
typedefstruct
{
ElemTypeelem[MAXSIZE];
intlast;
}SeqList;
#include"
common.h"
seqlist.h"
intLocate(SeqListL,intn)
inti=0;
while((i<
L.last&
&
i!
=n))
i++;
if(i<
=L.last)
returnL.elem[i];
else
return(-1);
}
intInsList(SeqList*L,inti,ElemTypee)
intk;
if((i<
1)||(i>
L->
last+2))
{
printf("
插入位置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;
last++;
return(OK);
intDelList(SeqList*L,inti,ElemType*e)
1)||(i>
last+1))
{
删除位置不合法!
"
*e=L->
elem[i-1];
for(k=i;
k<
=L->
k++)
elem[k-1]=L->
last--;
intAddList(SeqList*L)
intk,s=0;
for(k=0;
k<
k++)
s=s+L->
returns;
voidmain()
{
SeqListl;
intp,q,r,*q1;
inti;
q1=(int*)malloc(sizeof(int));
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)
在此线性表中没有这样的元素!
该位置的元素为:
%d\n"
p);
请输入要插入的位置:
p);
请输入要插入的元素值:
InsList(&
l,p,q);
%d"
l.elem[i]);
请输入要删除的元素位置:
DelList(&
l,p,&
删除的元素值为:
q);
删除后的元素序列:
i++)
%d"
剩余数字之和为:
\n%d\n"
AddList(&
l));
#defineFALSE
Linklist.h
typedefcharElemType;
typedefstructNode
ElemTypedata;
structNode*next;
}Node,*LinkList;
#defineElemTypechar
LinkListCreateFromHead()
LinkListL;
Node*s;
charc;
intflag=1,i=1;
L=(LinkList)malloc(sizeof(Node));
next=NULL;
while(flag&
i<
=10)
c=getchar();
if(c!
='
$'
)
{
s=(Node*)malloc(sizeof(Node));
s->
data=c;
next=L->
next;
L->
next=s;
}
else
flag=0;
returnL;
Node*search(LinkListL,inti)
intj=0;
Node*p;
p=L;
while(p->
next!
=NULL&
j<
i)
p=p->
j++;
if(i==j)returnp;
elsereturnNULL;
Node*locate(LinkListL,ElemTypekey)
p=L->
while(p!
=NULL)
if(p->
data!
=key)
p=p->
elsebreak;
returnp;
voidInsList(LinkListL,inti,ElemTypee)
Node*p,*s;
k=0;
i-1)
k=k+1;
if(k!
=i-1)
error!
s=(Node*)malloc(sizeof(Node));
s->
data=e;
next=p->
p->
voiddelLink(LinkListL,inti,ElemType*e)
Node*p,*r;
位置不合理"
r=p->
next->
*e=r->
data;
free(r);
intListlength(LinkListL)
returnj;
LinkListl;
chare;
chara;
inti,n;
用头插法建立单链表,请输入链表数据,以$结束!
l=CreateFromHead();
p=l->
输入的字符依次为:
%c"
p->
data);
%c\n"
Node*p1;
请输入要查找的字符的序号:
n);
要查找的字符:
p1=search(l,n);
p1->
插入后的字符:
%c"
a);
InsList(l,3,'
a'
p1=l->
while(p1!
p1=p1->
delLink(l,2,&
e);
删除后的字符为:
该字符串的长度为:
i=Listlength(l);
i);
输入要查找的字符:
p1=locate(l,a);
if(p1!
true"
flase!
4测试数据与实验结果(可以抓图粘贴)
一.顺序表的基本操作实现实验
5结果分析与实验体会
这是第一次数据结构实验,我感觉基础还是很重要的,C语言的基础很重要。
这次的数据结构试验不是很难,主要是根据书本上的例子改编而成,只要理解书本上的习题和思想,就可以解决这些问题。
可是由于一个暑假没有复习C语言,导致做实验时还是有点吃力的。
我发现数据结构这门功课对思维能力以及数学能力的要求还是很高的,所以今后还要好好学习数学,不断的提高自己的思维能力以及数学能力。
希望老师今后可以严格要求我,使我在这门功课上可以学到更多的知识,真正掌握技术。