当前位置:编程学习 > C/C++ >>

带头结点的单链表类C++手动实现

最近在复习数据结构,看到单链表这部分,现在用的教材大部分都是严蔚敏的C语言版吧,参考了一些书籍,手动编写了C++下单链表类的实现,环境是Visual Studio 2010,函数是对照着教材声明挑了个写的。代码如下:

/*带头结点的单链表类C++手动实现

作者:许多

*/ #include <iostream>

using namespace std;

class MyList;

//提前声明 class LNode

{

//结点类 friend MyList;

private: int data;

LNode *next;

};

class MyList{

//链表类 public: void InitList(int n);

//头插法初始化带头结点的表,长度为n,不算头结点 void DestroyList();

//摧毁表 void ClearList();

//清空表 bool ListEmpty();

//判空 int ListLength();

//取表长 int GetElem(int i);

//取第i个结点的值 int LocateElem(int e);

//找出值为e的元素是第几个元素 bool ListInsert(int i, int e);

//第i个位置插入元素e bool ListDelete(int i);

//删除第i个元素 void PrintList();

//输出链表 private: LNode *head;

//头指针 };

void MyList::InitList(int n)

{ int x;

head = new LNode;

head->next = NULL;

for(int i=n;i>0;--i)

{

cin>>x;

LNode *p = new LNode;

p->data = x;

p->next = head->next;

head->next = p;

}

}

void MyList::DestroyList()

{ delete head;

cout<<"表摧毁了!"<<endl;

}

void MyList::ClearList()

{ head->next = NULL;

cout<<"清空完毕!"<<endl;

}

bool MyList::ListEmpty()

{

if(head->next == NULL) return true; else return false;

}

int MyList::ListLength()

{

LNode *p=head;

int j=0;

while(p->next)

{ p=p->next; j++; } return j;

}

int MyList::GetElem(int i)

{ int j=1;

LNode *p=head->next;

//第一个结点 if(i<1) return NULL;

while(p&&j<i)

{

p=p->next; j++; } return p->data;

}

int MyList::LocateElem(int e)

{

int i=0; LNode *p=head->next;

while(p!=NULL&&p->data!=e)

{

p=p->next;

i++;

}

if(p==NULL) return 0;

else return i+1;

}

bool MyList::ListInsert(int i, int e)

{ LNode *p, *s;

int j=1;

p=head;

while(p&&j<i)

{p=p->next;j++;}

if(p==NULL) return false;

if((s = new LNode)==NULL) return false;

s->data=e;

s->next=p->next;

p->next=s;

return true;

}

bool MyList::ListDelete(int i)

{ LNode *p,*q;

int j=1;

p=head;

while(p&&j<i)

{ p=p->next;j++;}

if(p==NULL) return false;

q=p->next;

p->next=q->next;

delete q;

return true;

}

void MyList::PrintList()

{ if(ListEmpty())

{ cout<<"表是空的!"<<endl;

} else

{ cout<<"表中元素为:";

LNode *p = head->next;

while(p!=NULL)

{

cout<<p->data<<" ";

p=p->next;

}

cout<<endl;

}

}

补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,