C++双链表设计无符号大数类

本文档展示了如何使用C++的双链表结构实现无符号大数类,包括构造函数、析构函数、加法、减法、比较和显示等功能。通过移动赋值、拷贝构造和析构函数确保内存管理正确,避免内存泄漏。同时,提供了读入、显示及比较大数的实例操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本题要求采用双链表实现无符号大数类,要求实现无符号大数类拷贝控制函数,要求支持无符号大数的加、减、比较、显示等运算,加、减结果必须返回无符号大数,便于进一步参加运算,不可存在内存泄漏。

不使用动态分配扣40%,存在内存泄漏最多扣20%,程序结构要合理,命名规范,程序结构不合理最多扣20%,课内上机没有完成扣20%。

#include<iostream>
#include<bits/stdc++.h>
using namespace std;
class Unsigned_Big_Number{
   
public:
	Unsigned_Big_Number(); //构造函数 
	~Unsigned_Big_Number(); //析构函数 
//	Unsigned_Big_Number & operator = (const Unsigned_Big_Number &rhs); //复制赋值
	Unsigned_Big_Number & operator = (Unsigned_Big_Number && rhs) noexcept;  //移动赋值 
//	Unsigned_Big_Number(const Unsigned_Big_Number &);  //拷贝构造 
	Unsigned_Big_Number(Unsigned_Big_Number &&)noexcept;  //移动构造 
	void read();  //读入数据 
	void display()const;  //显示并换行 
	void display(int x)const; //重载,显示不换行 
	int compare(const Unsigned_Big_Number &rhs)const;  //比较大小 
	void Compare_And_Display(const Unsigned_Big_Number &rhs);  //比较大小后显示 
	Unsigned_Big_Number plus(const Unsigned_Big_Number &rhs);  //加法 
	Unsigned_Big_Number subtraction(const Unsigned_Big_Number &rhs);  //减法 
	
private:
struct Node{
   
	int data;
	struct Node *pre;
	struct Node *nxt;
}*m_pHead,*m_pTail;

int m_len;   //链表长度 
};
//构造函数 
Unsigned_Big_Number::Unsigned_Big_Number(){
   
	m_pHead = new Node;
	m_pHead ->nxt =NULL;
}
//析构函数 
Unsigned_Big_Number::~Unsigned_Big_Number(){
   
	while(m_pHead){
   
		Node *p=m_pHead;
		m_pHead=p->nxt;
		delete p;
	} 
}
//拷贝构造
//Unsigned_Big_Number::Unsigned_Big_Number(const Unsigned_Big_Number &rhs){
   
//	m_pHead = new Node;
//	Node *last = m_pHead;
//	Node *p=rhs.m_pHead->nxt;
//	while(p){
   
//		Node*q = new Node;
//		q->data = p->data;
//		last->nxt =q;
//		q->pre = last;
//		last = q;
//		p=p->nxt;
//	}
//	last->nxt=NULL;
//}
//复制赋值 
//Unsigned_Big_Number&Unsigned_Big_Number::operator = (const Unsigned_Big_Number &rhs){
   
//	Unsigned_Big_Number tmp(rhs);
//	Node *t = m_pHead;
//	m_pHead = tmp.m_pHead;
//	tmp.m_pHead = t;
//	return *this;		
//}
//移动赋值
Unsigned_Big_Number & Unsigned_Big_Number::operator =(Unsigned_Big_Number &&rhs)noexcept{
   
	Node *p = this->m_pHead;
	this->m_pHead = rhs.m_pHead;
	rhs.m_pHead=p; 
	p = this->m_pTail; 
	this->m_pTail = rhs.m_pTail;
	rhs.m_pTail = p;
	this->m_len = rhs.m_len;
	return *this;
}  
 
//移动构造函数
Unsigned_Big_Number::Unsigned_Big_Number(Unsigned_Big_Number &&rhs)noexcept{
   
	m_pHead = rhs.m_pHead;
	rhs.m_pHead = NULL; 
}

//读入函数
void Unsigned_Big_Number::read(){
   
	string s;
	cin>>s;
	Node *p=m_pHead;
	int i =
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值