推免复习之数据结构与算法 单链表

这一篇是单链表,也算是数据结构里最简单的一种了,我也大概实现了一下其中的大部分功能,应该还有一点小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;
}

猜你喜欢

转载自blog.csdn.net/qq_38279908/article/details/93408897