下你所需,载你所想!
汇集开发技术源码资料

不带头节点的单链表创建

:73.602KB :1 :2022-09-16 23:31:52

部分简介

不带头节点的单链表创建如果开发者对于本文件有需要的可以参考。
#include
#include
#include
#include
using namespace std;
typedef int T;

struct LinkNode //结点定义
{
T data;//数据域
LinkNode* next;//链域
LinkNode(const T& item, LinkNode* ptr=NULL)
{
data=item;
next=ptr;
}
LinkNode(LinkNode* ptr=NULL)
{
next=ptr;
}
};
bool compare (const LinkNode* a,const LinkNode *b);
class List
{
private:
LinkNode * first;
public:
List(){
first=NULL;
}
List(const List& L){
first=NULL;
LinkNode * p;
for(p=L.first;p!=NULL;p=p->next){
this->InputRear(p->data);
}
}
List& operator=(const List& L){
if(&L==this)return *this;
MakeEmpty();
LinkNode * p;
for(p=L.first;p!=NULL;p=p->next){
this->InputRear(p->data);
}
return *this;
}
~List(){
MakeEmpty();
}
void InputFront(const T& elem){
LinkNode * newnode=new LinkNode (elem,first);
first=newnode;
}
void InputRear(const T& elem){
LinkNode * newnode=new LinkNode (elem,NULL);
LinkNode *p=first;
if(p==NULL){
InputFront(elem);
return ;
}

for(;p->next!=NULL;p=p->next){
;
}
p->next=newnode;
}
void MakeEmpty(){
LinkNode *tem;
LinkNode *p=first;
if(p==NULL){
return;
}
for(;p->next!=NULL;p=tem){
tem=p->next;
delete p;
}
delete p;
first=NULL;
}
int Length() const{
int i=0;
for(LinkNode *p=first;p!=NULL;p=p->next){
i ;
}
return i;
}
LinkNode* Search(const T& x){
for(LinkNode*p=first;p!=NULL;p=p->next){
if(p->data==x)return p;
}
return NULL;
}
LinkNode* Locate(int i){
if(i>=1&&i<=this->Length()){
for(LinkNode*p=first;p!=NULL;p=p->next){
i--;
if(i==0)return p;
}
return NULL;
}
else
return NULL;
}
bool GetData(int i, T& x){
if(this->Locate(i)==NULL)
return false;
else{
LinkNode * p=this->Locate(i);
x=p->data;
return true;
}

热门推荐

相关文章