给大家的实验文档中分为一下几部分
1.实验准备:请好好复习C语言,有时间也复习一下C++。
2.c语言实验教案中是一些c语言的基础知识,包括VC环境的使用和程序的调试,希望对c
语言已经忘记的同学好好看看复习一下。(程序的编写调试是长年累月的过程,需要不断的
积累,写得多了,程序调试的多了,自然就熟练了)
3.对应的flash课件:其中是一些实验的flash课件演示,给大家做一下参考
4.实验指导书和实验教案大家在做每个实验前都需要看看。阅读的时候,可以使用 【视图】
|【文档结构图】,可以比较自由跳到相应位置
5. 总体实验难度比较大,时间紧,单靠实验课上的几个学时,作为初学者是无法完成的,
需要大家在课前课后尽自己最大的努力。
6.每个实验的代码编写可以用c也可以用c++
7. 实验前要写预习报告,格式跟实验报告一致,实验结束后,可以直接在其上修改实验代
码,加上实验小结,作为实验报告上交。实验报告必须手写!!代码部分可以只写关键代码。
实验安排
1、多项式加减法,2 学时
2、栈和队列的应用,2 学时
3、迷宫,4 学时
4、二叉树的建立和遍历,4 学时
5、归并排序,2 学时
6、图,2 学时
实验一 多项式加减法
一、实验目的
通过实现多项式的加减法,对链表有更深入的了解
二、实验内容
问题描述:
设计一个一元稀疏多项式简单的加减法计算器
实现要求:
一元稀疏多项式简单计算器的基本功能是:
(1)输入并建立多项式:
8 17
A(x ) 7 3x 9x 5x ;
B (x ) 8x 22x 7 9x 8
(2)输出多项式
(3)多项式A 和B 相加,建立多项式C=A+B,并输出相加的结果多项式C
(4)选作:多项式A 和B 相减,建立多项式C=A-B,并输出相加的结果多项式D
方法说明:
(1)多项式的输入与存储
用带表头结点的单链表存储多项式,链表中的每个节点分别存储多项式各项的系数和指数,
即每从键盘输入多项式的一对数 (系数,指数),可对应建立链表的一个结点。每个节点的
结构为:
Coef exp next
建立两个链表,其中pa 和pb 分别为它们的头指针:
Pa 4 -1 7 0 3 1 9 8 ∧
pb 3 -1 8 1 -9 2 ∧
结果链表
Pa(或者是Pc)
Pc 7 -1 7 0 11 1 -9 2 9 8 ∧
(2)多项式数据类型的定义
structtagNode
{
float coef;
int exp;
structtagNode *next;
};
typedef structtagNodeNode;
typedef structtagNode* pNode;
(3)主要算法
①创建两个链表,分别存放多项式1和多项式2,这两个链表中的节点是按指数降序或者升
序排列的
②多项式相加或相减,下面给出多项式相加的部分实现
/*
下面的函数实现两个多项式的相加,要相加的链表分别由pa 和pb 指向 (其中,pa,pb 都
是分配了空间的头结点)。
相加的结果直接由pa 指向的链表保存,即是在pa链表中添加或删除 (当系数因为相加为0
的情况下)一些结点,构成结果。
这里要相加的链表中指数都是按从小到大的顺序排列好了的,是升序链表。
*/
void add_poly(Node *pa,Node *pb)
{
Node *p pa->pNext;//链表 1,将来的结果也放在此
Node *q pb->pNext;//链表2
Node *pre pa;
Node *u;//临时用
floatx;
while (p! NULL&&q! NULL)//当两个链表都不为空
{
if (p->expexp)//比较链表 1跟链表2 当前节点的指数大小,链表 1也是存放结
果的地方
{
pre p;
p p->pNext;//p 指向要比较的下一个结点。pre 指向的是结果链表的最后一个结
点。
}
elseif (p-