代码改变世界

C++ 链表回顾

2017-02-04 17:41  雄风狂飙  阅读(74)  评论(0)    收藏  举报
#include <iostream>
#include <string>

using namespace std;

class Elemt
{
private:
	int mi;
public:
    
	Elemt *next;
	Elemt()
	{
	    mi = 0;
		next = NULL;
	}
	~Elemt()
	{
		if(next)
		{
		    free(next);
		}
	    next = NULL;
	}
	int getMi()
	{
	    return mi;
	}
	void setMi(int m){mi=m;}
	void print()
	{
	    cout<<"mi=="<<getMi()<<endl;
		if(next)
		{
		    cout<<"have other element"<<endl;
		}else{
		    cout<<"no more element"<<endl;
		}
	}
};

class LinkList
{
private:
	Elemt *p;
    long len;
public:
	
	LinkList()
	{  
		len = 0;
	    p = NULL;
	}
	~LinkList(){if(p) free(p);p=NULL;}
    
	long getLen(){return len;}
	Elemt * getHead(){return p;}
	int Inst(Elemt e,const int i);
    Elemt Dlt(const int i);
	void lenPlus(){len++;}
};



int LinkList::Inst(Elemt e,int i)
{
//	cout<<"inst 111"<<endl;
	Elemt *pt = (Elemt*)malloc(sizeof(Elemt));
	if(!pt)
	{
	    return -1;
	}
//	cout<<"inst 222"<<endl;
    *pt=e;
	
	Elemt *h=getHead();
	
    if( getLen() < i-1)
	{
		free(pt);
	    return -1 ;
	}


	if(0==getLen())
	{
	    p = pt;
		pt->next = NULL;
		lenPlus();
		return 1;
	}

//	cout<<"inst 333"<<endl;
	int j=2;
	for( ;j<i;j++)
	{
	    h=h->next;
	}
//	cout<<"inst 444"<<endl;
//	pt->print();
//	h->print();
	pt->next = h->next;
//	cout<<"inst 555"<<endl;
	h->next=pt;
//    cout<<"inst 666"<<endl;
    
	lenPlus();

	return 1;
}
  
Elemt LinkList::Dlt(const int i)
{
	Elemt e;
	return  e;
}

int main()
{
    cout<<"Linked List begin"<<endl;
    LinkList ll;
	//cout<<"11111"<<endl;
	
	//cout<<"22222"<<endl;
    for(int i=1 ; i<10 ; i++)
	{
	    Elemt e;
		e.setMi(i);
		ll.Inst(e,i);
	}

	Elemt *pt=ll.getHead();
	while(pt)
	{
	    pt->print();
		pt = pt->next;
	}
	
	cout<<"Linked List end"<<endl;

    return 0;
}