1. 数据结构(c语言)
呵呵,碰巧到你网络空间看了下,看到了你想知道的这个问题,蒽蒽,下午就给你答案哈~~~
恩,可以了:
#include <stdio.h>
#include <stdlib.h>
typedef struct term
{
double coef;//系数
int expn; //指数
struct term *next;
}term,*polynomial;
//注:下面的head_p是头指针,而非头结点。其存放的是多项式的第一项
int depart_polyn(polynomial &head_p,polynomial &Odd_items,polynomial &Even_items)//奇数项,偶数项
{
int i=1,j=1;
polynomial odd,even,p;
Odd_items=Even_items=NULL;
p=head_p;
while(1)
{
if(p->expn%2)
{
if(i)
{
i=0;//使得奇数项头指针只赋值一次
Odd_items=p;
odd=Odd_items;
}
else
{
odd->next=p;
odd=odd->next;
}
p=p->next;
odd->next=Odd_items;
}
else
{
if(j)
{
j=0;//作用同上
Even_items=p;
even=Even_items;
}
else
{
even->next=p;
even=even->next;
}
p=p->next;
even->next=Even_items;
}
if(p==head_p)
break;
}
return 1;
}
void print_polyn(polynomial head)//这函数只是针对main函数内给出的多项式例子编的,处理的系数均为正数。
{
polynomial p=head;
if( !head)
{
puts("该表为空:");
return;
}
while(1)
{
if(p->next!=head)
printf("%gm^%d + ",p->coef,p->expn);
else
printf("%gm^%d\n",p->coef,p->expn);
p=p->next;
if(p==head)
break;
}
putchar('\n');
}
int main()
{
int i;
polynomial head_p,head,Odd_items,Even_items,newbase;
head_p=(polynomial)malloc(sizeof(term));
head_p->coef=2.71;
head_p->expn=0;
head=head_p;
//随意创建了一个稀疏多项式,以验证
for(i=1;i<11;i++)
{
newbase=(polynomial)malloc(sizeof(term));
newbase->coef=2.71*i;
newbase->expn=i*13;
head->next=newbase;
head=head->next;
}
head->next=head_p;//构成循环链表
puts("原稀疏多项式:");
print_polyn(head_p);
if(depart_polyn(head_p,Odd_items,Even_items) )
{
puts("分解后的奇数项稀疏多项式:");
print_polyn(Odd_items);
puts("分解后的偶数项稀疏多项式:");
print_polyn(Even_items);
}
return 0;
}
哪里不懂可追问:
2. C语言实现的一元多项式的表示及相减
#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
int data;
struct Node *next;
}Node;//链表结点
typedef struct LinkList//定义链表数据类型
{
Node *head;//表头结点
void PrintMform()//输出多项式
{
Node *p=head->next;
int exp = head->data-1;
while(p!=NULL)
{
if(exp==head->data-1)
printf("%dX^%d",p->data,exp);
else
{
if(p->data>0)
printf("+%dX^%d",p->data,exp);
if(p->data==0)
printf("+0");
if(p->data<
0)
printf("%dX^%d",p->data,exp);
}
exp--;
p=p->next;
}
printf("\n");
}
void CreateByInput(int length)//通过输入元素建立链表
{
head=(Node *)malloc(sizeof(Node));
head->data=0;//表头节点存储链表真实长度
head->next=NULL;
int i,temp;
Node *p,*cur = head;
for(i=1;i<=length;i++)
{
printf("structing LinkList,Please input the value:\n");
scanf("%d",&temp);
p = (Node *)malloc(sizeof(Node));
p->data=temp;
p->next=cur->next;
cur->next=p;
cur = cur->next;
head->data++;
}
}
}LinkList;
void main()
{
LinkList L1,L2;
int length;//就是多项式的项数
printf("Please input the first LinkList's length:\n");
scanf("%d",&length);
printf("begin to struct the first LinkList\n");//开始构造第一个多项式
L1.CreateByInput(length);
printf("begin to struct the second LinkList\n");//开始构造第二个多项式
L2.CreateByInput(length);
printf("the first oxiangshi is:\n");
L1.PrintMform();//输出第一个多项式
printf("the second oxiangshi is:\n");
L2.PrintMform();//输出第二个多项式
Node *p = L1.head->next;/////////////////从这里开始
Node *q = L2.head->next;//是计算多项式L1-L2,结果存入L1
while(p!=NULL)
{
p->data-=q->data;
p=p->next;
q=q->next;
}/////////////////////////////////////到这里结束
printf("the substract is:\n");
L1.PrintMform();
system("pause");
}
3. C语言数据结构问题
#include<stdio.h>
typedef struct polynode
{
int coef;
int exp;
struct polynode *next;
}polynode,*polylist;
polylist polycreate()
{
polynode *head,*rear,*s;
int c,e;
head=(polynode *)malloc(sizeof(polynode));
rear=head;
scanf("%d,%d",&c,&e);
while(c!=0)
{
s=(polynode *)malloc(sizeof(polynode));
s->coef=c;
s->exp=e;
rear->next=s;
rear=s;
scanf("%d,%d",&c,&e);
}
rear->next=NULL;
return(head);
}
void polyadd(polylist polya,polylist polyb)
{
polynode *p,*q,*tail,*temp;
int sum;
p=polya->next;
q=polyb->next;
tail=polya;
while(p!=NULL&&q!=NULL)
{
if(p->exp<q->exp)
{tail->next=p;tail=p;p=p->next;}
else if(p->exp==q->exp)
{
sum=p->coef+q->coef;
if(sum!=0)
{
p->coef=sum;
tail->next=p;tail=p;
p=p->next;
temp=q;q=q->next;
free(temp);
}
else{
temp=p;p=p->next;free(temp);
temp=q;q=q->next;free(temp);
}
}
else{
tail->next=q;tail=q;
q=q->next;
}
}
if(p!=NULL) tail->next=p;
else if(q!=NULL) tail->next=q;
}
main()
{
int m;
polynode *p;
polylist la,lb;
printf("when input the data,please by count.\n");
printf("choose an operation(1.add or 2.minus)");
scanf("%d",&m);
if(m==1)
{
printf("Input first list(want to over,input 0)(coef,exp):\n");
la=polycreate();
printf("Input second list(wanto to over,input 0)(coef,exp):\n");
lb=polycreate();
polyadd(la,lb);
p=la->next;
printf("the result is:\n");
printf("%dX(%d)",p->coef,p->exp);
p=p->next;
while(p!=NULL)
{
printf("%+dX(%d)",p->coef,p->exp);
p=p->next;
}
}
if(m==2)
{
printf("input first list(want to over,input 0)(coef,exp):\n");
la=polycreate();
printf("input second list(want to over,input 0)(coef,exp):\n");
lb=polycreate();
p=lb;
while(p!=NULL)
{
p->coef=(-p->coef);
p=p->next;
}
polyadd(la,lb);
p=la->next;
printf("the result is:\n");
printf("%dX(%d)",p->coef,p->exp);
p=p->next;
while(p!=NULL)
{
printf("%+dX(%d)",p->coef,p->exp);
p=p->next;
}
}
}
4. c语言问题
大概看了一下,楼主的意思是
通过CreatPolyn创建一个链表,而且貌似元素是根据expn的值有序排列的
创建时首先搜索待插入元素的关键字是否存在,不存在才插入
插入的时候,楼主不想再做一次比较了,因此搞了个q想来保存插入的位置
抛开逻辑不谈,如果这三个函数的实现与q的定义在一个文件中,那么q就是全局变量,可以被本文件的代码所访问,这一点建议楼主学习一下全局变量的相关知识。
关于效率,其实再次搜索一次也无妨,因为while(p && e.expn<p->data.expn)
与while (p->next &&i<q)的执行效率没有很大的差别。而且不在这里使用全局变量,也可以增加各个功能函数间的独立性,易于阅读代码,减少bug的出现。
5. C语言高手请进!!
#ifndef
Polynomial_H
#define
Polynomial_H
#include
"List.h"
class
Term
{
public:
int
coef;
int
exp;
Term()
:
coef(0),
exp(0)
{}
Term(int
c,
int
e)
:
coef(c),
exp(e)
{}
Term(int
c)
:
coef(c),
exp(0)
{}
};
class
Polynomial
:
List<Term>
{
public:
void
Input()
{
cout
<<
endl
<<
"输入多项式的各项系数和指数";
cout
<<
endl
<<
"注意:请按降序输入各项,输入系数0表示结束"
<<
endl;
int
coef,
exp;
for(int
i
=
1;
;
i
)
{
cout
<<
"第"
<<
i
<<
"项的系数:";
cin
>>
coef;
if
(coef)
{
cout
<<
"指数:";
cin
>>
exp;
Term
term(coef,
exp);
Insert(term);
}
else
break;
}
}
void
Print()
{
cout
<<
endl;
First();
if
(!IsEmpty())
{
Term
*p
=
Next();
cout
<<
p->coef;
if
(p->exp)
{
cout
<<
"x";
if
(p->exp
!=
1)
cout
<<
"^"
<<
p->exp;
}
while
(Next()
!=
NULL)
{
p
=
Get();
if
(p->coef
>
0)
cout
<<
"
";
cout
<<
p->coef;
if
(p->exp)
{
cout
<<
"x";
if
(p->exp
!=
1)
cout
<<
"^"
<<
p->exp;
}
}
}
cout
<<
endl;
}
friend
void
PolyAdd
(Polynomial
6. coef是什么意思
coef 是coefficient的缩写,是“系数”。
系数(coefficient),是指代数式的单项式中的数字因数。单项式中所有字母的指数的和叫做它的次数。通常系数不为0,应为有理数。
简介
这里“系数”这个词的用法与它的原本用法不太相同,但仍可以借用。假设所要反映的社会关系为3x=y,x代表基本情况(人口、资源等事实),不同的国家有不同的情况,3则代表那个数系——表示关系的数字。
这么一乘我们就可以得出,它所要勾画的相应国家的实际情况了,即得数y。当然,这样做是否能真实地反映实际社会关系倒不一定。数学总结。
7. 这段程序什么意思啊!C语言求大神指导!!!
while(pa&&pb) //pa,pb指针都不为空,则进入循环
{
CreateItem(s); //创建一个新的项目s(不知道函数实现调用的是不是malloc)
i=ItemComp(*pa,*pb); //两个项目之间的比较,返回值的意思需要根据函数代码来看
if(i==0){
s->coef=pa->coef+pb->coef; //将两个项目中的coef元素之后给新的项目s的coef
s->expn=pa->expn;//给结构体的元素赋值
if(s->coef){last->next=s;s->next=NULL;last=s;}//如果项目s的coef不为零,那就把s插入到链表的尾部,同时把last指向新的尾节点
pa=pa->next;//指着向后移
pb=pb->next;//指着向后移
}
else if(i<0){s->coef=pa->coef;s->expn=pa->expn;//如果i<0,就值大的pa指针的两个元素赋给s
last->next=s;//下面三句是把s插入到链表的尾部,同时把last指向新的尾节点
s->next=NULL;
last=s;
pa=pa->next;//值大的pa指针向后一位
}
else{ s->coef=pb->coef;s->expn=pb->expn;//下面的这个分支的功能同上,把值大的pb指针赋给s
last->next=s; s->next=NULL;
last=s;
pb=pb->next;
}
}
s0=pa?pa:pb;//如果pa是空指针就把pb指针赋给s0,反之,则把pa赋给s0
while(s0){
CreateItem(s);//创建新的项目节点s
*s=*s0;
last->next=s;//下面三句是把s插入到链表的尾部,同时把last指向新的尾节点
s->next=NULL;
last=s;
s0=s0->next;//s0指针向后移一位
}
认真解答的,及时采纳。
8. c 语言中 score是什么意思
在C语言中没有score这个保留字,换句话它在C语言中只能算是一个标识符,没有特殊的语法功能。
一般来说C语言的标识符,有两个基本的使用原则。
1、要符合语法要求,C语言中规定,标识符有数字、字母、下划线(_)组成,而且第1符号只能为字母或者下划线。
2、标识符的命名,尽量便于阅读。如问题中的score用于表示分数,就容易理解。