北京邮电大学 数据结构 题目1-基础实验

 北邮信通 数据结构 实验一 题目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();
}

  • 15
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值