C语言单链表实现多项式相加

本文实例为大家分享了C语言单链表实现多项式相加的具体代码,供大家参考,具体内容如下

//多项式的相加和相乘
#include<stdio.h>
#include<stdlib.h>
#pragma warning(disable:4996)//兼容scanf
typedef struct node {
  int coef;
  int expon;
  struct node* link;
}Polynode,*Polynomial;
Polynomial InsertPolyLinklist(Polynomial in,Polynomial Pread) {
  Pread->link = in;
  Pread = in;
  in->link = NULL;
  return Pread;
}
Polynomial ReadPoly(void) {

  Polynomial Pread = (Polynomial)malloc(sizeof(Polynode));
  Pread->link = NULL;
  Polynomial H = Pread;
  int N;
  scanf("%d ", &N);
  while (N--) {
    Polynomial p = (Polynomial)malloc(sizeof(Polynode));
    scanf("%d %d", &p->coef, &p->expon);
    Pread= InsertPolyLinklist(p,Pread);
  }
  Polynomial F;
  F = H->link;
  free(H);
  return F;
}
void PrintPoly(Polynomial F) {
  while(F != NULL) {
    printf("%d %d ", F->coef, F->expon);
    F = F->link;
  }
  printf("\n");
}
Polynomial Add(Polynomial p1, Polynomial p2) {
  Polynomial t1=p1,t2=p2;
  Polynomial p=(Polynomial)malloc(sizeof(Polynode));
  p->link = NULL;
  Polynomial q = p;
  Polynomial read;
  while (t1&&t2) {
    if (t1->expon == t2->expon) {
      if (t1->coef + t2->coef) {
        t1->coef = t1->coef + t2->coef;
        t1->expon = t1->expon;
        read = t1;
        q->link = read;
        q = read;
        t1 = t1->link;
        t2 = t2->link;
      }
    }
    else {
      if (t1->expon > t2->expon){
        read = t1;
        q->link = read;
        q = read;
        t1 = t1->link;
      }
      else {
        if (t1->expon < t2->expon) {
          read = t2;
          q->link = read;
          q = read;
          t2 = t2->link;
        }
      }
    }
  }
  if (t1) {
    q->link = t1;
  }
  if (t2) {
    q->link = t2;
  }
  Polynomial F = p->link;
  free(p);
    return F;
}
int main(void) {
  Polynomial p1, p2, pp, ps;
  p1 = ReadPoly();
  PrintPoly(p1);
  p2 = ReadPoly();
  PrintPoly(p2);
  pp = Add(p1, p2);
  PrintPoly(pp);
// ps = Mult(p1, p2);
// PrintPoly(ps);
  return 0;
}

参考

