用单链表实现一维线性方程组的合并
来源:互联网 发布:申请域名注册备案平台 编辑:程序博客网 时间:2024/05/23 01:17
#include<iostream>
using namespace std;
template <class T>
struct Node
{
T data;
Node<T> *next;
};
template <class T>
class SingleList
{
private:
Node<T>* head;
public:
SingleList();
void insertData(T aData,T bData);
void insertEnd(T bData);
bool deleteData(T aData);
Node<T>* getHead();
void outputList();
~SingleList();
};
template <class T>
SingleList<T>::SingleList()
{
head=NULL;
}
template <class T>
void SingleList<T>::insertData(T aData,T bData)
{
Node<T> *p,*q,*s;
p=new Node<T>;
q=new Node<T>;
s=new Node<T>;
s->data=bData;
if(head==NULL)
{
head=s;
s->next=NULL;
return;
}
p=head;
if(p->data==aData)
{
head=s;
s->next=p;
}
else
{
while(p->data!=aData&&p->next!=NULL)
{
q=p;
p=p->next;
}
if(p->data==aData)
{
q->next=s;
s->next=p;
}
else
{
p->next=s;
s->next=NULL;
}
}
}
template <class T>
bool SingleList<T>::deleteData(T aData)
{
Node<T> *p,*q;
p=head;
if(p->data==aData)
{
head=p->next;
delete p;
return true;
}
else
{
q=new Node<T>;
while(p->data!=aData&&p->next!=NULL)
{
q=p;
p=p->next;
}
if(p->data==aData)
{
q->next=p->next;
delete p;
return true;
}
return false;
}
}
template <class T>
void SingleList<T>::insertEnd(T bData)
{
if(head==NULL)
{
Node<T>* HEAD=new Node<T>;
HEAD->data=bData;
head=HEAD;
HEAD->next=NULL;
}
else
{
Node<T>* current=head;
while(current->next!=NULL)
{
current=current->next;
}
Node<T>* NEW=new Node<T>;
NEW->data=bData;
current->next=NEW;
NEW->next=NULL;
}
}
template <class T>
Node<T>* SingleList<T>::getHead()
{
return head;
}
template <class T>
void SingleList<T>::outputList()
{
Node<T> *p;
p=head;
while(p!=NULL)
{
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
}
template <class T>
SingleList<T>::~SingleList()
{
Node<T> *p,*q;
p=head;
while(p!=NULL)
{
q=p;
p=p->next;
delete q;
}
}
class Model
{
public:
Model();
Model(int xx,int yy);
int getX();
int getY();
void setX(int xx);
void setY(int yy);
void output();
bool operator == (Model b);
bool operator != (Model b);
private:
int x,y;
};
Model::Model()
{
x=0;
y=0;
}
Model::Model(int xx,int yy)
{
x=xx;
y=yy;
}
int Model::getX()
{
return x;
}
int Model::getY()
{
return y;
}
void Model::setX(int xx)
{
x=xx;
}
void Model::setY(int yy)
{
y=yy;
}
void Model::output()
{
cout<<"("<<getX()<<","<<getY()<<") ";
}
bool Model::operator ==(Model b)
{
if(getX()==b.getX()&&getY()==b.getY())
return true;
else
return false;
}
bool Model::operator !=(Model b)
{
if(getX()==b.getX()&&getY()==b.getY())
return false;
else
return true;
}
template <class T>
class Single:public SingleList<T>
{
public:
Single();
void add(Single<T> &b);
void insert(T mod);
void output();
};
template <class T>
Single<T>::Single():SingleList<T>()
{
cout<<"Single created. "<<endl;
}
template <class T>
void Single<T>::add(Single<T> &b)
{
Node<T>* head1=new Node<T>;
Node<T>* head2=new Node<T>;
head1=getHead();
head2=b.getHead();
while(head1!=NULL&&head2!=NULL)
{
if(head1->data.getY()<head2->data.getY())
{
head1=head1->next;
}
else if(head1->data.getY()>head2->data.getY())
{
insertData(head1->data,head2->data);
Node<T>* next=head2->next;
b.deleteData(head2->data);
head2=next;
}
else if(head1->data.getY()==head2->data.getY())
{
Node<T>* tem1=new Node<T>;
Node<T>* tem2=new Node<T>;
if(head1->data.getX()+head2->data.getX()!=0)
{
head1->data.setX(head1->data.getX()+head2->data.getX());
head1=head1->next;
tem1=head2->next;
b.deleteData(head2->data);
head2=tem1;
}
else
{
tem1=head1->next;
tem2=head2->next;
deleteData(head1->data);
b.deleteData(head2->data);
head1=tem1;
head2=tem2;
}
}
}
while(head2!=NULL)
{
Node<T>* tem;
tem=head2->next;
insertEnd(head2->data);
b.deleteData(head2->data);
head2=tem;
}
}
template <class T>
void Single<T>::insert(T mod)
{
insertEnd(mod);
}
template <class T>
void Single<T>::output()
{
Node<T>* head=getHead();
T model;
while(head!=NULL)
{
model=head->data;
model.output();
head=head->next;
}
}
int main()
{
Model a(2,3),b(3,4),c(4,5),d(5,6),e(1,2),f(-3,4),g(8,9);
Single<Model> single1;
Single<Model> single2;
single1.insert(a);
single1.insert(b);
single1.insert(c);
single1.insert(d);
single2.insert(e);
single2.insert(f);
single2.insert(g);
single1.add(single2);
single1.output();
return 0;
}
using namespace std;
template <class T>
struct Node
{
T data;
Node<T> *next;
};
template <class T>
class SingleList
{
private:
Node<T>* head;
public:
SingleList();
void insertData(T aData,T bData);
void insertEnd(T bData);
bool deleteData(T aData);
Node<T>* getHead();
void outputList();
~SingleList();
};
template <class T>
SingleList<T>::SingleList()
{
head=NULL;
}
template <class T>
void SingleList<T>::insertData(T aData,T bData)
{
Node<T> *p,*q,*s;
p=new Node<T>;
q=new Node<T>;
s=new Node<T>;
s->data=bData;
if(head==NULL)
{
head=s;
s->next=NULL;
return;
}
p=head;
if(p->data==aData)
{
head=s;
s->next=p;
}
else
{
while(p->data!=aData&&p->next!=NULL)
{
q=p;
p=p->next;
}
if(p->data==aData)
{
q->next=s;
s->next=p;
}
else
{
p->next=s;
s->next=NULL;
}
}
}
template <class T>
bool SingleList<T>::deleteData(T aData)
{
Node<T> *p,*q;
p=head;
if(p->data==aData)
{
head=p->next;
delete p;
return true;
}
else
{
q=new Node<T>;
while(p->data!=aData&&p->next!=NULL)
{
q=p;
p=p->next;
}
if(p->data==aData)
{
q->next=p->next;
delete p;
return true;
}
return false;
}
}
template <class T>
void SingleList<T>::insertEnd(T bData)
{
if(head==NULL)
{
Node<T>* HEAD=new Node<T>;
HEAD->data=bData;
head=HEAD;
HEAD->next=NULL;
}
else
{
Node<T>* current=head;
while(current->next!=NULL)
{
current=current->next;
}
Node<T>* NEW=new Node<T>;
NEW->data=bData;
current->next=NEW;
NEW->next=NULL;
}
}
template <class T>
Node<T>* SingleList<T>::getHead()
{
return head;
}
template <class T>
void SingleList<T>::outputList()
{
Node<T> *p;
p=head;
while(p!=NULL)
{
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
}
template <class T>
SingleList<T>::~SingleList()
{
Node<T> *p,*q;
p=head;
while(p!=NULL)
{
q=p;
p=p->next;
delete q;
}
}
class Model
{
public:
Model();
Model(int xx,int yy);
int getX();
int getY();
void setX(int xx);
void setY(int yy);
void output();
bool operator == (Model b);
bool operator != (Model b);
private:
int x,y;
};
Model::Model()
{
x=0;
y=0;
}
Model::Model(int xx,int yy)
{
x=xx;
y=yy;
}
int Model::getX()
{
return x;
}
int Model::getY()
{
return y;
}
void Model::setX(int xx)
{
x=xx;
}
void Model::setY(int yy)
{
y=yy;
}
void Model::output()
{
cout<<"("<<getX()<<","<<getY()<<") ";
}
bool Model::operator ==(Model b)
{
if(getX()==b.getX()&&getY()==b.getY())
return true;
else
return false;
}
bool Model::operator !=(Model b)
{
if(getX()==b.getX()&&getY()==b.getY())
return false;
else
return true;
}
template <class T>
class Single:public SingleList<T>
{
public:
Single();
void add(Single<T> &b);
void insert(T mod);
void output();
};
template <class T>
Single<T>::Single():SingleList<T>()
{
cout<<"Single created. "<<endl;
}
template <class T>
void Single<T>::add(Single<T> &b)
{
Node<T>* head1=new Node<T>;
Node<T>* head2=new Node<T>;
head1=getHead();
head2=b.getHead();
while(head1!=NULL&&head2!=NULL)
{
if(head1->data.getY()<head2->data.getY())
{
head1=head1->next;
}
else if(head1->data.getY()>head2->data.getY())
{
insertData(head1->data,head2->data);
Node<T>* next=head2->next;
b.deleteData(head2->data);
head2=next;
}
else if(head1->data.getY()==head2->data.getY())
{
Node<T>* tem1=new Node<T>;
Node<T>* tem2=new Node<T>;
if(head1->data.getX()+head2->data.getX()!=0)
{
head1->data.setX(head1->data.getX()+head2->data.getX());
head1=head1->next;
tem1=head2->next;
b.deleteData(head2->data);
head2=tem1;
}
else
{
tem1=head1->next;
tem2=head2->next;
deleteData(head1->data);
b.deleteData(head2->data);
head1=tem1;
head2=tem2;
}
}
}
while(head2!=NULL)
{
Node<T>* tem;
tem=head2->next;
insertEnd(head2->data);
b.deleteData(head2->data);
head2=tem;
}
}
template <class T>
void Single<T>::insert(T mod)
{
insertEnd(mod);
}
template <class T>
void Single<T>::output()
{
Node<T>* head=getHead();
T model;
while(head!=NULL)
{
model=head->data;
model.output();
head=head->next;
}
}
int main()
{
Model a(2,3),b(3,4),c(4,5),d(5,6),e(1,2),f(-3,4),g(8,9);
Single<Model> single1;
Single<Model> single2;
single1.insert(a);
single1.insert(b);
single1.insert(c);
single1.insert(d);
single2.insert(e);
single2.insert(f);
single2.insert(g);
single1.add(single2);
single1.output();
return 0;
}
0 0
- 用单链表实现一维线性方程组的合并
- 各种线性方程组求解算法的C++实现
- 求解线性方程组(一)
- 矩阵的LU分解求解线性方程组(C++实现)
- 线性方程组求解的几种常用方法-c++代码实现
- 求线性方程组的解
- 线性方程组的迭代法
- 线性方程组的直接法
- 线性方程组的几何解释
- 求线性方程组的解
- 【线性代数】线性方程组的求解
- 一个线性方程组的问题
- 线性方程组的直接解法
- 数值计算线性方程组求解实现
- 高斯消元法解线性方程组(C++实现)
- n维线性方程组
- 线性方程组
- 线性方程组
- windows系统cocos2d3.1 android eclipse adt NDK环境搭建
- java源文件的基本结构
- Android 团队自定义命名规范
- 感觉自己像个运维
- CXF开发webService客户端调用服务器端测试
- 用单链表实现一维线性方程组的合并
- 指针和引用 区别(引用只能在定义时被初始化一次)
- 对于【注意 oc】系统类 添加
- RxJava简介
- Codeforces Round #378 (Div. 2)C. Epidemic in Monstropolis
- 数据结构与算法之拓扑排序
- win10安装一键ghost,重启仍然直接进入win10的解决办法
- 【虚拟机】苹果虚拟机mac10.11.6+Xcode8.1
- 读研期间如何提高编程技术