利用链表完成多项式操作
来源:互联网 发布:弟子知罪,愿受师父责罚 编辑:程序博客网 时间:2024/05/19 20:22
// test0.cpp : Defines the entry pointfor the console application.
//
#include "stdafx.h"
#include <fstream>
#include <string>
#include <iostream>
using namespace std;
typedef struct lnode{
intfactor;
intindex;
}data;
typedef struct newlink *ptr;//节点包括数据和一个指针,指针指向自身类型
typedef struct newlink{
datad;
ptrnext;
}linkp,*linkpoint;
//新建单链表
linkpoint linklist_creat()
{
linkpointhead = new linkp;
head->next= NULL;
returnhead;
}
//插入节点
int linklist_insert(linkpoint head, datab)
{
linkpointp = new linkp;
p->d= b;
p->next= NULL;
if(head->next == NULL)
{
head->next= p;
return1;
}
p->next= head->next;//a指向插入位置的前一个节点
head->next= p;
return1;
}
//删除节点
int linklist_delete(linkpoint a)//删除节点a后面的节点
{
linkpointp = a->next;
if(p == NULL)
return0;
a->next= p->next;
free(p);
return1;
}
//链表逆置
int linklist_reverse(linkpoint head)
{
linkpointheadr = linklist_creat();
linkpointp = head->next;
if(p == NULL)
return1;
while(p != NULL)
{
linklist_insert(headr,p->d);
p= p->next;
}
head->next= headr->next;
free(headr);
return1;
}
//排序(幂次从高到低)
int linklist_sort(linkpoint head)
{
linkpointp = head->next;
if(p == NULL || p->next == NULL)
return1;
datatemp=p->d;
while(p->next != NULL)
{
linkpointq = p->next;
while(q != NULL)
{
if(p->d.index < q->d.index)
{
temp= p->d;
p->d= q->d;
q->d= temp;
}
q= q->next;
}
p= p->next;
}
return1;
}
//求导
int linklist_qiudao(linkpoint head)
{
linklist_sort(head);//先排序
linkpointp = head->next;
if(p == NULL)
return1;
elseif (p->next == NULL)
{
if(p->d.index > 0)
{
p->d.factor*= p->d.index;
p->d.index--;
}
else
{
linklist_delete(head);
}//最后一个数据求导(删除)
return1;
}
while(p->next->next != NULL)
{
p->d.factor*= p->d.index;
p->d.index--;
p= p->next;
}//前n-2个数据求导
if(p->next->d.index > 0)
{
p->next->d.factor*= p->d.index;
p->next->d.index--;
}
else
{
linklist_delete(p);
}//最后一个数据求导(删除)
p->d.factor*= p->d.index;
p->d.index--;//倒数第二个数据求导
return1;
}
//相加
linkpoint linklist_add(linkpoint a,linkpoint b)
{
linkpointp = a->next;
if(p == NULL)
returnb;
while(p->next != NULL)
p= p->next;
p->next= b->next;
free(b);//连接
linklist_sort(a);//排序
linkpointq = a->next;//同幂次相加
while(q != NULL&&q->next != NULL)
{
while(q->next->d.index == q->d.index)
{
q->d.factor+= q->next->d.factor;
linkpointx = q->next;//同幂次删除节点
q->next= x->next;
free(x);
}
q= q->next;
}
returna;
}
//输出
void linklist_out(linkpoint head)
{
linkpointp = head->next;
while(p != NULL)
{
cout<< p->d.factor << " " << p->d.index <<" ";
p= p->next;
}
cout<< endl;
}
//文件读取
int initial(linkpoint head,char*filename)
{
ifstreamf(filename);
if(!f)
{
cout<<"文件打开错误"<<endl;
return1;
}
intnum;
datad;
f>>num;
if(num==0)
{
cout<<"多项式不存在"<<endl;
return1;
}
while(num>0)
{
num--;
f>>d.factor;
f>>d.index;
linklist_insert(head, d);
}
return1;
}
int main(int argc, char* argv[])
{
linkpoints1 = linklist_creat();
linkpoints2 = linklist_creat();
datad;
//建立第一个多项式
initial(s1,"C:\\Users\\user\\Desktop\\1.txt");
// d.factor= 4; d.index = 0;
// linklist_insert(s1,d);
// d.factor= 6; d.index = 5;
// linklist_insert(s1,d);
// d.factor= 3; d.index = 2;
// linklist_insert(s1,d);
//建立第二个多项式
initial(s2,"C:\\Users\\user\\Desktop\\2.txt");
// d.factor= 4; d.index = 2;
// linklist_insert(s2,d);
// d.factor= 5; d.index = 3;
// linklist_insert(s2,d);
// d.factor= 8; d.index = 6;
// linklist_insert(s2,d);
//多项式幂次排序
linklist_sort(s1);
linklist_sort(s2);
linklist_out(s1);
linklist_out(s2);
//多项式逆置
linklist_reverse(s1);
linklist_out(s1);
//多项式求导
linklist_qiudao(s1);
linklist_out(s1);
//多项式再逆置
linklist_reverse(s1);
linklist_out(s1);
//多项式相加
linkpoints3 = linklist_add(s1, s2);
linklist_out(s3);
return1;
}
- 利用链表完成多项式操作
- 利用链表计算多项式的相加
- 利用链表计算多项式的相加
- 利用链表实现多项式求值
- 数据结构:多项式链表的操作
- 双向链表-C/C++-多项式操作
- 利用Stream完成递归操作
- 利用vector与class完成的链表排序操作demo
- 利用带参数的命令完成对Users表操作
- Hibernate查询—利用HQL完成表的查询操作
- Hibernate查询—利用Criteria完成表的查询操作
- 多项式加法利用链表实现(c语言)
- 利用单向链表计算多项式的乘法
- 利用链表打印多项式以及其‘+’运算
- 链表操作——多项式加减乘
- 二元多项式(简单链表操作,注释很好理解)
- 利用SQL语句完成位操作
- 利用顺序表实现多项式相加
- 【模板】Ford单源最短路径
- 在C#中GUID生成的四种格式具体案例
- 常用正则
- au3 窗体透明及半透明
- windows下安装tomcat
- 利用链表完成多项式操作
- history对象与location对象
- mysql如何删除作为外键的数据
- MySql接口API函数综述
- JavaScript —— four
- html中settransform示例
- Log slf4j+logback配置
- MySQL外键约束On Delete和On Update的使用
- Absent Code attribute in method that is not native or abstract in class file javax/mail/MessagingExc