📄 lk_list.h
字号:
#ifndef lk_list_H
#define lk_list_H
#include "clsNode.h"
template<class T>
class lk_list{
private:
Node<T> *head;
Node<T> *p;
Node<T> *q;
int list_length;
public:
//----------------------------------------------------------
//--构造函数
//----------------------------------------------------------
lk_list(){
head=new Node<T>;
head->prior=head;
head->next=head;
list_length=0;
}
//----------------------------------------------------------
//--析构函数
//----------------------------------------------------------
~lk_list()
{}
//----------------------------------------------------------
//--在第i个位置之前插入一个元素
//----------------------------------------------------------
bool InsertNode(int i, T e)
{
if(i<1 || i>list_length+1) return false;
q=new Node<T>;
q->data=e;
p=head;
for(int j=0;j<i;j++)
{p=p->next;}
q->next=p;
q->prior=p->prior;
q->prior->next=q;
p->prior=q;
list_length++;
return true;
}
//-----------------------------------------------------------
//--在尾部插入一元素
//-----------------------------------------------------------
void InsertEnd(T e)
{
p=head;
q=new Node<T>;
q->data=e;
q->next=p;
q->prior=p->prior;
q->prior->next=q;
p->prior=q;
list_length++;
}
//-----------------------------------------------------------
//--删除第i个元素
//-----------------------------------------------------------
bool locate_delete(int i)
{
if(i<1 || i>list_length) return false;
p=head;
for(int j=0;j<i;j++)
{
p=p->next;
}
p->prior->next=p->next;
p->next->prior=p->prior;
delete p;
list_length--;
return true;
}
//------------------------------------------------------------
//--删除从位置i起第一个值为a的元素
//------------------------------------------------------------
bool value_delete(int i,T a)
{
if(i<1 || i>list_length) return false;
p=head;
for(int j=0;j<i;j++)
{
p=p->next;
}
for(j=i;j<=list_length;j++)
{
if(p->data==a){
p->prior->next=p->next;
p->next->prior=p->prior;
delete p;
list_length--;
return true;
}
else p=p->next;
}
return false;
}
//-------------------------------------------------------------
//--查找值为a的元素的位置,返回0表示没这个元素
//-------------------------------------------------------------
int LocateNode(T a)
{
p=head;
for(int i=1;i<=list_length;i++)
{
p=p->next;
if(p->data==a) return i;
}
return 0;
}
//--------------------------------------------------------------
//--返回第i个元素的值
//--------------------------------------------------------------
bool GetValue(int i,T &e)
{
p=head;
if(i>=1 && i<=list_length){
for(int j=0;j<i;j++) p=p->next;
e=p->data;
return true;
}
else return false;
}
//--------------------------------------------------------------
//--找出第i个元素的前驱的值
//--------------------------------------------------------------
bool PriorElem(int i,T &a)
{
p=head;
if(i>1 && i<=list_length){
for(int j=1;j<i;j++)
{
p=p->next;
}
a=p->data;
return true;
}
else return false;
}
//-------------------------------------------------------------
//--找出第i个元素的后继的值
//-------------------------------------------------------------
bool NextElem(int i,T &a)
{
p=head;
if(i>=1 && i<list_length){
for(int j=0;j<=i;j++)
{
p=p->next;
}
a=p->data;
return true;
}
else return false;
}
//------------------------------------------------------------
//--清空链表
//------------------------------------------------------------
void ClearList()
{
p=head->next;
for(int i=1;i<=list_length;i++)
{
q=p;
p=p->next;
delete q;
}
head->next=head;
head->prior=head;
list_length=0;
p=q=NULL;
}
//------------------------------------------------------------
//--返回链表的长度
//------------------------------------------------------------
int ListLength(){
return list_length;
}
//------------------------------------------------------------
//--删除链表的最后一个结点
//------------------------------------------------------------
bool DeleteEnd(){
p=head;
p->prior->prior->next=head;
p->prior=p->prior->prior;
delete p->prior;
list_length--;
}
//------------------------------------------------------------
//--将第i个结点前移一位
//------------------------------------------------------------
bool MovePrior(int i){
p=head;
if(i>1 && i<=list_length){
for(int j=0;j<i;j++)
{
p=p->next;
}
q=p->prior;
p->next->prior=q;
q->next=p->next;
p->next=q;
p->prior=q->prior;
q->prior=p;
p->prior->next=p;
return true;
}
else return false;
}
//------------------------------------------------------------
//--将第i个结点后移一位
//------------------------------------------------------------
bool MoveBack(int i){
p=head;
if(i>=1 && i<list_length){
for(int j=0;j<i;j++)
{
p=p->next;
}
q=p->next;
p->prior->next=q;
q->prior=p->prior;
p->prior=q;
p->next=q->next;
q->next=p;
p->next->prior=p;
return true;
}
else return false;
}
//-------------------------------------------------------------
//--判断是否为空
//-------------------------------------------------------------
bool ListEmpty()
{
if(list_length==0) return true;
else return false;
}
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -