数据结构c++实现,长期更新
本人比较懒, 直接看代码吧
#include <iostream>
using namespace std;
template <typename Element>
struct Node
{
Element data;
Node<Element> *next;
};
template <typename Element>
class LinkList
{
public:
LinkList();
LinkList(Element a[], int n);
~LinkList();
int getLength();
Element getItem(int i);
int locate(Element x);
void insert(int i, Element x);
Element remove(int i);
bool empty();
void printList();
private:
Node<Element> *head;
};
template <class Element>
LinkList<Element>::LinkList()
{
head = new Node<Element>;
head->next = nullptr;
}
template <class Element>
bool LinkList<Element>::empty()
{
if (head->next == nullptr)
return true;
else
return false;
}
template <class Element>
void LinkList<Element>::printList()
{
Node p = head->next;
while (p != nullptr)
{
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
template <class Element>
Element LinkList<Element>::getItem(int i)
{
Node p = head->next;
int count = 1;
while (count < i && p != nullptr)
{
p = p->next;
count++;
}
if (p == nullptr)
throw "查找位置错误";
else
return p->next;
}
template <class Element>
int LinkList<Element>::getLength()
{
Node p = head->next;
int count = 0;
while (p != nullptr)
{
count++;
p = p->next;
}
return count;
}
template <class Element>
int LinkList<Element>::locate(Element x)
{
Node p = head->next;
int j = 1;
while (p != nullptr && p->data != x)
{
p = p->next;
j++;
}
if (p != nullptr)
return j;
else
return 0;
}
template <class Element>
void LinkList<Element>::insert(int i, Element x)
{
Node p = head;
int j = 0;
while (p != nullptr && j < i - 1)
{
p = p->next;
j++;
}
if (p == nullptr)
throw "插入位置异常";
else
{
Node s = new Node<Element>;
s->data = x;
s->next = p->next;
p->next = s;
}
}
template <class Element>
Element LinkList<Element>::remove(int i)
{
Node p = head;
int j = 0;
while (j < i - 1 && p != nullptr)
{
p = p->next;
j++;
}
if (p == nullptr && p->next == nullptr)
{
throw "删除位置异常";
}
else
{
Node q = p->next;
Element x = q->data;
p->next = q->next;
delete q;
return x;
}
}
template <class Element>
LinkList<Element>::LinkList(Element a[], int n)
{
head->next = nullptr;
Node rear = head;
for (int i = 0; i < n; i++)
{
Node s = new Node<Element>;
s->data = a[i];
s->next = rear->next;
rear->next = s;
rear = s;
}
}
template <class Element>
LinkList<Element>::~LinkList()
{
Node p = head;
while (p)
{
Node q = p;
p = p->next;
delete p;
}
}
int main()
{
return 0;
}