MOOC 浙大数据结构

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C语言树状数组的实例详解

    C语言树状数组的实例详解 最近学了树状数组,给我的感觉就是 这个数据结构好神奇啊^_^ 首先她的常数比线段树小,其次她的实现复杂度也远低于线段树 (并没有黑线段树的意思=-=) 所以熟练掌握她是非常有必要的.. 关于树状数组的基础知识与原理网上一搜一大堆,我就不赘述了,就谈一些树状数组的应用好了 1,单点修改,求区间和 #define lowbit(x) (x&-x) // 设 x 的末尾零的个数为 y , 则 lowbit(x) == 2^y void Update(int i,int v)

  • C语言实现的学生选课系统代码分享

    好久没玩过C语言了,上一次还是在大二的时候...废话不多说,这里有一个C语言实现的学生选课系统代码,分享给大家,具体如下: #include<stdio.h> #include<stdlib.h> int N1,N2,kk1,kk2,kk3; struct couse * head1; struct student * head2; struct couse//课程信息结构体 { int num1; char name1[20]; int score; int nelepeo; /

  • C语言链表实现贪吃蛇游戏

    阅读学习了源代码,并做了简单的注释和修改,里面只用了链表数据结构,非常适合C语言入门者学习阅读. 程序可在VS2013下编译运行. #include<stdio.h> #include<time.h> #include<windows.h> #include<stdlib.h> #define U 1 #define D 2 #define L 3 #define R 4 //蛇的状态,U:上 :D:下:L:左 R:右 typedef struct SNAK

  • linux下c语言的多线程编程

    我们在写linux的服务的时候,经常会用到linux的多线程技术以提高程序性能 多线程的一些小知识: 一个应用程序可以启动若干个线程. 线程(Lightweight Process,LWP),是程序执行的最小单元. 一般一个最简单的程序最少会有一个线程,就是程序本身,也就是主函数(单线程的进程可以简单的认为只有一个线程的进程) 一个线程阻塞并不会影响到另外一个线程. 多线程的进程可以尽可能的利用系统CPU资源. 1创建线程 先上一段在一个进程中创建一个线程的简单的代码,然后慢慢深入. #incl

  • 必须知道的C语言八大排序算法(收藏)

    概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 我们这里说说八大排序就是内部排序. 当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序.堆排序或归并排序序. 快速排序:是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字是随机分布时,快速排序的平均时间最短: 1.插入排序-直接插入排序(Straight Insertion Sort) 基本思想: 将一个记录插入到

  • C语言单链表实现多项式相加

    本文实例为大家分享了C语言单链表实现多项式相加的具体代码,供大家参考,具体内容如下 //多项式的相加和相乘 #include<stdio.h> #include<stdlib.h> #pragma warning(disable:4996)//兼容scanf typedef struct node { int coef; int expon; struct node* link; }Polynode,*Polynomial; Polynomial InsertPolyLinklis

  • C语言单链表实现方法详解

    本文实例讲述了C语言单链表实现方法.分享给大家供大家参考,具体如下: slist.h #ifndef __SLIST_H__ #define __SLIST_H__ #include<cstdio> #include<malloc.h> #include<assert.h> typedef int ElemType; typedef struct Node { //定义单链表中的结点信息 ElemType data; //结点的数据域 struct Node *next

  • Go语言单链表实现方法

    本文实例讲述了Go语言单链表实现方法.分享给大家供大家参考.具体如下: 1. singlechain.go代码如下: 复制代码 代码如下: ////////// //单链表 -- 线性表 package singlechain //定义节点 type Node struct {     Data int     Next *Node } /* * 返回第一个节点 * h 头结点  */ func GetFirst(h *Node) *Node {     if h.Next == nil {  

  • C语言单链表的实现

    单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素. 链表结构: SList.h #pragma once typedef int DataType; typedef struct SListNode { DataType data; struct SListNode* next; }SListNode; // 如果要修改链表就必须加引用 SListNode* _BuyNode(DataType x); //建立节点 void PrintSlist(SListNode

  • 详解go语言单链表及其常用方法的实现

    目的 在刷算法题中经常遇到关于链表的操作,在使用go语言去操作链表时不熟悉其实现原理,目的是为了重温链表这一基础且关键的数据结构. 1.链表的特点和初始化 1.1.链表的特点 用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的) 1.2.结点 结点(node) 数据域 => 存储元素信息 指针域 => 存储结点的直接后继,也称作指针或链 首元结点 是指链表中存储的第一个数据元素的结点 头结点 是在首元结点之前附设的一个结点,其指针域指向首元结点(非必须) 头指

  • C语言单链表实现学生管理系统

    本文实例为大家分享了C语言单链表实现学生管理系统的具体代码,供大家参考,具体内容如下 代码: #include<stdio.h> #include<stdlib.h> #include <string.h> #include <malloc.h> struct Student { int num;//学号 char name[20];//名字 char sex[2]; int age; struct Student *next; }; void insert

  • c语言单链表尾添加的深入讲解

    前言 犹豫了几天,看了很多大牛写的关于c语言链表,感触很多,终于下定决心,把自己对于链表的理解随之附上,可用与否,自行裁夺.由于作者水平有限也是第一次写,不足之处,竭诚希望得到各位大神的批评指正.制作不易,不喜勿喷,谢谢!!! 在正文开始之前,我先对数组和链表进行简单的对比分析. 链表也是一种很常见的数据结构,不同于数组的是它是动态进行存储分配的一种结构.数组存放数据时,必须要事先知道元素的个数.举个例子,比如一个班有40个人,另一个班有100个人,如果要用同一个数组先后来存放这两个班的学生数据

  • C语言单链表实现通讯录管理系统

    本文实例为大家分享了C语言单链表实现通讯录管理系统的具体代码,供大家参考,具体内容如下 本人前几天刚刚自学了单链表,趁热打铁,赶紧写一个小小的项目练练手. 单链表的实现在本人之前的博客中有:C语言编写一个链表 通讯录管理系统 保存人的信息有:  名字   name 电话   telephone 性别   sex 年龄   age 用一个结构体来装这些信息: struct infor{ char name[20]; int age; char sex[8]; char telephone[16];

  • C语言单链表实现图书管理系统

    本文实例为大家分享了C语言单链表实现图书管理系统的具体代码,供大家参考,具体内容如下 单链表实现的图书管理系统相比于结构体实现的管理系统,可以随时开辟新的空间,可以增加书的信息 单链表的实现 首先肯定还是打印单链表的常规操作,创建表头,创建节点,表头法插入,特定位置删除,打印链表 struct book {     char name[20];     float price;     int num;          //书的数量 }; //3 数据容器--链表 struct Node {

  • C语言单链表遍历与求和示例解读

    目录 单链表的遍历 单链表的求和 单链表的遍历 描述: 牛牛从键盘输入一个长度为 n 的数组,问你能否用这个数组组成一个链表,并顺序输出链表每个节点的值. 输入描述: 第一行输入一个正整数 n ,表示数组的长度 第二行输入n个数据 输出描述: 制作一个链表然后输出这个链表的值 输入: 4 5 4 2 1 输出: 5 4 2 1 #include<stdio.h> #include<stdlib.h> typedef int DataType; typedef struct link

随机推荐