数据结构程序代码(C语言版)
P39一元多项式的表示
#include
#include
#include
typedef struct{
float coef;
int expn;
}ElemType;
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
typedef LinkList polyn;
void CreatP(polyn p,int m){
int x;
float y;
int i;
polyn q,s;
q=p;
for(i=1;i<=m;i++){
s=(polyn)malloc(sizeof(LNode));
scanf("%f%d",&y,&x);
s->data.coef=y;
s->data.expn=x;
q->next=s;
q=s;
}
s->next=NULL;
}
void PrintP(polyn p){
polyn q;
q=p->next;
printf("\n");
while(q){
printf("%4.1fx%d+",q->data.coef,q->data.expn);
q=q->next;
}
}
int cmp(ElemType a,ElemType b){
if(a.expn>b.expn) return -1;
else if(a.expn==b.expn) return 0;
else return 1;
}
void AddPolyn(polyn pa,polyn pb){ //完成多项式的相加,即:Pa=Pa+Pb,并销毁Pb
polyn ha,hb,qa,qb,qt;
float sum;
ElemType a,b;
ha=pa;hb=pb;
qa=ha->next;qb=hb->next;
while(qa&&qb){
a=qa->data;b=qb->data;
switch(cmp(a,b)){
case -1: //Pa中当前结点的指数值小
ha=qa;qa=ha->next;
break;
case 0: //两者指数值相等
sum=a.coef+b.coef;
if(fabs(sum)>1e-4){//修改多项式Pa中当前结点的系数
qa->data.coef=sum;ha=qa;
}
else{
ha->next=qa->next;free(qa);
}
hb=qb;qb=hb->next;
qa=ha->next;
break;
case 1: //Pb中当前结点的指数值小
hb->next=qb->next;qt=qb;qb=hb->next;
qt->next=qa;ha->next=qt;
ha=ha->next;
break;
}
}
if(qb!=NULL) //链接Pb中剩余结点
qa->next=qb;
}
main()
{
polyn pa,pb;
pa=(polyn)malloc(sizeof(LNode));
pb=(polyn)malloc(sizeof(LNode));
CreatP(pa,5);
CreatP(pb,6);
PrintP(pa);
PrintP(pb);
AddPolyn(pa,pb);
PrintP(pa);
}
P48数制转换
/*将十进制数x转换为h进制(栈)*/
#define M 100 //存储空间的分配
typedef struct
{
int elem[M];
int top;
}SqStack;
void init(SqStack *s) //构造一个空栈
{
s->top=0;
}
int empty(SqStack *s) //若栈为空,则返回true,否则false
{return(s->top);}
int push(SqStack *s,int x) //在栈中插入x为新的栈顶元素
{
if(s->top==M) return 0;
s->elem[s->top]=x;
s->top++;
return 1;
}
int pop(SqStack *s,int *y) //删除栈S的栈顶元素,并用y返回其值,并返回1,否则返回0
{
if(s->top==0) return 0;
--s->top;*y=s->elem[s->top];
return 1;
}
main()
{
int x,h,*y;
SqStack *a;
init(a);
scanf("%d%d",&x,&h);
while(x!=0)
{
push(a,x%h);
x=x/h;
}
pri