数据结构C语言版课程设计

能随便写下吗,感谢大神... 能随便写下吗,感谢大神 展开
 我来答
xoaxa
2013-06-25 · TA获得超过8607个赞
知道大有可为答主
回答量:6415
采纳率:72%
帮助的人:3384万
展开全部

/*

创建多项式A:
系数 幂次(0 0结束) : 1 0
系数 幂次(0 0结束) : 2 1
系数 幂次(0 0结束) : 3 2
系数 幂次(0 0结束) : 0 0
A(x) = 3.00x^2 + 2.00x + 1.00
创建多项式B:
系数 幂次(0 0结束) : 1 4
系数 幂次(0 0结束) : -3 2
系数 幂次(0 0结束) : 1 1
系数 幂次(0 0结束) : -2 0
系数 幂次(0 0结束) : 0 0
B(x) = 1.00x^4 - 3.00x^2 + 1.00x - 2.00
C(x) = 3.00x^6 + 2.00x^5 - 8.00x^4 - 3.00x^3 - 7.00x^2 - 3.00x - 2.00
A(2.00) = 17.0000
B(2.00) = 4.0000
C(2.00) = 68.0000
Press any key to continue

*/

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define EPS 1E-6
typedef struct item {
 double coefficient;
 int power;
 struct item *next;
} *POLYNOMIAL,*NODE;
POLYNOMIAL Create() { // 创建多项式
 NODE head,p;
 double coe;
 int pwr;
 head = p = (NODE)malloc(sizeof(item));
 while(1) {
  printf("系数 幂次(0 0结束) : ");
  scanf("%lf%d",&coe,&pwr);
  if(coe == 0.0 && pwr == 0) break;
  p->next = (NODE)malloc(sizeof(item));
  p->next->coefficient = coe;
  p->next->power = pwr;
  p = p->next;
 }
 p->next = NULL;
 return head;
}
void Sort(POLYNOMIAL head) { // 按幂次降排序
 NODE pt,q,p = head;
 while(p->next) {
  q = p->next;
  while(q->next) {
   if(p->next->power < q->next->power) {
    pt = p->next;
    p->next = q->next;
    q->next = p->next->next;
    p->next->next = pt;
   }
   else q = q->next;
  }
  p = p->next;
 }
}
void Show(POLYNOMIAL head) { // 显示多项式
 POLYNOMIAL p = head->next;
 int flag = 1;
 if(p == NULL) return;
 while(p) {
  if(flag) {
   if(fabs(p->coefficient) >= EPS) {
    if(p->power == 0) printf("%.2lf ",p->coefficient);
    else if(p->power == 1) printf("%.2lfx ",p->coefficient);
    else printf("%.2lfx^%d ",p->coefficient,p->power);
   }
   flag = 0;
  }
  else if(p->coefficient > 0) {
   if(p->power == 0) printf("+ %.2lf ",p->coefficient);
   else if(p->power == 1) printf("+ %.2lfx ",p->coefficient);
   else printf("+ %.2lfx^%d ",p->coefficient,p->power);
  }
  else {
   if(p->power == 0) printf("- %.2lf ",-p->coefficient);
   else if(p->power == 1) printf("- %.2lfx ",-p->coefficient);
   else printf("- %.2lfx^%d ",-p->coefficient,p->power);
  }
  p = p->next;
 }
 printf("\n");
}
double Power(double x,int n) {
 double value = 1.0;
 int i;
 for(i = 1; i <= n; ++i) value *= x;
 return value;
}
double Value(POLYNOMIAL head,double x) { // 多项式求值
 POLYNOMIAL p;
 double value = 0.0;
 for(p = head->next; p; p = p->next)
  value += p->coefficient * Power(x,p->power);
 return value;
}
POLYNOMIAL Mult(POLYNOMIAL A, POLYNOMIAL B) { // 多项式相乘
 POLYNOMIAL head,t,p,q;
 head = t = (NODE)malloc(sizeof(item));
 for(p = A->next; p; p = p->next) { // 完成相乘过程
  for(q = B->next; q; q = q->next) {
   t->next = (NODE)malloc(sizeof(item));
   t->next->coefficient = p->coefficient * q->coefficient;
   t->next->power = p->power + q->power;
   t = t->next;
  }
 }
 t->next = NULL;
 Sort(head); // 排序
 p = head;
 while(p->next) { // 合并同类项
  q = p->next;
  while(q->next) {
   if(p->next->power == q->next->power) {
    p->next->coefficient += q->next->coefficient;
    t = q->next;
    q->next = t->next;
    free(t);
   }
   else q = q->next;
  }
  p = p->next;
 }
 return head;
}
void FreeMemory(POLYNOMIAL head) {
 POLYNOMIAL q,p = head;
 while(p) {
  q = p;
  p = q->next;
  free(q);
 }
}
int main() {
 printf("创建多项式A:\n");
 POLYNOMIAL A = Create();
 Sort(A);
 printf("A(x) = ");Show(A);
 printf("创建多项式B:\n");
 POLYNOMIAL B = Create();
 Sort(B);
 printf("B(x) = ");Show(B);
 POLYNOMIAL C = Mult(A,B);
 printf("C(x) = ");Show(C);
 printf("A(%.2lf) = %.4lf\n",2.0,Value(A,2.0));
 printf("B(%.2lf) = %.4lf\n",2.0,Value(B,2.0));
 printf("C(%.2lf) = %.4lf\n",2.0,Value(C,2.0));
 FreeMemory(A);
 FreeMemory(B);
 FreeMemory(C);
 return 0;
}
光点科技
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件... 点击进入详情页
本回答由光点科技提供
TwistDing
2013-06-26
知道答主
回答量:42
采纳率:0%
帮助的人:20.2万
展开全部
主要函数思想:
初始化一元多项式A
初始化一元多项式B
初始化一元多项式C
给一元多项式A赋入数据
给一元多项式B赋入数据(指数升序)
把AB各项累乘放入C中
用双指针的模式消除合并累加最后得到结果
输出
*/

