数据结构第二章实验报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1、实验题目

(1)掌握线性表的顺序存储结构和链式存储结构。

(2)掌握线性表插入、删除等基本运算。

(3)掌握线性表的典型应用——多项式求和。

2、实验内容

(1)顺序存储结构的实现。

(2)链式存储结构的实现。

(3)编程实现多项式求和的运算。

3、实验要求

(1)利用C语言完成算法的设计和程序设计。

(2)上机调试通过实验程序。

(3)输入数据,检验程序运算结果。

(4)给出具体的算法分析,包括时间复杂度和空间复杂度等。

(5)撰写实验报告。

4、实验步骤与源程序

⑴实验步骤

1、输入多项式变量X的最高次数

2、利用For循环i小于最高次幂,分别输入每一项的次幂数,完成一个多项式,再输入另一个多项式。完成多项式的输入。

3、建立链表函数List(SeqList A, SeqList B, SeqList *C)实现多项式的每项的相加。

⑵源代码:

1)顺序存储结构的源代码:

#include

#define MAXLEN 100

typedef struct

{ int data[MAXLEN];

int last;

} SeqList;

//多项式相加

void add_List(SeqList A, SeqList B, SeqList *C)

{ int i;

C->last=st>st? st:st;

for(i=0;i<=C->last;i++)

C->data[i]=A.data[i]+B.data[i];

getchar();

}

//显示多项式

void show_list(SeqList C)

{ int i;

for(i=st;i>=1;i--)

if(C.data[i])

printf("\(%dx^%d\)+",C.data[i],i);

printf("\(%dx^%d\)\n",C.data[0],0);

}

//生成一个多项式

void create_list(SeqList *D)

{ int n,i;

printf("请按多项式X的最高次数:");

scanf("%d",&n);

for(int k=99;k>=0;k--)

D->data[k]=0;

printf("请按多项式X的次数由大到小输入系数,缺少项用0补齐\n"); for(i=n;i>=0;i--)

{ printf("输入X^%d项的系数: ",i);

scanf("%d",&D->data[i]);

}

D->last=n;

}

void main() // 主程序{ SeqList A,B,C;

printf("生成多项式A(x):\n");

create_list(&A);

printf("A(x)=");

show_list(A);

printf("生成多项式B(x):\n");

create_list(&B);

printf("B(x)=");

show_list(B);

printf("多项式A(x)和B(x)的和 ");

add_List (A,B,&C);

printf("C(x)=");

show_list(C);

}

2)链式存储结构源代码:

#include

#include

#include

typedef struct linknode

{

float coef;

int expn;

struct linknode *next;

} Node;

void create_link_list(Node *L) // 创建一个链式存储结构的多项式{ Node *p,*q;

int n=1;

float x=1;

q=L;

printf("请按多项式指数由大到小输入系数和指数:\n");

while(fabs(x)>0.000001 )

{ scanf("%f %d",&x,&n);

if(fabs(x)>0.00001)

{ p=(Node *) malloc(sizeof(Node));

p->coef=x;

p->expn=n;

p->next=NULL;

q->next=p ;

q=p;

}

}

}

void show_link_list(Node *L) // 显示一个多项式{

Node *p;

p=L->next;

while(p&&p->next )

{ printf("\(%fx^%d\) + ",p->coef,p->expn);

p=p->next;

}

printf("\(%fx^%d\) ",p->coef,p->expn);

printf("\n");

}

void mergelist(Node *La,Node *Lb,Node *Lc) // 多项式合并{ Node *pa,*pb,*pc;

Node *q1,*q2;

Lc=La;

pc=Lc;

pa=La->next;

相关文档
最新文档