冯数据结构实验.docx

上传人:b****4 文档编号:4911584 上传时间:2022-12-11 格式:DOCX 页数:15 大小:76.91KB
下载 相关 举报
冯数据结构实验.docx_第1页
第1页 / 共15页
冯数据结构实验.docx_第2页
第2页 / 共15页
冯数据结构实验.docx_第3页
第3页 / 共15页
冯数据结构实验.docx_第4页
第4页 / 共15页
冯数据结构实验.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

冯数据结构实验.docx

《冯数据结构实验.docx》由会员分享,可在线阅读,更多相关《冯数据结构实验.docx(15页珍藏版)》请在冰豆网上搜索。

冯数据结构实验.docx

冯数据结构实验

实验报告

课程名称:

数据结构

班级:

实验日期:

姓名:

学号:

指导教师:

实验序号:

实验成绩:

一、实验名称

线性表及其应用

二、实验目的及要求

1、熟悉链表的创建,链表结点查找、插入和删除;

2、理解链表用于存储线性表的优势和劣势;

3、掌握利用链表存储一元多项式的数据结构,及其运算操作。

三、实验环境

VisualC++6.0

四、实验内容

1、输入并建立多项式;

2、输出多项式,输出形式为整数序列:

n,c1,e1,c2,e2,….,cn,en,其中n是多项式的项数,ci和ei分别是第I项的系数和指数,序列按照指数降序排列;

3、多项式a和b相加,建立多项式a+b;

4、多项式a和b相减,建立多项式a-b。

五、算法描述及实验步骤

使用链表存储一元多项式c1Xe1+c2Xe2+…+cnXen如下图所示:

如何实现这种线性链表表示的多项式的加法运算?

根据一元多项式相加的运算规则:

对于两个一元多项式中所有指数相同的项,对应系数相加,若其和不为零,则构成“和多项式”中的一项;对于两个一元多项式中所有指数不相同的项,则分别复抄到“和”多项式中去。

实验步骤:

1、

2、

3、

六、调试过程及实验结果

七、总结

多项式系数小的

八、附录

#pragmaonce

#include

structnode

{

intexp;//指数

doublecoef;//系数

node*next;//指针域

};

classpoly

{

private:

node*head;

public:

poly();

voidin1poly();

voidin2poly(int,int[],double[]);

voiddelpoly();

voidprtpoly();

polyoperator+(poly&);

/*~poly(void);*/

};

#include"StdAfx.h"

#include"poly.h"

#include"iostream"

usingnamespacestd;

poly:

:

poly()

{

head=NULL;

return;

}

voidpoly:

:

in1poly()

{

node*p,*k;

inte;

doublec;

k=NULL;

cout<<"输入:

系数指数。

输入-1结束"<

cin>>c>>e;

while(e>=0)

{

p=newnode;

p->exp=e;

p->coef=c;

p->next=NULL;

if(k==NULL)

head=p;

else

k->next=p;

k=p;

cin>>c>>e;

}

return;

}

voidpoly:

:

in2poly(intn,inte[],doublec[])

{

intk;

node*p;

for(k=n-1;k>=0;k--)

{

p=newnode;

p->coef=c[k];p->exp=e[k];

p->next=head;

head=p;

}

return;

}

voidpoly:

:

delpoly()

{

node*p,*q;

q=head;

while(q!

=NULL)

{

p=q->next;

deleteq;

q=p;

}

head=NULL;

return;

}

voidpoly:

:

prtpoly()

{

node*k;

if(head==NULL)

cout<<"空表"<

k=head;

while(k!

=NULL)

{

cout<<"("<coef<<","<exp<<")"<

k=k->next;

}

return;

}

polypoly:

:

operator+(poly&p2)

{

polyp;

node*k,*q,*m,*n;

inte;

doublec;

k=NULL;

m=head;

n=p2.head;

while((m!

=NULL)&&(n!

=NULL))

{

if(m->exp==n->exp)

{

c=m->coef+n->coef;

e=m->exp;

m=m->next;

n=n->next;

}

elseif(m->exp>n->exp)

{

c=n->coef;

e=n->exp;

n=n->next;

}

else

{

c=m->coef;

e=m->exp;

m=m->next;

}

if(c!

=0)

{

q=newnode;

q->exp=e;

q->coef=c;

q->next=NULL;

if(k==NULL)

p.head=q;

else

k->next=q;

k=q;

}

}

while(m!

=NULL)

{

c=m->coef;

e=m->exp;

m=m->next;

q=newnode;

q->exp=e;

q->coef=c;

q->next=NULL;

if(k==NULL)

p.head=q;

else

k->next=q;

k=q;

}

while(n!

=NULL)

{

c=n->coef;

e=n->exp;

q=newnode;

q->exp=e;

q->coef=c;

q->next=NULL;

if(k==NULL)

p.head=q;

else

k->next=q;

k=q;

}

return(p);

}

