数据结构2_链表程序实现

在这里实现了带头结点的链表,包含插入,删除,查询,清空链表一系列功能
 
 
#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();
}
 
 





posted on 2014-05-15 13:18  zhuangwy_CV  阅读(185)  评论(1编辑  收藏  举报

导航