北邮信通 数据结构 实验一 题目1-基础实验
根据线性表的抽象数据类型的定义,选择下面任意一种链式结构实现线性表,并完成线性表的基本功能
头插
尾插
析构函数
仅供学习交流使用
#include<iostream>
using namespace std;
template<class T>
struct Node
{
T data;
struct Node<T>* next;
};
template<class T>
class LinkList
{
public:
LinkList() { front = new Node<T>; front->next = NULL; }
LinkList(T a[], int n);
~LinkList();
Node<T>* Get(int i);
Node<T>* Locate(int n, Node<T>* s);
void Insert(int i, T x);
T Delete(int i);
int GetLength();
void Print();
private:
Node<T>* front;
};
template<class T>
LinkList<T>::LinkList(T a[], int n) //头插法
{
front = new Node<T>;
front->next = NULL;
for (int i = n - 1; i >= 0; i--)
{
Node<T>* s = new Node<T>;
s->data = a[i];
s->next = front->next;
front->next = s;
}
}
/*template<class T>
LinkList<T>::LinkList(T a[],int n) //尾插法
{
front=new Node<T>;
Node<T>*r=front;
for(int i=0;i<n;i++)
{
Node<T>*s=new Node<T>;
s->data=a[i];
r->next=s;
r=s;
}
r->next=NULL;
}*/
template<class T>
LinkList<T>::~LinkList() //析构函数
{
Node<T>* p = front;
while (p)
{
front = p;
p = p->next;
delete front;
}
}
template<class T>
Node<T>* LinkList<T>::Get(int i)
{
Node<T>* p = front->next;
int j = 1;
while (p && j != i)
{
p = p->next;
j++;
}
return p;
}
template<class T>
Node<T>* LinkList<T>::Locate(int n, Node<T>* s)
{
int i = 1;
Node<T>* p;
p = front->next;
if (p)
while (p)
{
if (p->data == n)
cout << "元素符号:" << i << endl;
p = p->next;
i++;
}
else
throw"空链表!";
/*while (p && p->data != n)
{
p = p->next;
}
return p;
t = 0;
if (p->next)
Locate(n, p->next);
else
return NULL;*/
}
template<class T>
void LinkList<T>::Insert(int i, T x)
{
Node<T>* p = Get(i);
if (p)
{
Node<T>* s = new Node<T>;
s->data = p->data;
s->next = p->next;
p->next = s;
p->data = x;
}
else
throw"输入有误";
}
template<class T>
T LinkList<T>::Delete(int i)
{
Node<T>* p = front;
if (i != 1)
p = Get(i - 1);
Node<T>* q = p->next;
p->next = q->next;
T x = q->data;
delete q;
return x;
}
template<class T>
int LinkList<T>::GetLength()
{
int i = 0;
Node<T>* p = front->next;
if (p)
{
i++;
p = p->next;
}
return i;
}
template<class T>
void LinkList<T>::Print()
{
Node<T>* p = front->next;
if (front->next)
{
while (p)
{
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
else
throw"该表没有元素";
}
int main()
{
int x, y;
int a[6] = { 1,2,3,4,5,6 };
LinkList<int>L(a, 6);
L.Print();
cout << "请输入要插入的位置与数值:";
cin >> x >> y;
L.Insert(x, y);
L.Print();
cout << "请输入要删除的元素符号:";
cin >> x;
L.Delete(x);
L.Print();
cout << "请输入需要查找的元素符号:";
cin >> x;
cout << L.Get(x)->data << endl;
cout << "请输入需要查找的元素:";
cin >> x;
L.Locate(x, NULL);
cout << L.GetLength();
}