用模板设计一个链表类Tlist,实现链表节点的插入,删除,输出功能。

玩酷酷 2012-05-29 08:14:19
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;
}
程序编译连接都可以通过,就是输出是有错误,不知道哪里有错误,请大侠帮忙看一下,谢谢
...全文
447 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
heartlesstoanyone 2012-05-30
  • 打赏
  • 举报
回复

#include <iostream>
using namespace std;

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();
};

template<class T>
void Tlist<T>::insertlist(T aDate,T bDate)//在节点a之前插入节点b
{
//cout << bDate << endl;
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 != NULL && p->Date != aDate)//查找节点a ----------------here
{
cout << p->Date << endl;
q = p;
p=p->next;
}
cout << bDate << endl;
if(p != NULL) //若有节点a
{
q->next=s;
s->next=p;
}
else //若没有节点a
{
q->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 != NULL)// ---------------------------------here
{
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;
}

softorsuper 2012-05-29
  • 打赏
  • 举报
回复
#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;
}



能写这个模板说明还可以继续前进的 呵呵。




玩酷酷 2012-05-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
细节上有很多问题。比如判断是否相等,你用的=号。。还有你用new分配的对内存在程序最后也没有释放掉。
[/Quote]
=号是写错了,但析构函数释放了堆内存啊!
wodetongheai 2012-05-29
  • 打赏
  • 举报
回复
自己去数据结构找去~!
i诙谐 2012-05-29
  • 打赏
  • 举报
回复
细节上有很多问题。比如判断是否相等,你用的=号。。还有你用new分配的对内存在程序最后也没有释放掉。

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