实验报告二:线性表及其基本操作实验(2学时)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告
实验二线性表及其基本操作实验(2学时)
实验目的:
(1) 熟练掌握线性表ADT和相关算法描述、基本程序实现结构;
(2) 以线性表的基本操作为基础实现相应的程序;
(3) 掌握线性表的顺序存储结构和动态存储结构之区分。
实验内容:(类C算法的程序实现,任选其一。具体要求参见教学实验大纲)
(1)一元多项式运算的C语言程序实现(加法必做,其它选做);
(2) 有序表的合并;
(3)集合的并、交、补运算;
(4)约瑟夫问题的求解。
注:存储结构可以选用静态数组、动态数组、静态链表或动态链表之一。对链表也可以采用循环链表(含单向或双向)。
实验准备:
1) 计算机设备;2) 程序调试环境的准备,如TC环境;3)实验内容的算法分析与代码设计与分析准备。
实验步骤:
1.录入程序代码并进行调试和算法分析;
2.编写实验报告。
实验过程:(一元多项式的加法)
【算法描述】
定义两个指针qa和qb,分别指向多项式A和多项式B当前进行比较的某个结点,然后比较2个结点中的指数项,则有以下三种结果:
1、指针qa所指结点的指数值小于指针qb所指结点的指数值,则应摘取指针qa 所指的结点插入到“和多项式”链表当中去;
2、指针qa所指结点的指数值大于指针qb所指结点的指数值,则应摘取指针qb 所指的结点插入到“和多项式”链表当中去;
3、指针qa所指结点的指数值等于指针qb所指结点的指数值,则将两个结点的系数相加,若和数不等于零,则修改qa所指结点的系数值,同时释放qb所指结点。反之,从多项式A的链表删除相应结点,并释放指针qa和qb所指结点。【源程序】
#include
#include
typedef struct
{
float coef;
int expn;
}term;
typedef struct LNode
{
term data;
struct LNode *next;
}LNode,*LinkList;
typedef LinkList polynomial;
int cmp(term a,term b)
{
int flag;
if (a.expn else if (a.expn==b.expn) flag=0; else flag=1; return flag; } void CreatPoly(polynomial *p,int m) { int i; polynomial r,s; term para; (*p)=(LNode *)malloc(sizeof(LNode)); r=(*p); for( i=0;i { s=(LNode *)malloc(sizeof(LNode)); printf("please input coef and expn:\n"); scanf("%f %d",¶.coef,¶.expn); s->data.coef=para.coef; s->data.expn=para.expn; r->next=s; r=s; } r->next=NULL; } polynomial AddPoly(polynomial *pa,polynomial *pb) { polynomial newp,p,q,s,r; float sum; p=(*pa)->next; q=(*pb)->next; newp=(LNode *)malloc(sizeof(LNode)); r=newp; while(p&&q) { switch(cmp(p->data,q->data)) { case -1: s=(LNode *)malloc(sizeof(LNode)); s->data.coef=p->data.coef; s->data.expn=p->data.expn; r->next=s; r=s; p=p->next; break; case 0: sum=p->data.coef+q->data.coef; if(sum!=0.0) { s=(LNode *)malloc(sizeof(LNode)); s->data.coef=sum; s->data.expn=q->data.expn; r->next=s; r=s; } p=p->next; q=q->next; break; case 1: s=(LNode *)malloc(sizeof(LNode)); s->data.coef=q->data.coef; s->data.expn=q->data.expn; r->next=s; r=s; q=q->next; break; } } while(p) { s=(LNode *)malloc(sizeof(LNode)); s->data.coef=p->data.coef; s->data.expn=p->data.expn; r->next=s;