程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 數據結構算法集---C++語言實現

數據結構算法集---C++語言實現

編輯: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;
   int length;
  };
  
  template<class type>
  void initlist(type &tmp);
  
  template<class type>
  void list_exit(list<type> &L,type tmp);
  
  void initation();
  
  template<class type>
  void list_insertend(list<type> &L,type tmp);
  
  
  template<class type> int list<type>::getlen()
  {
   return length;
  }
  
  template<class type> void list<type>::makeempty()
  {
   listnode<type> *p1,*p2;
  
   p1=first->next;
   first->next=NULL;
   while(p1!=NULL)
    {
   p2=p1;
   p1=p1->next;
   delete p2;
   }
   length=0; 
  }
  
  template<class type> void list<type>::insertend(type t)
  {
  
   listnode<type> *p;
   p=new listnode<type>;
   p->data=t;
   p->next=NULL;
   last->next=p;
   last=p;
  
   length++;
  }
  
  template<class type> bool list<type>::insert(type t,int i)
  {
   listnode<type> *p;
   p=first;
  
   int k=1;
   while(p!=NULL&&k<i)
   {
   p=p->next;
   k++;
   }
   if(p==NULL&&k!=i)
   return false;
   else
   {
     listnode<type> *tp;
    tp=new listnode<type>;
    tp->data=t;
    tp->next=p->next;
    p->next=tp;
    length++;
   
    return true;
   }
  }
  
  template<class type> void list<type>::delnode(int i)
  {
   int k=1;
   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
 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved