list.h
/*-----------------------------------------------
Created By EverSteins
Email:EverSteins@gmail.com
转载请注明出处
------------------------------------------------*/
typedef int ElemType;
typedef struct Node
{
ElemType entry;
Node *next;
Node():entry(0),next(NULL){}
Node(ElemType entry):entry(entry),next(NULL){}
Node(ElemType entry,Node *link=NULL):entry(entry),next(link){}
}Node;
class List
{
public:
List():count(0),head_node(NULL),current_position(0),current_node(NULL){}
//List(const ElemType ©);
//void operator=(const ElemType ©);
~List();
bool insert(int position,const ElemType &x);
bool remove(int position,ElemType &x);
bool empty() const;
void showAll() ;
protected:
int count;
Node *head_node;
mutable int current_position;
mutable Node *current_node;
void set_position(int position) const;
};
list.cc
/*-----------------------------------------------
Created By EverSteins
Email:EverSteins@gmail.com
转载请注明出处
------------------------------------------------*/
#include "stdafx.h"
#include "utility.h"
#include "list.h"
using namespace std;
void List::set_position(int position) const
{
//pre:0<=position<count
if (position<current_position)
{
current_position=0;
current_node=head_node;
}
for (;current_position!=position;current_position++)
current_node=current_node->next;
}
bool List::insert(int position,const ElemType &x)
{
//pre:0<=position<count
if (position<0 || position>count)
return false;
if (position>0)
{
set_position(position-1);
Node *old_node=current_node->next;
Node *new_node=new Node(x,old_node);
current_node->next=new_node;
}
else
{
Node *new_node=new Node(x,head_node);
head_node=new_node;
current_position=0;
current_node=head_node;
}
count++;
return true;
}
bool List::remove(int position,ElemType &x)
{
if (position<0 || position>=count)
return false;
if (position>0)
{
set_position(position-1);
Node *remove_node=current_node->next;
Node *remove_following_node=remove_node->next;
current_node->next=remove_following_node;
x=remove_node->entry;
delete remove_node;
}
else
{
//todo
}
count--;
return true;
}
bool List::empty() const
{
return count<=0;
}
void List::showAll()
{
Node *current_node=head_node;
while (NULL != current_node)
{
cout<<current_node->entry<<" ";
current_node=current_node->next;
}
}
List::~List()
{
Node *current_node=head_node;
while (NULL != current_node)
{
Node *following_node=current_node->next;
delete current_node;
current_node=following_node;
}
}
main.cc
/*-----------------------------------------------
Created By EverSteins
Email:EverSteins@gmail.com
转载请注明出处
------------------------------------------------*/
#include "stdafx.h"
#include "utility.h"
#include "list.h"
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
List list;
list.insert(0,0);
list.insert(1,10);
list.insert(2,20);
list.insert(3,30);
list.insert(4,40);
list.insert(5,50);
list.insert(3,-1);
list.insert(3,-2);
list.insert(3,-3);
list.showAll();
return 0;
}