C++线性表链式存储结构【单链表的基本操作】

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include
using namespace std;

template
struct Node
{
T data;
Node *next;
};

template
class LinkList
{
Node *head;
public:
LinkList();
LinkList(T a[], int n);
~LinkList();
int ListLength();
T Get(int pos);
int Locate(T item);
void PrintLinkList();
void Insert(int i, T item);
T Delete(int i);
void Invert();
void Merge(LinkList &L1,LinkList &L2);
};

template
LinkList::LinkList()
{
head=new Node;
head->next=NULL;
}

template
LinkList::LinkList(T a[], int n)
{
Node *s, *r;
head=new Node;
r=head;
for(int i=0; i{
s=new Node;
s->data=a[i];
r->next=s;
r=s;
}
r->next=NULL;
}

template
int LinkList::ListLength()
{
Node *p;
int num = 0;
p = head -> next;
while(p)
{
p = p-> next;
num++;
}
return num;
}

template
T LinkList::Get(int pos)
{
Node *p;
p = head -> next;
int j=1;
while(p && j{
p=p->next;
j++;
}
if(!p) {cerr<<"查找位置非法";exit(1);}
else return p->data;
}

template
int LinkList::Locate(T item)
{
Node *p;
p=head->next;
int j=1;
while(p && p->data!=item)
{
p=p->next;
j++;
}
if(p) return j;
else return 0;
}

template
void LinkList::PrintLinkList()
{
Node *p;
p=head->next;
while(p)
{
cout<data<p=p->next;
}
}

template
void LinkList::Insert(int i, T item)
{
Node *p,*s;
p=head;
int j=0;
while(p && j < i-1)
{
p=p -> next;
j++;
}
if(!p) {cerr<<"插入位置非法"; exit(1);}
else {
s=new Node;
s->data=item;
s->next=p->next;
p->next=s;
}
}

template
T LinkList::Delete(int i)
{
Node *p,*q;
T x;
p=head;
int j=0;
while(p && j{
p=p->next;
j++;
}
if(!p || !p->next) {cerr<<"删除位置非法";exit(1);}
else
{
q=p->next;
x=q->data;
p->next=q->next;
delete q;
return x;
}
}

template
LinkList::~LinkList()
{
Node *p,*q;
p=head;
while(p)
{
q=p;
p=p->next;
delete q;
}
head=NULL;
}

template
void LinkList::Invert()
{
Node *p,*q;
p=head->next;
head->next=NULL;
while(p!=NULL)
{
q=p;
p=p->next;
q->next=head->next;
head->next=q;
}
}

template
void LinkList::Merge(LinkList &L1,LinkList &L2)
{
Node *p1,*p2,*p3;
p1=L1.head->next;
p2=L2.head->next;
p3=L1.head;
while((p1!=NULL)&&(p2!=NULL))
{
if((p1->data)<(p2->data))
{
p3->next=p1;
p1=p1->next;
p3=p3->next;
}
else
{
p3->next=p2;
p2=p2->next;
p3=p3->next;
}
}
if(p1!=NULL) p3->next=p1;
if(p2!=NULL) p3->next=p2;
delete L2.head;
L2.head=NULL;
}

int main()
{
int a[] = {1,3,5,7,9,12,17,23,27,29};
int b[] = {2,4,6,8,15,12,13,18,21,22};
LinkList c(a,10);

cout<<"单链表元素是:"<c.PrintLinkList();

cout<<"单链表的长度是:"<
cout<<"单链表的第二个元素是:"<
cout<<"单链表的元素为3是第"<
cout<<"在第4个位置插入值为6:"<c.Insert(4,6);

cout<<"单链表的元素现在是:"<c.PrintLinkList();

cout<<"删除顺序表的第4个元素:"<c.Delete(4);

cout<<"单链表的元素现在是:"<c.PrintLinkList();

c.Invert();
cout<<"逆置后的元素是:"<c.PrintLinkList();

LinkList d(b,5);
d.PrintLinkList();
c.Merge(c,d);
cout<<"合并后的元素是:"<c.PrintLinkList();
return 0;
return 0;
}

相关文档
最新文档