数据结构实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构实验报告——实验4
学号::得分:______________
一、实验目的
1、复习线性表的逻辑结构、存储结构及基本操作;
2、掌握顺序表和(带头结点)单链表;
3、了解有序表。
二、实验容
1、(必做题)假设有序表中数据元素类型是整型,请采用顺序表或(带头结点)单链表实现:
(1)OrderInsert(&L, e, int (*compare)(a, b))
//根据有序判定函数compare,在有序表L的适当位置插入元素e;
(2)OrderInput(&L, int (*compare)(a, b))
//根据有序判定函数compare,并利用有序插入函数OrderInsert,构造有序表L;
(3)OrderMerge(&La, &Lb, &Lc, int (*compare)())
//根据有序判定函数compare,将两个有序表La和Lb归并为一个有序表Lc。
2、(必做题)请实现:
(1)升幂多项式的构造,升幂多项式是指多项式的各项按指数升序有序,约定系数不能等于0,指数不能小于0;
(2)两个升幂多项式的相加。
三、算法描述
(采用自然语言描述)
1.
创建带头节点的链表,
输入两个有序表数据La Lb
归并两个有序表得有序表Lc
输出三个有序表
输入需插入数据e
将e插入有序表Lc
输出插入e后的Lc
2.
创建链表
按指数升序输入多项式得序数和指数
输出多项式
按指数升序输入第二个多项式得序数和指数
两个多项式相加
输出第二个多项式和两个多项式得和
四、详细设计
(画出程序流程图)1.
2.
五、程序代码
(给出必要注释)
1.
#include
#include
typedef struct LNode
{
int date;
struct LNode *next;
} LNode,*Link;
typedef struct LinkList
{
Link head;//头结点
int lenth;//链表中数据元素的个数
} LinkList;
int compare (LinkList *L,int e)//有序判定函数compare {
int Lc=0;
Link p;
p=L->head;
p=p->next;
while(p!=NULL)
{
if(e>p->date)
{
p=p->next;
Lc++;
}
else
return Lc;
}
return Lc;
}
void OrderInsert (LinkList *L,int e,int (*compare)())//根据有序判定函数compare,在有序表L的适当位置插入元素e;
{
Link temp,p,q;
int Lc,i;
temp=(Link)malloc(sizeof(LNode));
temp->date=e;
p=q=L->head;
p=p->next;
Lc=(*compare)(L,e);
if(Lc==L->lenth)
{
while(q->next!=NULL)
{
q=q->next;
}
q->next=temp;
temp->next=NULL;
}
else
{
for(i=0; i { p=p->next; q=q->next; } q->next=temp; temp->next=p; } ++L->lenth; } void OrderMerge (LinkList *La,LinkList *Lb,int (*compare)())//根据有序判定函数compare ,将两个有序表La 和Lb 归并为一个有序表 { int i,Lc=0; Link temp,p,q; q=La->head->next; while(q!=NULL) { p=Lb->head; temp=(Link)malloc(sizeof(LNode)); temp->date=q->date; Lc=(*compare)(Lb,q->date); if(Lc==Lb->lenth) { while(p->next!=NULL) { p=p->next; } p->next=temp; temp->next=NULL; } else { for(i=0; i { p=p->next; } temp->next=p->next; p->next=temp; } q=q->next; ++Lb->lenth; } } LinkList *Initialize (LinkList *NewList) { int i; Link temp; NewList=(LinkList *)malloc((2+1)*sizeof(LinkList)); for(i=0; i<2+1; i++) {