//poly:

:

~poly(void)

//{

//delete[]

//}

#include"stdafx.h"

#include"poly.h"

#include"iostream"

usingnamespacestd;

#include"cmath"

int_tmain(intargc,_TCHAR*argv[])

{

polyp1,p2,add_p;

intpe1[4]={0,1,8,17};

doublepc1[3]={7,3,9};

intpe2[3]={1,7,8};

doublepc2[3]={8,22,-9};

p1.in2poly(3,pe1,pc1);

p2.in2poly(3,pe2,pc2);

add_p=p1+p2;

cout<<"欢迎使用多项式相加程序!

"<

cout<<"多项式1为:

"<

p1.prtpoly();

cout<<"多项式2为:

"<

p2.prtpoly();

cout<<"两多项式相加和为:

"<

add_p.prtpoly();

 

return0;

}

 

邢台学院数学与信息技术学院

实验报告

课程名称:

班级:

实验日期:

姓名:

学号:

指导教师:

实验序号:

实验成绩:

一、实验名称

栈及其应用

二、实验目的及要求

1、熟悉栈的原理和实现方式;

2、理解使用栈消除函数递归调用的原理;

3、掌握后缀表达式计算的方法。

三、实验环境

VisualC++6.0

四、实验内容

1、栈实现阶乘函数;

2、栈实现后缀表达式的计算。

五、算法描述及实验步骤

函数调用栈的结构如下:

第n层调用

(当前函数局部变量空间)

第n-1层调用

(当前函数的主调函数变量空间)

第1层调用

主函数局部变量空间

函数调用的栈空间

使用栈消去递归的算法框架如下:

初始化栈;

将完整问题参数压栈;

while(栈非空)

{

取出栈顶元素所描述的问题

如果可以直接解决,则直接解决

否则分解为子问题压栈

}

后缀表达式是运算符在运算数之后的一种表达式存储的数据结构,不需要比较运算符优先级别,只需要每次读到运算数时压栈,读到运算符时将运算数出栈,将结果压栈即可。

最后的运算结果存放在栈底。

实验步骤

1、

2、

3、

六、调试过程及实验结果

七、总结

八、附录

#include"stdafx.h"

#defineSElemTypeint

classstack

{

public:

SElemType*base;

SElemType*top;

stack()

{

base=newSElemType[100];

top=base;

}

voidPush(SElemTypen)

{

*top=n;

top++;

}

SElemTypePop()

{

SElemTypee;

e=*(--top);

returne;

}

};

//实现阶乘运算

intJC(intn)

{

stacks;

intsum=1;

//将?

数簓据Y循-环·压1入?

栈?

中D

while(n)

{

s.Push(n);

n--;

}

while(s.top!

=s.base)

{

intb=s.Pop();

sum*=b;

}

returnsum;

}

//用栈实现后缀表达式

intCount(charb[])

{

stacks1;

intsum=0;

inti=0;

while(b[i]!

='\0')

{

if(b[i]!

='+'&&b[i]!

='*'&&b[i]!

='-'&&b[i]!

='/')

s1.Push(b[i]-'0');

else

{

if(b[i]=='+')

{

inta=s1.Pop();

intb=s1.Pop();

sum=a+b;

}

elseif(b[i]=='*')

{

inta=s1.Pop();

intb=s1.Pop();

sum=a*b;

}

elseif(b[i]=='-')

{

inta=s1.Pop();

intb=s1.Pop();

sum=b-a;

}

elseif(b[i]=='/')

{

inta=s1.Pop();

intb=s1.Pop();

sum=b/a;

}

s1.Push(sum);

}

i++;

}

returnsum;

}

intmain(intargc,char*argv[])

{

intm=6;

inta=JC(m);

printf("%d的阶乘计算结果为a:

阰",m);

printf("%d\n",a);

printf("\n\n");

printf("后缀表达式计算:

");

charc[10]={'5','5','5','+','*'};

intb=Count(c);

printf("%d",b);

return0;

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1