码迷,mamicode.com
首页 > 其他好文 > 详细

链表程序实现

时间:2014-05-15 18:05:31      阅读:271      评论:0      收藏:0      [点我收藏+]

标签:des   style   class   c   ext   color   

在这里实现了带头结点的链表,包含插入,删除,查询,清空链表一系列功能
 
 
#include<iostream>
using namespace std;
class LinkList 
{
    char *elem;
    LinkList *next;
    static int length;
public:
    LinkList(char *e)    //一个含头结点的构造函数
    {
        elem=NULL;
        next=new LinkList(e,1);
    }
    LinkList(char *e,int i)//不含头结点的构造函数
    {
            length++;
            elem=new char(sizeof(e)+1);
            strcpy(elem,e);
            next=NULL;
    }
    void GetElem(int i,char *&e);    //查询第i个元素的值
    void ListInsert(int i,char *e); //插入函数
    void ListDelete(int i,char *&e); //节点删除函数
    void ClearList();              //清空链表
    void CreatList(int n);         //生成N个节点的链表
    void show();                    //显示所有节点
};
int LinkList::length=0;
void LinkList::GetElem(int i,char *&e)
{
    LinkList *p=this->next;
    int j=0;
    while(p&&j<i-1)
    {
        p=p->next;
        j++;
    }
    if(!p||j>i)
    {    cout<<"error position"<<endl;
        return;
    }
    e=new char(sizeof(p->elem)+1);
    strcpy(e,p->elem);
}
void LinkList::ListInsert(int i,char *e)
{
    LinkList *p=this;
    int j=0;
    while(p&&j<i-1)
    {
        p=p->next;
        ++j;
    }
    if(!p||j>i-1)
    {
        cout<<"insert position error"<<endl;
        return;
    }
    LinkList *q=new LinkList(e,1);
    q->next=p->next;
    p->next=q;
    show();
}
void LinkList::ListDelete(int i,char *&e)
{
    LinkList *p=this;
    int j=0;
    while(p&&j<i-1)
    {
        p=p->next;
        ++j;
    }
    if(!p||j>i-1)
    {
        cout<<"insert position error"<<endl;
        return;
    }
    LinkList *q=p->next;
    if(i!=length)       //删除最后一个节点时,需要注意的是q->next是没有定义的,会出错的,因此此处要特别对待!!!!
        p->next=q->next;
    else
        p->next=NULL;
    e=new char(sizeof(q->elem)+1);
    strcpy(e,q->elem);
    delete(q);
    length--;
    show();
}
void LinkList::ClearList()
{
    LinkList *p;
    while(this->next)
    {
        p=this->next;
        this->next=p->next;
        delete p;

    }
    length=0;
    cout<<"all nodes are cleared"<<endl;
}
void LinkList::show()
{
    LinkList *p=this->next;
    int i=1;
    while(p)
    {
        cout<<"the "<<i<<"th Node elem is:"<<p->elem<<endl;
        p=p->next;
        i++;
    }
    cout<<"_______________________________"<<endl;

}
void main()
{
    LinkList a("baichi");
    char *co=NULL;
    a.ListInsert(1,"sb250");
    a.ListInsert(1,"dasb250dsdf");
    a.ListDelete(3,co);
    cout<<"bei shan chu de:"<<co<<endl;
    a.GetElem(1,co);
    cout<<co<<endl;
    a.GetElem(3,co);
    a.ClearList();
}
 
 





链表程序实现,布布扣,bubuko.com

链表程序实现

标签:des   style   class   c   ext   color   

原文地址:http://www.cnblogs.com/zhuangwy-cv/p/3729816.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!