#include "stdafx.h"
#include<iostream>
#include<fstream>
using namespace std;
template<typename T>class Node{
private:
T info;
Node<T>*link;
public:
Node();
Node(const T &data);
void InsertAfter(Node<T>*p);
void InsertListAfter(Node<T>*p);
Node<T>*RemoveAfter();
void AfterDis();
void Save();
void Read(char *filename);
};
template<typename T>Node<T>::Node()
{
link=NULL;
}
template<typename T>Node<T>::Node(const T &data)
{
info=data;
link=NULL;
}
template<typename T>void Node<T>::InsertAfter(Node<T>*p)
{
p->link=link;
link=p;
}
template<typename T>void Node<T>:: InsertListAfter(Node<T>*p)
{
Node<T>*temp;
temp=p;
while(temp->link)
{
temp=temp->link;
}
temp->link=link;
link=p;
}
template<typename T>Node<T>*Node<T>::RemoveAfter(){
Node<T>*temp=link;
if(link=NULL) temp=NULL;
else link=temp->link;
return temp;
}
template<typename T>void Node<T>::AfterDis()
{
Node<T>*temp;
cout<<info<<endl;
temp=link;
while(temp)
{
cout<<temp->info<<endl;
temp=temp->link;
}
if(!temp){ cout<<"数据显示完毕"<<endl;}
else {cout<<"数据显示不成功"<<endl;return;}
}
template<typename T>void Node<T>::Save()
{ Node<T>*temp;
temp=link;
ofstream data;
data.open("I:\data.txt",ios::app|ios::out);
if(!data.is_open())
{
cout<<"文件打开不成功"<<endl;
return ;
}
else
{
cout<<"文件打开成功"<<endl;
}
// data<<'\t';
data<<info<<'\t';
while(temp)
{
data<<temp->info<<'\t';
temp=temp->link;
}
if(!temp)
{
cout<<"文件保存成功"<<endl;
data.close();
}
else
{
cout<<"文件保存不成功"<<endl;
}
}
template<typename T>void Node<T>::Read(char *filename)
{
ifstream SData;
SData.open(filename);
if(!SData){
cout<<"文件没有数据可读"<<endl;
return ;
}
else{
SData>>info;
}
while(SData)
{
Node<T> *p=new Node<T>;
SData>>p->info;
this->InsertAfter(p);
}
if(!SData){
cout<<"读文件成功"<<endl;
SData.close();
}
else {
cout<<"读文件不成功"<<endl;
SData.close();
return;
}
}
int main()
{
char *x="I:\data.txt"; //这是随便的
Node<int> p(12),f(3),w(20),q(30),s(50),u(60);
p.InsertAfter(&w);
p.InsertAfter(&f);
q.InsertAfter(&s);
q.InsertAfter(&u);
w.InsertListAfter(&q);
//p.Save();
p.AfterDis();
Node<int>o;
o.Read(x); //为什么读取数据时会多了一个-858993406之类的数的????
o.AfterDis();
return 0;
}