带表头结点的单链表ADT_HeaderList

单链表的衍生,许多函数和单链表想同,多了一个first表头结点。

带表头结点的数据域element不存放线性表中的元素,要么为空,要么存放辅助数据。

有了表头结点以后,单链表中每个元素结点都有一个前驱结点,简化了插入和删除操作的描述。

给出构造函数,插入函数以及删除函数的实现代码。


实现代码:

template<class T>
HeaderList<T>::HeaderList()
{
	Node<T> *first = new Node<T>;
	first -> Link = NULL;
	n = 0;
}
template<class T>
bool HeaderList<T>::Insert(int i, T x) // 在i后插入x
{
	if(i < -1 || i > n - 1) { // i不在范围内
		cout << "Out of Bounds" << endl;
		return false;
	}
	Node<T> *p = first;
	for(int j = 0; j <= i; ++j) // 结束循环时 P指向i
		p = p -> Link;
	Node<T> *q = new Node<T>;
	q -> element = x;
	q -> Link = p -> Link;
	p -> Link = q;
	n++;
	return true;
}
template<class T>
bool HeaderList<T>::Delete(int i)
{
	if(!n) { // 空链表
		cout << "UndeFlow" << endl;
		return false;
	}
	if(i < 0 || i > n - 1) {
		cout << "Out of << Bounds" << endl;
		return false; 
	}
	Node<T> *q = first, *p;
	for(int j = 0; j < i; ++i) // 结束循环时 q指向i - 1
		q = q -> Link;
	p = q -> Link;
	q -> Link = p -> Link;
	delete p;
	n--;
	return true;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值