P39一元多项式的表示
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
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-&f=y;
s-&pn=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-&f,q-&pn);
q=q->next;
}
}
int cmp(ElemType a,ElemType b){
pn&pn) return -1;
else pn==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: //两者指数值相等
f;
if(fabs(sum)>1e-4){//修改多项式Pa中当前结点的系数
qa-&f=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;
基础c语言代码}
main()
{
int x,h,*y;
SqStack *a;
init(a);
scanf("%d%d",&x,&h);
while(x!=0)
{
push(a,x%h);
x=x/h;
}
printf("\n");
while(empty(a)!=0) //若栈a不为空,则返回y的值
{
pop(a,y);
if(*y<10)
printf("%d",*y);
else
printf("%c",*y-10+97);
}
}
P48 //括号配对检验(栈)
#include <stdio.h>
#include <stdlib.h>
typedef struct{
char *elem;
int top;
}stack;
void init(stack *s){ //构造一个空栈,并为其分配存储空间
s->elem=(char*)malloc(100*sizeof(char));
s->top=0;
}
void push(stack *s,char c){ //插入c为新的栈顶元素
s->elem[s->top++]=c;
}
void pop(stack *s,char *c){ //删除栈S的栈顶元素,并用c返回其值,并返回1,否则返回0
*c=s->elem[--s->top];
}
char gettop(stack *s){ //栈存在且非空,返回栈顶元素
return s->elem[s->top-1];
}
int cmp(char a,char b){
if((a=='(')&&(b==')')) return 1;
if((a=='[')&&(b==']')) return 1;
if((a=='{')&&(b=='}')) return 1;
return 0;
}
int empty(stack *s){ //若栈为空,则返回true,否则false
return s->top;
}
main(){
stack *s; //构造栈S
char *string,c; //输入字符串数组string和数据元素c
int i=0;
scanf("%s",string);
init(s); //构造一个空栈S
push(s,string[i]); //将字符串中的第i个元素,插入到栈S中
do{
i++;
if(cmp(gettop(s),string[i]))
pop(s,&c); //删除S的栈顶元素,并用C返回其值
else
push(s,string[i]); //将字符串中的第i个元素,插入到栈S中
} while(string[i+1]);
if(empty(s)==0) //若栈为空,返回ok,否则返回no
printf("ok");
else
printf("no");
}
P96稀疏矩阵
#include<stdio.h>
#include<stdlib.h>
#define M 100
#define ROW 6
#define COL 5
typedef struct{
int i,j;
int e;
}Triple;
typedef struct{
Triple data[M+1];
int mu,nu,tu;
}TSMatrix;
void DataIn(TSMatrix *m){
FILE *fp;
int i=1,j=1,n=1,x;
fp=fopen("m.txt","r");
while(!feof(fp)){
fscanf(fp,"%d",&x);
if(x!=0) {
m->data[n].i=i;
m->data[n].j=j;
m->data[n].e=x;
n++;
}
i=(j%COL)?i:++i;
j=j%COL+1;
}
m->mu=ROW;m->nu=COL;
m->tu=n-1;
}
void DataOut(TSMatrix m){
int i,j,n=1;
for(i=1;i<=m.mu;i++){
printf("\n");
for(j=1;j<=m.nu;j++)
if((i==m.data[n].i)&&(j==m.data[n].j))
{printf("%6d",m.data[n].e);n++;}
else
printf("%6d",0);
}
}
int Trans(TSMatrix m,TSMatrix *t){
int q,col,p;
t->mu=m.nu;t->nu=m.mu;t->tu=m.tu;
if(t->tu){
q=1;
for(col=1;col<=m.nu;col++)
for(p=1;p<=m.tu;p++)
if(m.data[p].j==col){ t->data[q].i=m.data[p].j;t->data[q].j=m.data[p].i;
t->data[q].e=m.data[p].e;q++;
}
}
return 1;
}
main(){
TSMatrix a,b;
DataIn(&a);
DataOut(a);
Trans(a,&b);
printf("\n");
DataOut(b);
}
P128//遍历二叉树
#include <stdlib.h>
#define M 40
typedef struct btnode{
char data;
struct btnode *lchild,*rchild;
}BtNode;
BtNode *p[M+1];
BtNode *Creat_Bt(void){ /*建立二叉树*/
int i,j;char ch;
BtNode *s,*t;
scanf("%d%c",&i,&ch);
while(i!=0&&ch!='#')
{
s=(BtNode*)malloc(sizeof(BtNode));
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论