WEB开发网
开发学院软件开发C++ 数据结构算法集---C++语言实现 阅读

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

 2008-03-08 12:49:18 来源:WEB开发网   
核心提示:这是我学数据结构编写的算法,我把他整理出来,数据结构算法集---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

Tags:数据结构 算法

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接