十万火急!!!!
哪位帮个忙,用C++编写个程序“双向有序链表的生成,插入,删除和查询”
生成程序如下,就是不知道其他3个功能如何实现

#include <conio.h>
#include <stdio.h>
include "BILIST.H"

class NODE
{
    //FRIEND CLASS "LIST" CAN HAVE ACCESS TO THE CLASS "NODE" 'S PRIVATE PART
    friend class LIST;
    private :
            //PREVIOUS NODE LINK
            NODE *PREVIOUS;
            //NEXT NODE LINK
            NODE *NEXT;
            //THE CURRENT NODE DATA
            int DATA;
};

class LIST
{
    private :
            //THE HEAD OF THE LIST
            NODE *HEAD;
            //THE TAIL OF THE LIST
            NODE *TAIL;
    public :
            //CONSTRUCTOR FUNCTION
            LIST()
            {
                //INITIAL
                HEAD=0;
                TAIL=0;
            }
            //ADD TO THE BACK OF THE LIST
            void Build_HT(int Data);
            //ADD TO THE FRONT OF THE LIST
            void Build_TH(int Data);
            //DISPLAY THE DATA OF THE LIST FROM HEAD TO TAIL
            void LIST::DISPLAY_HT();
            //DISPLAY THE DATA OF THE LIST FROM TAIL TO HEAD
            void LIST::DISPLAY_TH();
            //REMOVE ALL THE NODES IN THE LIST
            void CLEAR();
            ~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;
    printf("\nDISPLAY THE LIST FROM HEAD TO TAIL:\n");
    while(TEMP!=0)
    {
        printf("%d  ",TEMP->DATA);
        TEMP=TEMP->NEXT;
    }
}
void LIST::DISPLAY_TH()
{
    NODE *TEMP;
    TEMP=TAIL;
    printf("\nDISPLAY THE LIST FROM TAIL TO HEAD:\n");
    while(TEMP!=0)
    {
        printf("%d  ",TEMP->DATA);
        TEMP=TEMP->PREVIOUS;
    }
}
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);
}
int main(void)
{
    LIST TEST;
    int BUFFER;

    BUFFER=4;
    TEST.Build_HT(BUFFER);
    BUFFER=5;
    TEST.Build_HT(BUFFER);
    BUFFER=6;
    TEST.Build_HT(BUFFER);
    BUFFER=3;
    TEST.Build_TH(BUFFER);
    BUFFER=2;
    TEST.Build_TH(BUFFER);
    BUFFER=1;
    TEST.Build_TH(BUFFER);
    clrscr();
    TEST.DISPLAY_HT();
    TEST.DISPLAY_TH();
    printf("\n\nPress any key to EXIT... ...");
    getch();
    return 0;
}