前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >c++链表操作

c++链表操作

作者头像
Enjoy233
发布2019-03-05 09:55:28
1.1K0
发布2019-03-05 09:55:28
举报
代码语言:javascript
复制
#include <iostream>
#include <iomanip>
  
usingnamespacestd;
template<classT>
classnode                         //节点
{
public:
T data;
    node *next;
};
  
template<classT>
classlist
{
public:
list();
voidCreate();                     //创建链表
boolEmpty()const;                //判断链表是否为空
voidInsertLast(constT e);        //从尾部插入一个元素
voidInsertFirst(constT e);       //从头部插入一个元素
voidDeleteFirst();                //从头删除一个元素
voidDeleteLast();                 //从尾删除元素
    voidDisplay()const;              //显示链表
node<T>* GetNode(inti);               //返回第i个节点
    voidReverse();                    //链表逆置
boolFind(constT e);               //在链表中查找某个值
~list();                           //销毁链表
private:
    node<T> *head;                       //头节点
};
  
template<classT>
list<T>::list()
{
head=newnode<T>;
head->next=NULL;
}
  
template<classT>
voidlist<T>::Create()
{
    node<T> *p,*q;
p=head;
q=newnode<T>;
cout<<"请输入值(按'ctrl+z'停止): ";
while(cin>>q->data)
{
   p->next=q;
   p=q;
   q=newnode<T>;
}
p->next=NULL;
}
  
template<classT>
boollist<T>::Empty()  const 
{
return(head->next==NULL);
}
  
template<classT>
voidlist<T>::InsertFirst(constT e)
{
node<T> *p=newnode<T>;
p->data=e;
p->next=head->next;
head->next=p;
}
  
template<classT>
voidlist<T>::InsertLast(constT e)
{
    node<T> *p,*q;
p=head;
q=newnode<T>;
q->data=e;
while(p->next)
{
   p=p->next;
}
p->next=q;
q->next=NULL;
}
  
template<classT>
voidlist<T>::DeleteFirst()
{
   head->next=head->next->next;
}
  
template<classT>
voidlist<T>::DeleteLast()
{
node<T> *p;
p=head;
while(p->next->next)
   p=p->next;
p->next=NULL;
}
  
template<classT>
voidlist<T>::Display()const            //显示链表
{
node<T> *p;
p=head->next;
while(p)
{
   cout<<p->data<<" ";
   p=p->next;
}
}
  
template<classT>
node<T>* list<T>::GetNode(inti)             //返回第i个节点
{
intk=0;
    node<T> *p;
p=head;
while(p && k<i)
{
   p=p->next;
   ++k;
}
returnp;
}
  
template<classT>
voidlist<T>:: Reverse()                  //链表逆置
{
     node<T> *p,*q;
p=head->next;
intcount=0;
while(p)                //求链表的长度
{
   p=p->next;
   count++;
}
inti,j;
i=1;
j=count;
while(i<=count/2 && j>=count/2)
{
   p=GetNode(i);
   q=GetNode(j);
   T temp=p->data;
   p->data=q->data;
   q->data=temp;
   ++i;
   --j;
}
}
  
template<classT>
boollist<T>::Find(constT e)            //在链表中查找某个值
{
boolflag=false;
    node<T> *p;
p=head->next;
while(p)
{
   if(p->data==e)
   {
    flag=true;
     break;
   }
   p=p->next;
}
returnflag;
}
  
template<classT>
list<T>::~list()
{
node<T> *p;
while(head)
{
   p=head->next;
   deletehead;
   head=p;
}
}
  
          
intmain()
{
list<int> ilist;
ilist.Create();       //创建链表
ilist.Display();      //输出链表
cout<<endl;
ilist.InsertFirst(123);//从头插入一个值
ilist.InsertLast(456);//从尾插入一个值
    ilist.Display();
cout<<endl;
    if(ilist.Find(123))
   cout<<"123 在链表中"<<endl;
else
   cout<<"123 不在链表中"<<endl;
ilist.DeleteFirst();  //从头删除一个值
ilist.DeleteLast();   //从尾删除一个值
ilist.Display();
cout<<endl;
ilist.Reverse();      //逆序
ilist.Display();
cout<<endl;
system("pause");
return0;
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2012年04月08日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档