数据结构链表之 一元多次多项式

//尽量多声名几个指针 避免使用到 头节点 还有

/*

第一点 :初始化和建造链表放在一起了

且返回值用linklist类型

第二点:多项式相加是本质是链表的交集

交集需要注意的是(比较指数大小 小的放在新链表上 指针后移  如果那个表空了直接把

剩下的链到新链表)

#include<stdio.h>
#include<iostream>
#include<stdlib.h>
#include<malloc.h>
using namespace std;
typedef struct n
{
int left;
int right;
}node;

typedef struct node1
{
node point;
struct node1 *next;
}lnode,*linklist;

linklist makeup(void)//注意一下这里
{
int n;
lnode *p,a,b,c,*s,*l;

l=(linklist)malloc(sizeof(lnode));
if(l==NULL)
{
printf("分配失败");
exit(-1);
}
l->next=NULL;
s=l;//注意这个 否者就会变成一个头节点指向周围一圈节点
printf("请输入节点个数(多项式的项数):" );
scanf("%d",&n);

for(int i=0;i<n;i++)
{
p=(linklist)malloc(sizeof(lnode));

if(p==NULL)
{
printf("分配失败");
exit(-1);
}

printf("请分别输入链表的系数和指数:");
scanf("%d %d",&p->point.left,&p->point.right);//我是大沙比 scanf取址符居然忘了;检查好久
s->next=p;
p->next=NULL;
s=p;
}

return l;

}

void display(lnode *l)
{
int i;
lnode *p;
p=l;
while(p->next!=NULL)
{
p=p->next;

printf("---|%d_%d|--",p->point.left,p->point.right);

}
cout<<endl;
}

linklist add(linklist a,linklist b)
{
linklist c,p,d,e,s;
c=(linklist)malloc(sizeof(lnode));
if(c==NULL)
{
printf("分配失败");
exit(-1);
}
p=c; d=a->next; e=b->next;
while(d!=NULL&&e!=NULL)
{
if(d->point.right > e->point.right)
{
p->next=e;
p=e;
e=e->next;
}
else if(d->point.right < e->point.right)
{
p->next=d;
p=d;
d=d->next;
}

else
{
d->point.left=d->point.left + e->point.left;
e=e->next;
}

if(d==NULL)
{
p->next=e;
}
else
{
p->next=s;
}
}

return c;
}

int len(linklist l)
{
linklist p;
p=l->next;
int count=0;
while(p!=NULL)
{
count++;
p=p->next;
}
return count;
}

int sort(linklist l)
{
linklist p,q;
node temp;
int i,j;
for(i=0,p=l->next;i<len(l)-1;i++,p=p->next)//记住不要写p->count 因为p->count==1
{
for(j=i+1,q=p->next;j<len(l);j++,q=q->next)

if(p->point.right > q->point.right)
{
temp=q->point;
q->point=p->point;
p->point=temp;
}
}
return 1;
}

int main()
{
int n,k;
lnode p, r,l ;
lnode *a,*b,*c;
a=(linklist)malloc(sizeof(lnode));
b=(linklist)malloc(sizeof(lnode));
c=(linklist)malloc(sizeof(lnode));

printf("链表一 :\n");
a=makeup();
sort(a);
display(a);
cout<<endl;

printf("链表二 : \n");
b=makeup();
display(b);

c=add(a,b);
printf("一元多次式的结果为:\n");
display(c);
return 0;
}

时间: 2024-10-31 10:02:14

数据结构链表之 一元多次多项式的相关文章

基础数据结构 链表、栈、队列

数据结构是程序设计中一个非常重要的部分,基本的数据结构包括链表.栈和队列,当然高级一点的还有树.图等,实际上链表.栈和队列都是线性表,只是在操作和表示方式上有所不同,线性表用顺序结构表示就是顺序表,用链结构表示就是链表,如果对线性表的操作加以限制,只能有在表尾进行插入和删除元素,这就变成栈了,如果只能允许元素从表尾插入,表头删除,这就变成队列了. 链表 /* * 数据结构 链表 * 链式结构 */ #include <iostream> using namespace std; enum St

数据结构链表学习

