数据结构c语言程序有哪些,数据结构程序代码(C语言版).doc

数据结构程序代码(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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值