• 数据结构(二)笔记


    多项式的乘法与加法运算

    多项式的表示

    仅表示非零项

    数组:

    编程简单、调试容易
    需要实现确定数组大小

    链表:

    动态性强
    编程略为复杂、调试比较困难

    一种比较好的实现方法是:动态数组

    数据结构设计

    typedef struct PolyNode *Polynomial;
    struct PolyNode{
    	int coef;//系数
    	int expon;//指数
    	Polynomial link;//指向下一个节点的指针
    

    程序框架搭建

    int main()
    {
    	读入多项式1
    	读入多项式2
    	乘法运算并输出
    	加法运算并输出
    	return 0;
    }
    
    需要设计的函数

    读一个多项式
    两多项式相乘
    两多项式相加
    多项式输出

    int main()
    {
    	Polynomial P1,P2,PP,PS;
    
    	P1 = ReadPoly();
    	P2 = ReadPoly();
    	PP = Mult(P1,P2);
    	PrintPoly(PP);
    	PS = Add(P1,P2);
    	PrintPoly(PS);
    	return 0;
    

    如何读入多项式

    先读项数,再一对一对的读指数和系数

    Polynomial ReadPoly()
    {
    	……
    	scanf("%d",&N);
    	……
    	while(N--)
    	{
    		scanf("%d %d",&c,&e);
    		Attach(c,e,&Rear);
    	}
    	……
    	return P;
    }
    

    Rear初值是多少?
    两种处理方法:
    1.Rear初值为NULL
    在Attach函数中根据Rear是否为NULL做不同处理
    2.Rear指向一个空结点

    void Attach(int c,int e,Polynomial *pRear)//pRear是指针的指针
    {
    	Polynomial P;
    	P = (Polynomial)malloc(sizeof(struct PolyNode));
    	P->coef = c;
    	P->expon = e;
    	P->link = NULL;
    	(*pRear)->link = P;
    	*pRear = P;
    }
    
    Polynomial ReadPoly()
    {
    	Polynomial P,Rear,t;
    	int c,e,N;
    	scanf("%d",&N);
    	P = (Polynomial)malloc(sizeof(struct PolyNode));
    	P->link = NULL;
    	Rear = P;
    	while(N--)
    	{
    		scanf("%d %d",&c,&e);
    		Attach(c,e,&Rear);
    	}
    	t = P;
    	P = P->link;
    	free(t);
    	return P;
    }
    

    如何将两个多项式相加

    Polynomial Add(Polynomial P1,Polynomial P2)
    {
    	……
    	t1 = P1;
    	t2 = P2;
    	P = (Polynomial)malloc(sizeof(struct PolyNode));
    	P->link = NULL;
    	Rear = P;
    	while(t1 && t2){
    			if(t1->expon == t2->expon){
    					……
    			}
    			else if(t1->expon>t2->expon){
    					……
    			}
    			else {
    					……
    			}
    	}
    	while(t1)
    	{
    	……
    	}
    	while(t2)
    	{
    	……
    	}
    	……
    	return P;
    }
    

    如何将两个多项式相乘

    方法1.将乘法运算转换为加法运算
    将P1当前项(ci,ei)乘P2多项式,再加到结果多项式里

    t1 = P1;
    t2 = P2;
    P = (Polynomial)malloc(sizeof(struct PolyNode));
    P->link = NULL;
    Rear = P;
    while(t2){
    		Attach(t1->coef*t2->coef,t1->expon+t2->expon,&Rear);
    		t2 = t2->link;
    }
    

    方法2.逐项插入
    将P1当前项(c1i,e1i)乘P2当前项(c2i,e2i),并插入到结果多项式中,关键是要找到插入位置。
    初始结果多项式可由P1第一项乘P2获得

    如何将多项式输出

    void PrintPoly( Polynomial P )
    {/*输出多项式*/
    	int flag = 0;   /*辅助调整输出格式用*/
    	
    	if(!P) {printf("0 0
    ");return;}
    
    	while(P) {
    			if(!flag)
    				flag = 1;
    			else
    				printf(" ")
    			printf("%d %d",P->coef,P->expon);
    			P = P->link;
    	}
    	printf("
    ");
    }
    
  • 相关阅读:
    npm设置和取消代理的方法 规格严格
    Postgresql数据库的一些字符串操作函数 规格严格
    cpio命令 规格严格
    SNMP_1.3.6.1.6.3.1.1.5.5 authenticationFailure 规格严格
    【23】种设计模式全面解析(超级详细) 规格严格
    利用ssh反向代理以及autossh实现从外网连接内网服务器 规格严格
    PostgreSQL常用字符串函数与操作符 规格严格
    ssh端口转发实现外网访问 规格严格
    Kafka解析之topic创建 规格严格
    mysql union 与 union all 语法及用法 规格严格
  • 原文地址:https://www.cnblogs.com/HBU-xuhaiyang/p/12520656.html
Copyright © 2020-2023  润新知