数据结构课程设计报告 联系客服

发布时间 : 星期一 文章数据结构课程设计报告更新完毕开始阅读a015ed41bcd5b9f3f90f76c66137ee06eff94e01

编号

课程设计

题目 1、一元稀疏多项式计算器 2、模拟浏览器操作程序 3、背包问题的求解 4、八皇后问题

二级学院 计算机科学与工程学院 专 业 计算机科学与技术

班 级 2011级 37-3班

学生姓名 XX

学 号 XXXXXXXXXX

指导教师 XXXXX 评阅教师 时 间

1、一元稀疏多项式计算器

【实验内容】

一元稀疏多项式计算器。 【问题描述】

设计一个一元稀疏多项式简单计算器。 【需求分析】 其基本功能包括: (1)输入并建立多项式;

(2)输出多项式,输出形式为整数序列为:n,c1,e1,c2,e2,……,cn,en,其中n是多项式的项数,ci,ei分别是第i项的系数和指数,序列按指数降序排序; (3)多项式a和b相减,建立多项a+b; (4)多项式a和b相减,建立多项式a-b; (5)计算多项式在x处的值; (6)计算器的仿真界面(选做); 【概要设计】

-=ADT=- {

void input(Jd *ha,Jd *hb); //输入两个多项式 void sort(Jd *h);

//用冒泡排序法对一个多项式进行降序排序 void sum(Jd *ha,Jd *hb); //多项式求和

void minus(Jd *ha,Jd *hb); //多项式相减

void output(Jd *h); //输出多项式

void operate(Jd *ha,Jd *hb); //对多项式进行操作

int qiuzhi(int x,Jd *ha); //计算多项式在x处的值 void main(); 主函数 }

【存储结构】

typedef struct node { int e; float c; struct node *next;

/*定义多项式每一项*/ //e为指数

//c为系数

//next指向下一项

}dnode;

【流程图】

1. dnode *creat() //多项式的创建, 即输入两个多项式

h while (项数next=h->next; h->next=p; 继续输入 return h;

2. void sort(dnode *h) //采用冒泡法对链表每一项重新排序//

while(p->next!=NULL) p=p->next; //寻找尾结点 pi=p;指向最后一次交换的位置,初值为表尾 while(pi!=h->next) //外层循环,比较趟数 for(p=h->next;p!=pi;p=p->next) 内层循环,前后两两相比 swap(p,q); pl=p; //调用交换函数 pi=pl;

3. dnode *operate(dnode *a,dnode *b) //稀疏多项式计算// while(p&&q) 比较对应两项的指数 x=p->c+q->c; if(fabs(x)<1e-5) p=p->next;q=q->next; if(x!=0) 将和链接到新的链表中 else if(p->e>q->e)p链接到新的链表中,p后移,q不动 else if(p->ee)p链接到新的链表中,q后移,p不动 ++c->c; if(q!=NULL) t->next=q;++c->c; if(p!=NULL) t->next=p;++c->c;

4. float qiuzhi(int x,dnode *h) //求多项式在x处的值

if(p==NULL) return 0; while(p) if(p->e==0) sum+=p->c; else sum+=(p->c)*(pow(x,p->e)); p=p->next; return sum; 【详细设计】 源代码如下:

#include #include #include #define NULL 0

typedef struct node /*定义多项式每一项*/ { int e; //e为指数 float c; //c为系数 struct node *next; //next指向下一项 }dnode;

dnode *creat() /*用链表存放多项式*/ { //多项式的创建, 即输入两个多项式 dnode *h,*p; int e,i,n; //n为多项式的项数 float c; //c为多项式的系数 h=(dnode *)malloc(sizeof(dnode)); //分配头节点 h->next=NULL; do //当n为0或小于1时,则重新输入 { printf(\请输入多项式的项数n:\ scanf(\ }while(n<1); for(i=1;i<=n;i++) //输入各项的系数c和指数e { printf(\请输入第%d项的系数c和指数e:\ scanf(\ p=(dnode *)malloc(sizeof(dnode)); //创建新结点 p->c=c;p->e=e; //将值传给data域 p->next=h->next;//用头插法建立链表 h->next=p; } return h; //返回头结点 }

void swap(dnode *p,dnode *q) /*交换p,q指针所指的指数和系数*/ { float m; //中间变量 int n; //中间变量 n=p->e; //交换操作 p->e=q->e; q->e=n;