数据结构与算法实验报告线性表.docx
《数据结构与算法实验报告线性表.docx》由会员分享,可在线阅读,更多相关《数据结构与算法实验报告线性表.docx(24页珍藏版)》请在冰豆网上搜索。
数据结构与算法实验报告线性表
一、实验目的
1、深刻理解线性结构的特点以及线性表的概念。
2、熟练掌握线性表的顺序存储结构、链式存储结构及基本运算算法的实现,特别是查找、插入和删除等算法。
二、实验环境
1)硬件:
每个学生需配备计算机一台,操作系统:
Windows2000/XP。
2)软件:
visualc++6.0。
三、实验题目和实验内容
实验题目:
线性表的顺序、链式表示及其应用
实验内容:
1、基本题:
实验2.1、实验2.2、实验2.4、实验2.7
2、附加题:
实验2.3、实验2.6(没做)
四、实验数据和实验结果
2.1
a,b,c,d,e
2.2
a,b,c,d,e
2.4
a,b,c,d,e
2.7
第一个多项式:
2x+6x^2-4x^3+3x^4第二个多项式1x-3x^2+6x^3-3x^4
五、附录(程序代码)
2.1
#include
#include
#defineMaxSize50
typedefstruct
{
chardata[MaxSize];
intlength;
}SqList;
voidCreateList(SqList*&L,chara[],intn)
{
inti;
L=(SqList*)malloc(sizeof(SqList));
for(i=0;iL->data[i]=a[i];
L->length=n;
}
voidInitList(SqList*&L)
{
L=(SqList*)malloc(sizeof(SqList));
L->length=0;
}
voidDestroyList(SqList*&L)
{
free(L);
}
intListEmpty(SqList*L)
{
return(L->length==0);
}
intListLength(SqList*L)
{
return(L->length);
}
voidDispList(SqList*L)
{
inti;
for(i=0;ilength;i++)
cout<data[i];
cout<}
charGetElem(SqList*L,inti,char&e)
{
if(i<1||i>L->length)
return0;
e=L->data[i-1];
returne;
}
intLocateElem(SqList*L,chare)
{
inti=0;
while(ilength&&L->data[i]!
=e)
i++;
if(i>=L->length)
return0;
else
returni+1;
}
intListInsert(SqList*&L,inti,chare)
{
intj;
if(i<1||i>L->length+1)
return0;
i--;
for(j=L->length;j>i;j--)
L->data[j]=L->data[j-1];
L->data[i]=e;
L->length++;
return1;
}
intListDelete(SqList*&L,inti,char&e)
{
intj;
if(i<1||i>L->length)
return0;
i--;
e=L->data[i];
for(j=i;jlength-1;j++)
L->length--;
return1;
}
voidmain()
{
SqList*p;
charb[10],e;
intk;
cout<<"元素个数:
";
cin>>k;
cout<<"输入元素:
";
for(intm=0;mcin>>b[m];
InitList(p);
CreateList(p,b,k);
cout<<"输出顺序表:
";
DispList(p);
cout<<"顺序表长度是:
"<if(ListEmpty(p))
cout<<"顺序表为空"<else
cout<<"顺序表不为空"<cout<<"顺序表第3位元素是:
"<cout<<"元素a的位置是:
第"<ListInsert(p,4,'f');
cout<<"在第4个元素上插入元素f:
";
DispList(p);
cout<<"删除顺序表第3个元素:
";
ListDelete(p,3,e);
DispList(p);
DestroyList(p);
}
2.2
#include
#include
typedefstructLNode
{
chardata;
structLNode*next;
}LinkList;
voidCreateListR(LinkList*&L,chara[],intn)
{
LinkList*s,*r;
inti;
L=(LinkList*)malloc(sizeof(LinkList));
r=L;
for(i=0;i{
s=(LinkList*)malloc(sizeof(LinkList));
s->data=a[i];
r->next=s;
r=s;
}
r->next=NULL;
}
voidInitList(LinkList*&L)
{
L=(LinkList*)malloc(sizeof(LinkList));
L->next=NULL;
}
voidDestroyList(LinkList*&L)
{
LinkList*pre=L,*p=pre->next;
while(p)
{
free(pre);
pre=p;
p=pre->next;
}
free(pre);
}
intListEmpty(LinkList*L)
{
return(L->next==NULL);
}
intListLength(LinkList*L)
{
intn=0;
LinkList*p=L;
while(p->next)
{
n++;
p=p->next;
}
return(n);
}
voidDispList(LinkList*L)
{
LinkList*p=L->next;
while(p)
{
cout<data;
p=p->next;
}
cout<}
charGetElem(LinkList*L,inti,char&e)
{
intj=0;
LinkList*p=L;
while(j
=NULL)
{
j++;
p=p->next;
}
if(!
p)
return0;
else
{
e=p->data;
returne;
}
}
intLocateElem(LinkList*L,chare)
{
inti=1;
LinkList*p=L->next;
while(p&&p->data!
=e)
{
p=p->next;
i++;
}
if(!
p)
return(0);
else
return(i);
}
intListInsert(LinkList*&L,inti,chare)
{
intj=0;
LinkList*p=L,*s;
while(j{
j++;
p=p->next;
}
if(!
p)
return0;
else
{
s=(LinkList*)malloc(sizeof(LinkList));
s->data=e;
s->next=p->next;
p->next=s;
return1;
}
}
intListDelete(LinkList*&L,inti,char&e)
{
intj=0;
LinkList*p=L,*q;
while(j{
j++;
p=p->next;
}
if(!
p)
return0;
else
{
q=p->next;
if(!
q)
return0;
e=q->data;
p->next=q->next;
free(q);
return1;
}
}
voidmain()
{
LinkList*h;
charb[10],e;
intk;
cout<<"元素个数:
";
cin>>k;
cout<<"输入元素:
";
for(intm=0;mcin>>b[m];
InitList(h);
CreateListR(h,b,k);
cout<<"输出单链表:
";
DispList(h);
cout<<"单链表长度是:
"<if(ListEmpty(h))
cout<<"单链表为空"<else
cout<<"单链表不为空"<cout<<"单链表第3位元素是:
"<cout<<"元素a的位置是:
第"<ListInsert(h,4,'f');
cout<<"在第4个元素上插入元素f:
";
DispList(h);
cout<<"删除单链表第3个元素:
";
ListDelete(h,3,e);
DispList(h);
DestroyList(h);
}
2.4
#include
#include
typedefstructLNode
{
chardata;
structLNode*next;
}LinkList;
voidCreateListR(LinkList*&L,chara[],intn)
{
LinkList*s,*r;
inti;
L=(LinkList*)malloc(sizeof(LinkList));
r=L;
for(i=0;i{
s=(LinkList*)malloc(sizeof(LinkList));
s->data=a[i];
r->next=s;
r=s;
}
r->next=L;
}
voidInitList(LinkList*&L)
{
L=(LinkList*)malloc(sizeof(LinkList));
L->next=NULL;
}
voidDestroyList(LinkList*&L)
{
LinkList*pre=L->next,*p=pre->next;
L->next=NULL;
while(p)
{
free(pre);
pre=p;
p=pre->next;
}
free(pre);
}
intListEmpty(LinkList*L)
{
return(L->next==NULL);
}
intListLength(LinkList*L)
{
intn=0;
LinkList*p=L;
while(p->next!
=L&&p->next)
{
n++;
p=p->next;
}
return(n);
}
voidDispList(LinkList*L)
{
LinkList*p=L->next;
while(p!
=L&&p)
{
cout<data;
p=p->next;
}
cout<}
charGetElem(LinkList*L,inti,char&e)
{
intj=1;
LinkList*p=L->next;
while(j
=L&&p)
{
j++;
p=p->next;
}
if(!
p)
return0;
else
{
e=p->data;
returne;
}
}
intLocateElem(LinkList*L,chare)
{
inti=1;
LinkList*p=L->next;
while(p!
=L&&p->data!
=e&&p)
{
p=p->next;
i++;
}
if(!
p)
return(0);
else
return(i);
}
intListInsert(LinkList*&L,inti,chare)
{
intj=1;
LinkList*p=L->next,*s;
while(j=L)
{
j++;
p=p->next;
}
if(!
p)
return0;
else
{
s=(LinkList*)malloc(sizeof(LinkList));
s->data=e;
s->next=p->next;
p->next=s;
return1;
}
}
intListDelete(LinkList*&L,inti,char&e)
{
intj=1;
LinkList*p=L->next,*q;
while(j=L)
{
j++;
p=p->next;
}
if(!
p)
return0;
else
{
q=p->next;
if(!
q||q==L->next)
return0;
e=q->data;
p->next=q->next;
free(q);
return1;
}
}
voidmain()
{
LinkList*h;
charb[10],e;
intk;
cout<<"元素个数:
";
cin>>k;
cout<<"输入元素:
";
for(intm=0;mcin>>b[m];
InitList(h);
CreateListR(h,b,k);
cout<<"输出循环单链表:
";
DispList(h);
cout<<"循环单链表长度是:
"<if(ListEmpty(h))
cout<<"循环单链表为空"<else
cout<<"循环单链表不为空"<cout<<"循环单链表第3位元素是:
"<cout<<"元素a的位置是:
第"<ListInsert(h,4,'f');
cout<<"在第4个元素上插入元素f:
";
DispList(h);
cout<<"删除循环单链表第3个元素:
";
ListDelete(h,3,e);
DispList(h);
DestroyList(h);
}
2.7
#include
#include
typedefstructpolynomial
{
intcoef;//系数
intindex;//指数
structpolynomial*next;
}LinkList;
voidCreateList(LinkList*&L,intn)
{
LinkList*s,*r;
inti;
L=(LinkList*)malloc(sizeof(LinkList));
r=L;
for(i=0;i{
s=(LinkList*)malloc(sizeof(LinkList));
cout<<"依次输入多项式系数和指数:
";
cin>>s->coef>>s->index;
s->next=NULL;
r->next=s;
r=s;
}
}
voidInitList(LinkList*&L)
{
L=(LinkList*)malloc(sizeof(LinkList));
L->next=NULL;
}
voidAddList(LinkList*&list1,LinkList*&list2,intm,intn)
{
LinkList*s,*r,*t;
inti;
s=list1->next;
r=list2->next;
t=list1;
for(i=0;i{
if(s==NULL)
{
s=list1->next;
t=list1;
}
while(s!
=NULL)
{
if(s->index!
=r->index)
{
s=s->next;
t=t->next;
}
elsebreak;
}
if(!
s)
{
s=(LinkList*)malloc(sizeof(LinkList));
s->coef=r->coef;
s->index=r->index;
s->next=NULL;
t->next=s;
s=s->next;
r=r->next;
continue;
}
else
{
if(s->index==r->index)
s->coef=s->coef+r->coef;
if(s->coef==0)
{
LinkList*temp1;
temp1=s;
s=s->next;
t->next=s;
deletetemp1;
}
}
r=r->next;
s=NULL;
}
cout<<"多项式相加的结果是:
";
list1=list1->next;
while(list1)
{
cout<coef<<"x^"<index;
if(list1->next!
=NULL)
cout<<"+";
list1=list1->next;
}
}
voidDispList(LinkList*L)
{
L=L->next;
while(L)
{
cout<coef<<"x^"<index;
if(L->next!
=NULL)
if(L->next->coef>0)
cout<<"+";
L=L->next;
}
}
voidmain()
{
LinkList*list1,*list2;
InitList(list1);
InitList(list2);
intm,n;
cout<<"请输入第一个多项式的项数:
";
cin>>m;
CreateList(list1,m);
cout<<"多项式表示是:
";
DispList(list1);
cout<cout<<"请输入第二个多项式的项数:
";
cin>>n;
CreateList(list2,n);
cout<<"多项式表示是:
";
DispList(list2);
cout<AddList(list1,list2,m,n);
cout<}