#include <iostream.h>
#include "stdio.h"
class List;
class Item
{
public:
friend class List;
private:
int data;
Item* next;
Item(int d=0){data=d;next=0;}
};
class List
{
public:
List(){list=0;}
List(int d){list=new Item(d);}
int insert(int d=0);
int insert(int d,int order);
int print();
int finditem(int d);
int deleteitem(int d);
int append(int d=0);
void reverse();
int length();
void connectlist(List &lst);
private:
Item *end();
Item *list;
};
int List::length()
{
int length=0;
Item* p=list;
while(p)
{
length=length+1;
p=p->next;
}
return length;
}
void List::connectlist(List& lst)
{
Item *pt=lst.list;
while(pt)
{
append(pt->data);
pt=pt->next;
}
}
int List::append(int d)
{
Item* pt=new Item(d);
Item* p=list;
Item* p1;
while(p)
{
p1=p;
p=p->next;
}
p1->next=pt;
pt->next=0;
return 1;
}
int List::insert(int d)//在链表头插入一项
{
Item* pt=new Item(d);//新建一个链表项
pt->next=list;//新插入的项指向表头
list=pt;//链表头指针指向新建的那项,因为它现在是表头;
return d;
}
int List::insert(int d,int order)
{
if(order>=0 && order<this->length())
{
Item* pt=new Item(d);
Item* p=list;
while(order-1)
{
p=p->next;
order=order-1;
}
pt->next=p->next;
p->next=pt;
return 1;}
else
{
cout<<"\n你插入数据项的位置不正确!请检查你插入数据项位置!"<<endl;
return 0;
}
}
void List::reverse()
{
Item* pt;
Item* pt1;
pt1=list;
pt=list->next;
list=list->next->next;
pt1->next=0;
while(list)
{
pt->next=pt1;
pt1=pt;
pt=list;
list=list->next;
}
list=pt;
pt->next=pt1;
}
int List::deleteitem(int d)
{
Item *p1=list;
Item *p2;
int j=this->finditem(d);
if(j>0)
{
while(j-1)
{
p2=p1;
p1=p1->next;
j=j-1;
}
p2->next=p1->next;
}
return 1;
}
int List::finditem(int d)
{
int order=0;
Item* p=list;
while(p)
{
++order;
if(p->data==d)
{
cout<<"查找成功!并且所查项位于列表的第"<<order<<"项"<<endl;
return order;
}
if(!p)
{
cout<<"未找到所需要找的项"<<endl;
return 0;
}
p=p->next;
}
return 0;
}
int List::print()
{
if(list==0)
{
cout<<"链表为空,需要初始化!\n"<<endl;
return 0;
}
else
{
int cnt=0;
Item* pt=list;
while(pt)
{
if(cnt==0)
{
cout<<pt->data;
}
else
{
cout<<"->"<<pt->data;
}
pt=pt->next;
++cnt;
}
return cnt;
cout<<endl;
}
}
void main()
{
List list1;
int x;
int total;
for(int i=1;i<=10;i++)
{
total=list1.insert(i);
}
printf("链表初始化:\n");
list1.print();
cout<<"链表长度为:"<<total<<endl;
cout<<"链表查找6这个数据的位置:\n"<<endl;
int j=list1.finditem(6);
cout<<"链表插入操作:\n"<<endl;
list1.insert(70,4);
list1.print();
cout<<"\n链表删除操作:\n"<<endl;
list1.deleteitem(70);
list1.print();
cout<<"\n链表逆向倒置操作:\n"<<endl;
list1.reverse();
list1.print();
cout<<"\n链表在表尾追加一项的结果:\n";
cout<<"请输入最加的那项数据:x=";
cin>>x;
cout<<endl;
list1.append(x);
list1.print();
cout<<"\n链表连接的操作:\n"<<endl;
List list2;
for(i=1;i<=10;i++)
{
list2.insert(i);
}
list1.connectlist(list2);
list1.print();
}