快捷搜索:   服务器  安全  linux 安全  MYSQL  dedecms

数据结构算法集---C++语言实现

      这是我学数据结构编写的算法,我把他整理出来,都是基本算法,供大家学习。我使用c++面向对象形式编写,各种算法都封装在各自的类里,如果想增加功能,在相应的类里增加函数即可。我对树和图的构造也做了一些人性化设计,输入更加形象化,你可能看不懂,没关系漫漫来。各种类都使用模版设计,可以对各种数据类型操作(整形,字符,浮点)


    ///////////////////////////
    //    //
    //   堆栈数据结构   stack.h         //
    //    //
    //////////////////////////


    #include<iostream.h>

    template<class Type>class Stack;

    template<class Type>
    class StackNode
    {
    friend class Stack<Type>;
    private:
     Type data;
     StackNode<Type> *link;
       StackNode(Type D=0,StackNode<Type> *L=NULL):link(L),data(D){}
    };

    template<class Type>
    class Stack
    {
    public:
     Stack():top(NULL),NumItem(0){}
     void Push(Type item);
     Type Pop();
     Type GetTop();
     void MakeEmpty();
     bool ISEmpty();
     int GetNum();
    private:
     int NumItem;
     StackNode<Type> *top;
    };

    template<class Type>
    void Stack<Type>::Push(Type item)
    {
      top=new StackNode<Type>(item,top);
    NumItem++;
    }

    template<class Type>
    Type Stack<Type>::Pop()
    {
    StackNode<Type> *p;
    Type temp;
    temp=top->data;
    p=top;
    top=top->link;
    delete p;
    NumItem--;
    return temp;

    }

    template<class Type>
    Type Stack<Type>::GetTop()
    {

     return top->data;
    }

    template<class Type>
    bool Stack<Type>::ISEmpty()
    {
    return top==NULL;
    }

    template<class Type>
    void Stack<Type>::MakeEmpty()
    {
    delete top;
    }

    template<class Type>
    int Stack<Type>::GetNum()
    {
    return NumItem;
    }

    ///////////////////////////
    //    //
    //   队列数据结构       Queue.h //
    //    //
    //////////////////////////
    #include<iostream.h>

    template<class Type> class Queue;

    template<class Type> class QueueNode
    {
    friend class Queue<Type>;
    private:
     Type data;
     QueueNode<Type> *link;
     QueueNode(Type d=0,QueueNode *l=NULL):data(d),link(l){}
    };

    template <class Type> class Queue
    {
    public:
     Queue():rear(NULL),front(NULL){}
     ~Queue();
     void EnQueue(Type item);
     Type DelQueue();
     Type GetFront();
     void MakeEmpty();
     bool ISEmpty() { return front==NULL; }
    private:
     QueueNode<Type> *front,*rear;
    };


    template<class Type>
    Queue<Type>::~Queue()
    {
    QueueNode<Type> *p;
    while(front!=NULL)
    {
     p=front;
     front=front->link;
     delete p;
    }
    }

    template<class Type>
    void Queue<Type>::EnQueue(Type item)
    {
    if(front==NULL)
     front=rear=new QueueNode<Type> (item,NULL);

    else
     rear=rear->link=new QueueNode<Type> (item,NULL);
    }


    template<class Type>
    Type Queue<Type>::DelQueue()
    {
    QueueNode<Type> *p=front;
    Type temp=p->data;;
    front=front->link;
    delete p;
    return temp;
    }


    template<class Type>
    Type Queue<Type>::GetFront()
    {
    return front->data;
    }


    template<class Type>
    void Queue<Type>::MakeEmpty()
    {
    QueueNode<Type> *p;
    while(front!=NULL)
    {
     p=front;
     front=front->link;
     delete p;
    }
    }


    ///////////////////////////
    //    //
    //   链表数据结构  list.h //
    //    //
    //////////////////////////


    #include<iostream.h>

    template<class type>
    class list;

    template<class type>
    class listnode
    {
    public:
    friend class list<type>;
    private:
     type data;
     listnode<type> * next;
    };


    template<class type>
    class list
    {
    public:
     list();
     ~list();
     void insertend(type); //向链表尾部插入元素
     bool insert(type,int); //向链表任意位置插入元素
     void delnode(int i);  //删除元素
     int find(type T);   //查找元素
     void makeempty();   //销毁链表
     bool print();  //打印链表
     int getlen();  //得到链表长度
      private:
     listnode<type> *first,*last;

    listnode<type> *p,*t;
    p=first;

    while(p->next!=NULL&&k!=i)
    {
     p=p->next;
       k++;
    }
      t=p->next;
    cout<<"你已经将数据项 "<<t->data<<"删除"<<endl;

    p->next=p

顶(0)
踩(0)

您可能还会对下面的文章感兴趣:

最新评论