⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1.cpp

📁 是数据结构中经常见到的矩阵运算
💻 CPP
字号:
#include<stdio.h>
#include<malloc.h>
#define NULL 0
typedef struct slnode
{
    int data;
    int ext;
    struct slnode *next;
}node;

void head(node **h)
{   (*h)=(node*)malloc(sizeof(node));
    (*h)->next=NULL;
    (*h)->data=0;
}
void display(node *p)
{
    node *q;
    int i,j;
    q=p->next;
    i=p->data;
    printf("%d  ",i);
    while(q!=NULL)
    {
        i=q->data;
        j=q->ext;
        printf("%d,%d  ",i,j);
    q=q->next;
    }
	printf("\n");
}
int insert(node **h,int c,int e)
{
    node *p;
    int i=1;
    p=*h;
    if(c!=0)
    {
        node *s;
        s=(node*)malloc(sizeof(node));
        s->data=c;
        s->ext=e;
        while((p->next!=NULL)&&i)
            if(p->next->ext==e)
            {
                p->next->data=p->next->data+c;
                free(s);
                return 1;
            }
            else if(p->next->ext<e)
                p=p->next;
            else i=0;
            s->next=p->next;
            p->next=s;
    }
    return 0;
}

node *sum(node *pa,node *pb)
{
    node *p,*q,*t,*r,*h;
    int i=0,j;
    t=pa;
    p=pa->next;
    q=pb->next;
    while((p!=NULL)&&(q!=NULL))
    {
        j=0;
        if(p->ext<q->ext)
        {
            t->next=p;
            p=p->next;
        }
        else if(p->ext==q->ext)
        {
            i++;
            p->data=p->data+q->data;
            if(p->data!=0)
            {
                t->next=p;
                p=p->next;
                r=q;
                q=q->next;
                free(r);
            }
            else
            {
                i++;
                r=p;
                h=q;
                p=p->next;
                q=q->next;
                free(r);
                free(h);
                j=1;
            }
        }
        else
        {
            t->next=q;
            q=q->next;
        }
        if(!j)
        t=t->next;
    }
    if(p!=NULL)
        t->next=p;
    else
        t->next=q;
    pa->data=pa->data+pb->data-i;
    return (pa);
}
node *tend(node *pa,node *q)
{
    node *h,*p;
    int i,j;
    head(&h);
    h->data=pa->data;
    p=pa->next;
    while(p!=NULL)
    {
        i=(p->data)*(q->data);
        j=p->ext+q->ext;
        insert(&h,i,j);
        p=p->next;
    }

    return h;
}
node *sub(node *pa,node *pb)
{
    node *p,*q,*t,*r,*h;
    int i=0,j;
    t=pa;
    p=pa->next;
    q=pb->next;
    while((p!=NULL)&&(q!=NULL))
    {
        j=0;
        if(p->ext<q->ext)
        {
            t->next=p;
            p=p->next;
        }
        else if(p->ext==q->ext)
        {
            i++;
            p->data=p->data-q->data;
            if(p->data!=0)
            {
                t->next=p;
                p=p->next;
                r=q;
                q=q->next;
                free(r);
            }
            else
            {
                i++;
                r=p;
                h=q;
                p=p->next;
                q=q->next;
                free(r);
                free(h);
                j=1;
            }
        }
        else
        {
            t->next=q;
            q->data=0-q->data;
            q=q->next;
        }
        if(!j)
        t=t->next;
    }
    if(p!=NULL)
        t->next=p;
    else
    {
       t->next=q;
       while(q!=NULL)
         {
            q->data=0-q->data;
            q=q->next;
         }
    }
    pa->data=pa->data+pb->data-i;
    return (pa);
}
node *mul(node *pa,node *pb)
{
    node *p,*t,*q;
    head(&t);
    p=pb->next;
    while(p!=NULL)
    {
        q=tend(pa,p);

        sum(t,q);

        p=p->next;
    }
    return t;
}
void cread(node **p)
{
    int i,j,k,r=0,n;
	printf("请输入你要的数的数目:\n");
    scanf("%d",&n);
	while((n<0)||(n>10))
	{
		printf("请重输:\n");
		scanf("%d",&n);
	}
    printf("请输入%d个数:\n",n);
    for(i=0;i<n;i++)
    {
        scanf("%d,%d",&j,&k);
        if(j==0)
        {
            printf("输入的数无效,请重输:\n");
            i--;
        }
        else
        r=r+insert(p,j,k);
    }
    (*p)->data=n-r;
}

void main()
{
    node *p,*q,*r;
    int j=1,k,l;
    head(&p);
    head(&q);
	printf("请输入多项式S1\n");
    cread(&p);
	printf("多项式S1的数:\n");
    display(p);
	printf("请输入多项式S2\n");
    cread(&q);
	printf("多项式S2的数:\n");
    display(q);
	do
	{
		printf("请选择运算符:\n");
		printf("加 [1],减 [2],乘 [3]\n");
		scanf("%d",&k);
		switch(k)
		{
		case 1: r=sum(p,q); l=0; break;
		case 2: r=sub(p,q); l=0; break;
		case 3: r=mul(p,q); l=0; break;
		default: l=1; break;
		}
	}while(l);
	printf("运算后的结果:\n");
	display(r);
    //getch();
}


    



    
    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -