用模板设计一个链表类Tlist,实现链表节点的插入,删除,输出功能。
list.h
template<class T>
struct Node
{
T Date;
Node* next;
};
template<class T>
class Tlist
{
private:
Node<T>* head;
public:
Tlist(){head=NULL;}
void deletelist(T Date);
void insertlist(T aDate,T bDate);
void outputlist();
};
list.cpp
#include<iostream>
using namespace std;
#include"list.h"
template<class T>
void Tlist<T>::insertlist(T aDate,T bDate)//在节点a之前插入节点b
{
Node<T>*p,*q,*s; //p指向节点a,q指向节点a_k,s指向节点b
s=(Node<T>*)new(Node<T>); //动态分配新节点
s->Date=bDate; //设b为此节点
p=head; //若是空表,使b作为第一个节点
if(head=NULL)
{
head=s;
s->next=NULL;
}
else if(p->Date=aDate) //若a是第一个节点
{
s->next=p;
head=s;
}
else
{
while(p->next!=NULL&&p->Date!=aDate)//查找节点a
{
q=p;
p=p->next;
}
if(p->Date=aDate) //若有节点a
{
q->next=s;
s->next=p;
}
else //若没有节点a
{
p->next=s;
s->next=NULL;
}
}
}
template<class T>
void Tlist<T>::deletelist(T aDate) //设aDate是要删除的节点a中的数据成员
{
Node<T> *p,*q; //p用于指向节点a,q用于指向节点a的前一个节点
p=head;
if(p=NULL) //若是空表
return;
if(p->Date=aDate) //若a是第一个节点
{
head=p->next;
delete p;
}
else
{
while(p->Date!=aDate&&p->next!=NULL)
{
q=p;
p=p->next;
}
if(p->Date=aDate)
{
q->next=p->next;
delete p;
}
}
}
template<class T>
void Tlist<T>::outputlist()
{
Node<T>*current=head;
while(current->next!=NULL)
{
cout<<current->Date<<" ";
current=current->next;
}
cout<<endl;
}
int main()
{
Tlist<int> A;
int Date[5]={64,4,76,89,97};
A.insertlist(0,Date[0]); //建立链表A首节点
for(int i=1;i<5;i++)
A.insertlist(0,Date[i]);//顺序向后插入
A.outputlist(); //输出链表
return 0;
}
程序编译连接都可以通过,就是输出是有错误,不知道哪里有错误,请大侠帮忙看一下,谢谢
template<class T>
struct Node
{
T Date;
Node* next;
};
template<class T>
class Tlist
{
private:
Node<T>* head;
public:
Tlist(){head=NULL;}
void deletelist(T Date);
void insertlist(T aDate,T bDate);
void outputlist();
};
list.cpp
#include<iostream>
using namespace std;
#include"list.h"
template<class T>
void Tlist<T>::insertlist(T aDate,T bDate)//在节点a之前插入节点b
{
Node<T>*p,*q,*s; //p指向节点a,q指向节点a_k,s指向节点b
s=(Node<T>*)new(Node<T>); //动态分配新节点
s->Date=bDate; //设b为此节点
p=head; //若是空表,使b作为第一个节点
if(head=NULL)
{
head=s;
s->next=NULL;
}
else if(p->Date=aDate) //若a是第一个节点
{
s->next=p;
head=s;
}
else
{
while(p->next!=NULL&&p->Date!=aDate)//查找节点a
{
q=p;
p=p->next;
}
if(p->Date=aDate) //若有节点a
{
q->next=s;
s->next=p;
}
else //若没有节点a
{
p->next=s;
s->next=NULL;
}
}
}
template<class T>
void Tlist<T>::deletelist(T aDate) //设aDate是要删除的节点a中的数据成员
{
Node<T> *p,*q; //p用于指向节点a,q用于指向节点a的前一个节点
p=head;
if(p=NULL) //若是空表
return;
if(p->Date=aDate) //若a是第一个节点
{
head=p->next;
delete p;
}
else
{
while(p->Date!=aDate&&p->next!=NULL)
{
q=p;
p=p->next;
}
if(p->Date=aDate)
{
q->next=p->next;
delete p;
}
}
}
template<class T>
void Tlist<T>::outputlist()
{
Node<T>*current=head;
while(current->next!=NULL)
{
cout<<current->Date<<" ";
current=current->next;
}
cout<<endl;
}
int main()
{
Tlist<int> A;
int Date[5]={64,4,76,89,97};
A.insertlist(0,Date[0]); //建立链表A首节点
for(int i=1;i<5;i++)
A.insertlist(0,Date[i]);//顺序向后插入
A.outputlist(); //输出链表
return 0;
}
程序编译连接都可以通过,就是输出是有错误,不知道哪里有错误,请大侠帮忙看一下,谢谢
...全文
相关推荐
C++实现动态链表的建立、输出、插入和删除功能。
实现动态链表的建立、输出、插入和删除功能。
C语言实现带头结点的链表的创建、查找、插入、删除操作
主要介绍了C语言实现带头结点的链表的创建、查找、插入、删除操作方法,对于了解数据结构中链表的各项操作有很好的借鉴价值,需要的朋友可以参考下
C语言实现单向链表的创建、插入,删除节点,和2个链表合并
VC6.0下 用C语言实现单向链表的创建、插入,删除节点,和2个链表合并等操作
C语言实现链表,创建、插入、查找、删除、遍历等基本操作
C与语言实现链表的创建、插入(头插法、尾插法)、遍历、查找、删除操作
C++链表基本操作 初始化 插入 删除 输出 清空
对链表的基本操作,初始化、插入、删除、输出、清空。


