数据结构:双向链表list的表头/尾添加数据、链表显示、链表清空

来源:互联网 发布:回声电影软件 编辑:程序博客网 时间:2024/05/17 17:42
#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