今天初步学习数据结构链表,学习过程中感觉对于指针的理解还差很多,而且对于VS的调试也不会使用,调查问题只能靠一遍一遍的梳理逻辑,效率不是一般的低下..接下来得赶紧学习下VS的使用.. 今天链表只是初步学习,写的例子也比较简单,如下: 定义链表的数据结构,只简单的定义了一个数据和一个指向后继的指针 1 struct List { 2 int num; 3 List *next; 4 }; 接下来就是链表的创建,返回一个指针地址赋给主函数中的头指针,用于之后的增删改查等等 1 List *creat

数据结构——链表的封装

链表是数据结构中最基本的线性结构,在编程中使用的频率最高,那么如何用封装思想来编写一个完整的链表操作呢?且看以下代码的实例. /*功能:演示链表的操作方法 */              /*作者: james */              /*时间: 2014.7.16 */              /*版本: v1.0 */              /*说明:使用面向对象思想封装一个链表*/ #include <stdio.h>              #include <s

Linux内核数据结构——链表

目录 目录 简介 单向链表 双向链表 环形链表 Linux内核中的链表实现 offsetof container_of container_of 第一部分 container_of 第二部分 链表初始化 向链表中增加一个节点 删除节点 移动节点 判断链表是否为空 遍历链表 Demo测试 mlisth mlistc 执行结果 简介 最近在学习Android Binder驱动程序实现的时候,发现里面的数据结构用到了struct list_head.而我google发现struct list_head

第十章 基本数据结构——链表

 链表 链表与数组的区别是链表中的元素顺序是有各对象中的指针决定的,相邻元素之间在物理内存上不一定相邻.采用链表可以灵活地表示动态集合.链表有单链表和双链表及循环链表.书中着重介绍了双链表的概念及操作,双链表L的每一个元素是一个对象,每个对象包含一个关键字和两个指针:next和prev.链表的操作包括插入一个节点.删除一个节点和查找一个节点,重点来说一下双向链表的插入和删除节点操作,图例如下: 链表是最基本的数据结构,凡是学计算机的必须的掌握的,在面试的时候经常被问到,关于链表的实现,百度一下就

delphi.数据结构.链表

链表作为一种基础的数据结构,用途甚广,估计大家都用过.链表有几种,常用的是:单链表及双链表,还有N链表,本文着重单/双链表,至于N链表...不经常用,没法说出一二三来. 在D里面,可能会用Contnrs.pas.TStack/TQueue相关类,进行操作,不过里面的实现,并非使用的是链表实现,只是用TList,然后...实现的. 呵,TList怎么实现那些不是重点,本文着重是说一下自己使用链表的一些心得. 一:单链表: 单链表的用途,主要一个场景:队列(stack/queue),两者区别在于:s

JavaScript数据结构——链表的实现

前面楼主分别讨论了数据结构栈与队列的实现,当时所用的数据结构都是用的数组来进行实现,但是数组有的时候并不是最佳的数据结构,比如在数组中新增删除元素的时候需要将其他元素进行移动,而在javascript中使用spit()方法不需要访问其他元素.如果你在使用数组的时候发现很慢,就可以考虑使用链表. 链表的概念 链表是一种常见的数据结构.它是动态地进行存储分配的一种结构.链表有一个"头指针"变量,以head表示,它存放一个地址,指向一个元素.每个结点都使用一个对象的引用指标它的后继,指向另一

数据结构 链表基础算法

1 #include<stdio.h> 2 #include<malloc.h> 3 #include<stdlib.h> 4 typedef struct node 5 { 6 int data; 7 struct node * pNext; 8 }NODE,* PNODE; 9 //节点定义 10 //函数声明 11 PNODE create_list(); 12 void traverse_list(PNODE); 13 int len_list(PNODE);

C语言提高之——从结构和指针看数据结构链表

通过组合结构和指针可以创建强大的数据结构.该博客只是针对了单链表来看的. 链表说明: 链表的每一个结点都是一个结构体,其中有两个元素分别是:1.指向下一个结点的指针(link)和该结点数据(value).其中需要一个根指针指向第一个结点(root). 插入数据: 初始代码: 插入的思想是通过比较当前结构的数据和要插入的数据(new_value)大小,从而判断插入位置.首先需要定义两个指针变量,一个指向当前结构(current),一个指向当前结构的前一个结构(previous).当判断好位置之后需