1数据结构-实验报告一(线性表的基本操作).doc
文本预览下载声明
数据结构实验报告
实验内容 实验一 线性表的基本操作及其应用
专 业 信息与计算科学
班 级 1301
学 号 33
姓 名 蒋丰沛
指导教师 刘长松
2015 年 月 日
熟悉线性表的基本运算在两种存储结构上的实现。掌握顺序表的存储结构形式及其描述和基本运算的实现。熟练掌握动态链表结构及有关算法的设计求两个多项式的相加运算
[问题描述]
用单链表存储一元多项式,并实现两个多项式的相加运算。
[基本要求]
(2)[测试数据] 由学生任意指定。
三、源代码
#include stdio.h
#include malloc.h
#define MAX 20 //多项式最多项数
typedef struct //定义存放多项式的数组类型
{
double coef; //系数
int exp; //指数
} PolyArray[MAX];
typedef struct pnode //定义单链表结点类型
{
double coef; //系数
int exp; //指数
struct pnode *next;
} PolyNode;
void DispPoly(PolyNode *L) //输出多项式
{
bool first=true; //first为true表示是第一项
PolyNode *p=L-next;
while (p!=NULL)
{
if (first)
first=false;
else if (p-coef0)
printf(+);
if (p-exp==0)
printf(%g,p-coef);
else if (p-exp==1)
printf(%gx,p-coef);
else
printf(%gx^%d,p-coef,p-exp);
p=p-next;
}
printf(\n);
}
void DestroyList(PolyNode *L) //销毁单链表
{
PolyNode *p=L,*q=p-next;
while (q!=NULL)
{
free(p);
p=q;
q=p-next;
}
free(p);
}
void CreateListR(PolyNode *L,PolyArray a,int n) //尾插法建表
{
PolyNode *s,*r;int i;
L=(PolyNode *)malloc(sizeof(PolyNode)); //创建头结点
L-next=NULL;
r=L; //r始终指向终端结点,开始时指向头结点
for (i=0;in;i++)
{
s=(PolyNode *)malloc(sizeof(PolyNode));//创建新结点
s-coef=a[i].coef;
s-exp=a[i].exp;
r-next=s; //将*s插入*r之后
r=s;
}
r-next=NULL; //终端结点next域置为NULL
}
void Sort(PolyNode *head) //按exp域递减排序
{
PolyNode *p=head-next,*q,*r;
if (p!=NULL) //若原单链表中有一个或以上的数据结点
{
r=p-next; //r保存*p结点后继结点的指针
p-next=NULL; //构造只含一个数据结点的有序表
p=r;
while (p!=NULL)
{
r=p-next; //r保存*p结点后继结点的指针
q=head;
while (q-next!=NULL q-next-expp-exp)
q=q-next; //在有序表中找插入*p的前驱结点*q
p-next=q-next; //将*p插入到*q之后
q-next=p;
p=r;
}
}
}
void Add(PolyNode *ha,PolyNode *hb,PolyNode *hc) //求两有序集合的并
{
PolyNode *pa=ha-next,*pb=hb-next,*s,*tc;
double c;
hc=(PolyNode *)malloc(sizeof(Pol
显示全部