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

眷怠雨兲ゞ

眷怠雨兲ゞ

2016-02-19 15:54

今天图老师小编要跟大家分享数据结构算法集---C++语言实现,精心挑选的过程简单易学,喜欢的朋友一起来学习吧!
  这是我学数据结构编写的算法,我把他整理出来,都是基本算法,供大家学习。我使用c++面向对象形式编写,各种算法都封装在各自的类里,假如想增加功能,在相应的类里增加函数即可。我对树和图的构造也做了一些人性化设计,输入更加形象化,你可能看不懂,没关系漫漫来。各种类都使用模版设计,可以对各种数据类型操作(整形,字符,浮点)
  
  
  ///////////////////////////
  //    //
  //   堆栈数据结构   stack.h         //
  //    //
  //////////////////////////
  
  
  #includeiostream.h
  
  templateclass Typeclass Stack;
  
  templateclass Type
  class StackNode
  {
   friend class StackType;
   private:
   Type data;
   StackNodeType *link;
     StackNode(Type D=0,StackNodeType *L=NULL):link(L),data(D){}
  };
  
  templateclass 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;
   StackNodeType *top;
  };
  
  templateclass Type
  void StackType::Push(Type item)
  {
    top=new StackNodeType(item,top);
   NumItem++;
  }
  
  templateclass Type
  Type StackType::Pop()
  {
   StackNodeType *p;
   Type temp;
   temp=top-data;
   p=top;
   top=top-link;
   delete p;
   NumItem--;
   return temp;
  
  }
  
  templateclass Type
  Type StackType::GetTop()
  {
   return top-data;
  }
  
  templateclass Type
  bool StackType::ISEmpty()
  {
   return top==NULL;
  }
  
  templateclass Type
  void StackType::MakeEmpty()
  {
   delete top;
  }
  
  templateclass Type
  int StackType::GetNum()
  {
   return NumItem;
  }
  
  
  
  ///////////////////////////
  //    //
  //   队列数据结构       Queue.h //
  //    //
  //////////////////////////
  #includeiostream.h
  
  templateclass Type class Queue;
  
  templateclass Type class QueueNode
  {
   friend class QueueType;
  
   private:
   Type data;
   QueueNodeType *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:
   QueueNodeType *front,*rear;
  };
  
  
  templateclass Type
  QueueType::~Queue()
  {
   QueueNodeType *p;
   while(front!=NULL)
   {
   p=front;
   front=front-link;
   delete p;
   }
  }
  
  templateclass Type
  void QueueType::EnQueue(Type item)
  {
   if(front==NULL)
   front=rear=new QueueNodeType (item,NULL);
   else
   rear=rear-link=new QueueNodeType (item,NULL);
  }
  
  
  templateclass Type
  Type QueueType::DelQueue()
  {
   QueueNodeType *p=front;
   Type temp=p-data;;
   front=front-link;
   delete p;
   return temp;
  }
  
  
  templateclass Type
  Type QueueType::GetFront()
  {
   return front-data;
  }
  
  
  templateclass Type
  void QueueType::MakeEmpty()
  {
   QueueNodeType *p;
   while(front!=NULL)
   {
   p=front;
   front=front-link;
   delete p;
   }
  }
  
  
  ///////////////////////////
  //    //
  //   链表数据结构  list.h //
  //    //
  //////////////////////////
  
  
  #includeiostream.h
  
  templateclass type
  class list;
  
  templateclass type
  class listnode
  {
   public:
   friend class listtype;
   private:
   type data;
   listnodetype * next;
  };
  
  
  templateclass 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:
   listnodetype *first,*last;
   int length;
  };
  
  templateclass type
  void initlist(type &tmp);
  
  templateclass type
  void list_exit(listtype &L,type tmp);
  
  void initation();
  
  templateclass type
  void list_insertend(listtype &L,type tmp);
  
  
  templateclass type int listtype::getlen()
  {
   return length;
  }
  
  templateclass type void listtype::makeempty()
  {
   listnodetype *p1,*p2;
  
   p1=first-next;
   first-next=NULL;
   while(p1!=NULL)
    {
   p2=p1;
   p1=p1-next;
   delete p2;
   }
   length=0; 
  }
  
  templateclass type void listtype::insertend(type t)
  {
  
   listnodetype *p;
   p=new listnodetype;
   p-data=t;
   p-next=NULL;
   last-next=p;
   last=p;
  
   length++;
  }
  
  templateclass type bool listtype::insert(type t,int i)
  {
   listnodetype *p;
   p=first;
  
   int k=1;
   while(p!=NULL&&ki)
   {
   p=p-next;
   k++;
   }
   if(p==NULL&&k!=i)
   return false;
   else
   {
     listnodetype *tp;
    tp=new listnodetype;
    tp-data=t;
    tp-next=p-next;
    p-next=tp;
    length++;
   
    return true;
   }
  }
  
  templateclass type void listtype::delnode(int i)
  {
   int k=1;
   listnodetype *p,*t;
   p=first;
  
   while(p-next!=NULL&&k!=i)
   {
   p=p-next;
     k++;
   }
    t=p-next;
   cout"你已经将数据项 "t-data"删除"endl;
  
   p-next=p
展开更多 50%)
分享

猜你喜欢

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

编程语言 网络编程
数据结构算法集---C++语言实现

数据结构C语言实现系列——队列

编程语言 网络编程
数据结构C语言实现系列——队列

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

数据结构C语言实现系列——二叉树

编程语言 网络编程
数据结构C语言实现系列——二叉树

C++ 冒泡排序数据结构、算法及改进算法

编程语言 网络编程
C++ 冒泡排序数据结构、算法及改进算法

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

C++开发中数据结构和算法的分离

编程语言 网络编程
C++开发中数据结构和算法的分离

Linux C 函数参考(数据结构及算法)

Linux Linux命令 Linux安装 Linux编程 Linux桌面 Linux软件 Linux内核 Linux管理
Linux C 函数参考(数据结构及算法)

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Visual C#中灵活使用DataView

Visual C#中灵活使用DataView

美好的未来分组图案_三分天注定 七分靠打拼 - QQ图案分组

美好的未来分组图案_三分天注定 七分靠打拼 - QQ图案分组
下拉加载更多内容 ↓