//---------头文件----------
#include<stdio.h>
#include<stdlib.h>

//---------宏定义----------

#define TRUE 1
#define ERROR 0
#define OVERFLOW -2

//---------结构体和替换--------

typedef int Bool;
typedef struct Node
{
float coef;
int expn;
struct Node *prior,*next;
}Poly,*Polynomial;

//------函数-------

Bool InitPolynomial(Polynomial f);
Bool InputData(Polynomial f);
void Multiply(Polynomial f1,Polynomial f2,Polynomial f3);
void Add(Polynomial f3);
void OutputData(Polynomial f3);

//-----------主函数------------

void main()
{
Poly A,B,C,*f1=&A,*f2=&B,*f3=&C;
InitPolynomial(f1);InitPolynomial(f2);InitPolynomial(f3);
InputData(f1);InputData(f2);
Multiply(f1,f2,f3);
Add(f3);
OutputData(f3);
}

//---------其余函数---------

Bool InitPolynomial(Polynomial f)
{
if(!(f=(Polynomial)malloc(sizeof(Poly))))
{
exit(OVERFLOW);
}
f->next=NULL;
f->prior=NULL;
return TRUE;
}

Bool InputData(Polynomial f)
{
Polynomial StartNode=f,TempNode=f,NewNode;
int n;
printf("输入多项式的项数:");
do
{
scanf("%d",&n);
if(n<0)
{
printf("输入项数错误!重新输入!");
}
}while(n<0);
printf("按升序输入一元多项式的系数和指数:\n");
for(;n>0;n--)
{
if(!(NewNode=(Polynomial)malloc(sizeof(Poly))))
{
exit(OVERFLOW);
}
scanf("%f%d",&NewNode->coef,&NewNode->expn);
TempNode->next=NewNode;
NewNode->prior=TempNode;
NewNode->next=NULL;
TempNode=NewNode;
}
f=StartNode;
return TRUE;
}

void Multiply(Polynomial f1,Polynomial f2,Polynomial f3)
{
Polynomial StartNode=f3,TempNode=f3,NewNode,Point1=f1->next,Point2;
while(Point1)
{
Point2=f2->next;
for(;Point2;Point2=Point2->next)
{
if(!(NewNode=(Polynomial)malloc(sizeof(Poly))))
{
exit(OVERFLOW);
}
NewNode->coef=Point1->coef*Point2->coef;
NewNode->expn=Point1->expn+Point2->expn;
TempNode->next=NewNode;
NewNode->prior=TempNode;
NewNode->next=NULL;
TempNode=NewNode;
}
Point1=Point1->next;
}
f3=StartNode;
}

void Add(Polynomial f3)
{
Polynomial Point1=f3->next,Point2,StartNode=f3,Temp;
while(Point1)
{
for(Point2=Point1->next;Point2;)
{
if(Point1->expn==Point2->expn)
{
Point1->coef+=Point2->coef;
Temp=Point2;
Point2=Point2->next;
Temp->prior->next=Temp->next;
Temp->next->prior=Temp->prior;
//DeleteNode(f3,i);
}
else
{
Point2=Point2->next;
}
}
if(0==Point1->coef)
{
Temp=Point1;
Point1=Point1->next;
Temp->prior->next=Temp->next;
Temp->next->prior=Temp->prior;
}
else
{
Point1=Point1->next;
}
}
f3=StartNode;
}

void OutputData(Polynomial f3)
{
f3=f3->next;
printf("f(x)=");
while(f3)
{
if(f3->expn)
{
printf("%.0fx^%d",f3->coef,f3->expn); //这里数据为了好看为.0格式,其实不应该要的,因为是浮点型数据,而这里的浮点型恰好不为小数。
}
else
{
printf("%.0f",f3->coef);
}

f3=f3->next;
if(f3&&f3->coef>0)
{
printf("+");
}
}
getchar();
getchar();

}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sleeplioncj
2013-06-25 · TA获得超过288个赞
知道小有建树答主
回答量:177
采纳率:0%
帮助的人:104万
展开全部
这个有点意思,先mark再发代码。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
帅丫头来也
2013-06-25
知道答主
回答量:4
采纳率:0%
帮助的人:5.2万
展开全部
zhe taitaiatiiojdiv
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式