链表示例

#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();
}

转载于:https://www.cnblogs.com/penboy/archive/2005/01/09/88958.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值