#include<iostream.h>
//定义节点(数据对象)的接口
class Node
{
//声明list类为本类的友元类
friend class list;
//私有成员
private:
int Data; //节点数据
Node *previous; //前趋指针
Node *next; //后继指针
};
//定义双向链表list的接口声明
class list
{
//私有成员
private:
Node *Head; //链表头指针
Node *Tail; //链表尾指针
//定义接口函数
public:
//构造函数
list();
//析构函数
~list();
//从链表尾后添加数据
void Build_HT(int Data);
//从链表前头添加数据
void Build_TH(int Data);
//从头到尾显示数据
void list::Display_HT();
//从尾到头显示数据
void list::Display_TH();
//清除链表的全部数据
void Clear();
};
//main()函数测试双向链表
int main(void)
{
list list1;
int i;
//从尾添加数据
cout<<"Add to the back of the list1:"<<endl;
for (i=1;i<=20;i=i+2) {
list1.Build_HT(i);
cout<<i<<" ";
}
cout<<endl;
//从头添加数据
cout<<"Add to the front of the list1:"<<endl;
for (i=0;i<=20;i=i+2) {
list1.Build_TH(i);
cout<<i<<" ";
}
cout<<endl;
//显示链表
list1.Display_HT();
list1.Display_TH();
return 0;
}
//list类函数的定义
//构造函数的定义
list::list()
{
//初值
Head=0;
Tail=0;
}
//析构函数的定义
list::~list()
{
Clear();
}
//从链表尾后添加数据
void list::Build_HT(int Data)
{
Node *Buffer;
Buffer=new Node;
Buffer->Data=Data;
if(Head==0)
{
Head=Buffer;
Head->next=0;
Head->previous=0;
Tail=Head;
}
else
{
Tail->next=Buffer;
Buffer->previous=Tail;
Buffer->next=0;
Tail=Buffer;
}
}
//从链表前头添加数据
void list::Build_TH(int Data)
{
Node *NewNode;
NewNode=new Node;
NewNode->Data=Data;
if(Tail==0)
{
Tail=NewNode;
Tail->next=0;
Tail->previous=0;
Head=Tail;
}
else
{
NewNode->previous=0;
NewNode->next=Head;
Head->previous=NewNode;
Head=NewNode;
}
}
//从头到尾显示数据
void list::Display_HT()
{
Node *TEMP;
TEMP=Head;
cout<<"Display the list from Head to Tail:"<<endl;
while(TEMP!=0)
{
cout<<TEMP->Data<<" ";
TEMP=TEMP->next;
}
cout<<endl;
}
//从尾到头显示数据
void list::Display_TH()
{
Node *TEMP;
TEMP=Tail;
cout<<"Display the list from Tail to Head:"<<endl;
while(TEMP!=0)
{
cout<<TEMP->Data<<" ";
TEMP=TEMP->previous;
}
cout<<endl;
}
//清除链表的全部数据
void list::Clear()
{
Node *Temp_head=Head;
if (Temp_head==0) return;
do
{
Node *TEMP_NODE=Temp_head;
Temp_head=Temp_head->next;
delete TEMP_NODE;
}
while (Temp_head!=0);
}
文献来源:
UNDONER(小杰博客) :http://blog.csdn.net/undoner
LSOFT.CN(琅软中国) :http://www.lsoft.cn
分享到:
相关推荐
数据结构:双向链表源码,为了让读者有更好的体验,把源码上传上去,有任何问题,或者有任何bug可以直接私信我,我会及时回复,并且解决对应问题
数据结构:双向链表的基本程序
数据结构——双向链表模板类的实现 //数据结构——双向链表模板类的实现2007年06月16日 星期六 10:14 ////////////////////////////////////////////////////////////////////// // 模块名: 双向链表模板类 // 代码...
数据结构:双向链表的实现和测试(C++).doc
创建返回链表的头结点.// 双向链表销毁// 双向链表打印// 双向链表尾插// 双向链表尾删// 双向链表头插// 双向链表头删// 双向链表查找// 双向链表在pos的前面进行插入// 双向链表删除pos位置的结点
数据结构:图解链表,链表的插入和删除(c语言版) 我们上节讲解了链表的建立,本节讲解的是在链表中指定位置中插入一个结点,以及在指定位置中删除一个结点 指定位置插入一个结点 这里我们在第3个结点后插入一个...
题目:设计一个带表头的双向链表(链表中数据的具体类型可以随意) 提供以下方法: (1)insert:在某个位置插入对象; (2)insert:在链表的最后插入对象; (3)delete:在某个位置删除对象; (4)delete:删除...
数据结构:图解链表,用链表实现栈(c语言版) 栈(stack)是限定仅在表尾进行插入或者删除的线性表。对于栈来说,表尾端称为栈顶(top),表头端称为栈低(bottom)。不含元素的空表称为空栈。因为栈限定在表尾进行...
完整双向链表的实现代码,包括了线性表的基本操作:插入、删除、访问和查找
数据结构:二叉树链表并遍历输出
数据结构:图解链表,用链表实现栈的Pop和Push(c语言版) 出栈以及入栈我们只要可虑栈顶就可以,所以我们就只考虑对栈顶就行插入和删除就可以,上代码 void Pop(SqStack* s,Elemtype data) { assert(s); if (s->...
数据结构:线性链表的表示以及实现(C语言编写) 有完整的代码注释以及重点分析
JavaScript数据结构之双向链表 单向链表在遍历时只能从头到尾或者从尾遍历到头;所以单向链表可以轻松到达下一节点,但是回到上一个节点是很困难的 而双向链表既可以从头遍历到尾, 又可以从尾遍历到头,链表的...
数据结构:单向链表源码,为了让读者有更好的体验,把源码上传上去,有任何问题,或者有任何bug可以直接私信我,我会及时回复,并且解决对应问题
从初学者的角度深入的分析了内核数据结构的双向循环链表 list_head结构如何构建链表 分析了list_entry LIST_HEAD list_for_each 并最后给出了一个例子以便学习
算法学习:双向链表的创建和读取
数据结构 双向链表存储 附带基础处理函数 附带测试函数
数据结构双向链表代码,代码结构清晰,很容易读懂,适合初学者学习,100%原装代码。