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