这一篇是单链表,也算是数据结构里最简单的一种了,我也大概实现了一下其中的大部分功能,应该还有一点小bug,在删除元素那里,但是我懒得调试了,就这样吧,这个数据结构大体上算是复习到了。以后有这兴致再回来把那个部分改了。
class Link
{
public:
int data;
Link * next;
Link(Link * nextValue = NULL) //头节点
{
next = nextValue;
}
Link(int value,Link * nextValue=NULL) //一般节点
{
data = value;
next = nextValue;
}
};
class linkList
{
private:
int size;
Link *head, *tail;
public:
linkList(int value=0);
~linkList();
bool isEmpty();
void clear();
int Length();
bool append(int value);
bool insert(int pos,int value);
bool deleteEle(int pos);
int getValue(int pos);
int getPos(int value);
};
linkList::linkList(int value)
{
size = 0;
head = new Link(value);
tail = head;
}
linkList::~linkList()
{
Link *p = head;
Link *q=NULL;
while (true)
{
if (p == tail)
{
delete p;
return;
}
q = p;
p = p->next;
delete q;
}
}
bool linkList::isEmpty()
{
if (size == 0)
{
return true;
}
else
{
return false;
}
}
int linkList::Length()
{
return size;
}
void linkList::clear()
{
Link *p = head->next;
Link *q = NULL;
while (p!=NULL)
{
if (p == tail)
{
delete p;
return;
}
q = p;
p = p->next;
delete q;
}
tail = head;
size = 0;
}
bool linkList::append(int value)
{
tail->next = new Link(value);
tail = tail->next;
size++;
return true;
}
bool linkList::insert(int pos,int value)
{
Link *p = head->next;
Link *q = NULL;
int count = 0;
while (p!=NULL)
{
if (count == pos-1)
{
q = p->next;
p->next = new Link(value);
p->next->next = q;
size++;
return true;
}
count++;
p = p->next;
}
return false;
}
bool linkList::deleteEle(int pos)
{
Link *p = head->next;
Link *q = NULL;
int count = 0;
while (p != NULL)
{
if (count == pos - 1)
{
q = p->next;
p->next = q->next;
delete q;
size--;
return true;
}
count++;
p = p->next;
}
return false;
}
int linkList::getValue(int pos)
{
Link *p = head->next;
int count = 0;
while (p != NULL)
{
if (count == pos)
{
return p->data;
}
count++;
p = p->next;
}
return 0;
}
int linkList::getPos(int value)
{
Link *p = head->next;
int count = 0;
while (p != NULL)
{
if (p->data == value)
{
return count;
}
count++;
p = p->next;
}
return -1;
}