⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 llist.h

📁 C、C++语言实现的数据结构重要算法和程序 比较全。
💻 H
字号:
//--------------------------//
//                          //
//          链表类          //
//                          //
//--------------------------//
  
#if !defined(_INC_LLIST_OO)
#define _INC_LLIST_OO

#include<stdlib.h>
#include "D:\vc_h_file\Node.h"

template<class T>
class CLList
{
 private:
	 CNode<T> *front;//表头指针
	 int size;//表长度
 public:
	 CLList();
	 ~CLList();
	 int Size();const//表长
     int Empty();const//判断表是否为空
     int Locate(T item);const//定位表项
     T GetData(int pos);const//取表项
     void SetData(T item,int pos);//修改表项
     void Insert(T item,int pos);//插入表项
     void Delete(int pos);//删除表项
     void Clear();//置空表
};

template<class T>
CLList<T>::CLList()
{
	front=new CNode<T>;
	if(front==NULL)
	{
		cerr<<"overflow\n"<<endl;
		exit(1);
	}
	front->SetNextNode(NULL);
	size=0;
}

template<class T>
CLList<T>::~CLList()
{
	while(front->GetNextNode()!=NULL)
		front->DeleteAfter();
	delete front;
}

template<class T>
int CLList<T>::Size()const
{
	return(size);
}

template<class T>
int CLList<T>::Empty()const
{
	if(size==0)
		return(1);
	else
		return(0);
}

template<class T>
int CLList<T>::Locate(T item)const
{
	int i;
	CNode<T> *ptr;
	ptr=front->GetNextNode();
	for(i=0;ptr!=NULL;i++)
	{
		if(item==ptr->GetData())
			return(i);
		ptr=ptr->GetNextNode();
	}
	return(-1);
}

template<class T>
T CLList<T>::GetData(int pos)const
{
	int i;
	CNode<T> *ptr;
	if(pos<0||pos>size-1)
	{
		cerr<<"Pos is illegal in GetData!\n"<<endl;
		exit(1);
	}
	ptr=front->GetNextNode();
	i=0;
	while(i<pos)
	{
		ptr=ptr->GetNextNode();
		i++;
	}
	return(ptr->GetData());
}

template<class T>
void CLList<T>::SetData(T item,int pos)
{
	int i;
	CNode<T> *ptr;
	if(pos<0||pos>size-1)
	{
		cerr<<"Pos is illegal in GetData!\n"<<endl;
		exit(1);
	}
	ptr=GetNextNode(front);
	for(i=0;i<pos;i++)
		ptr=ptr->GetNextNode();
	ptr->SetData(item);
}

template<class T>
void CLList<T>::Insert(T item,int pos)
{
	int i;
	CNode<T> *prevptr,*ptr;
	if(pos<0||pos>size)
	{
		cerr<<"Pos is illegal in Insert!\n"<<endl;
		exit(1);
	}
	prevptr=front;
	ptr=front->GetNextNode();
	for(i=0;i<pos;i++)
	{
		prevptr=ptr;
		ptr=ptr->GetNextNode();
	}
	prevptr->InsertAfter(item);
	size++;
}

template<class T>
void CLList<T>::Delete(int pos)
{
	int i;
	CNode<T> *prevptr,*ptr;
	if(pos<0||pos>size-1)
	{
		cerr<<"Pos is illegal in LDelete!\n"<<endl;
		exit(1);
	}
	prevptr=front;
	ptr=front->GetNextNode();
	for(i=0;i<pos;i++)
	{
		prevptr=ptr;
		ptr=ptr->GetNextNode();
	}
	prevptr->DeleteAfter();
	size--;
}

template<class T>
void CLList<T>::Clear()
{
	while(front->GetNextNode()!=NULL)
		front->DeleteAfter();
	size=0;
}

#endif //_INC_LLIST_OO

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -