⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lk_list.h

📁 用于实现巨大数字的常用运算处理。可以实现四则运算等。
💻 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 + -