数据结构实验报告

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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++)

{

相关文档
最新文档