资源简介

课程设计 任意长的整数加法 C++ 数据结构

资源截图

代码片段和文件信息

#include
#include
#include
using namespace std;
struct linkNode
{
int data;                  //记录每个节点的整数(小于10000)
linkNode *next;            //记录下一个节点的地址
linkNode *pre;             //记录前一个节点的地址
};
class linkList
{
private:
linkNode *head0*head1;      //head0,head1分别记录两个整数链表的头指针
linkNode *currptr;
linkNode *result;            //result记录结果链表的头指针
public:
linkList();                   //构造函数,初始化链表
~linkList();                 //析构函数,释放空间
void Creat(string a);        //引入字符串,创立两个链表,分别表示两个整数
void Add();                  //实现两个整数相加
void Display();              //显示结果
void addtwo();            
//节点多的作为被加数,少的作为加数,实现整数绝对值大的加小的
};





int sum(int n);
linkList::linkList()                //构造函数,初始化链表
{
head0=new linkNode;           
//申请一个空间记录整数的符号和节点数
head1=new linkNode;
head0->next=head0;
head0->pre=head0;               //初始化链表,建立双向循环链表
head1->next=head1;
head1->pre=head1;
      result=new linkNode;
result->next=result;
result->pre=result;
currptr=NULL;
}

linkList::~linkList()                        //析构函数,释放空间
{
linkNode *p1=head0*p2=head1*p3=result;  
//三个指针分别指向三条链表的头指针
while(p1!=p1->pre)                        
{
    p1->pre->next=p1->next;
    p1->next->pre=p1->pre;
    currptr=p1;
    p1=p1->next;
    delete currptr;
}
while(p2!=p2->pre)                        //逐个删除节点,释放空间

    p2->pre->next=p2->next;
    p2->next->pre=p2->pre;
    currptr=p2;
    p2=p2->next;
    delete currptr;
}
while(p3!=p3->pre)
{
    p3->pre->next=p3->next;
    p3->next->pre=p3->pre;
    currptr=p3;
    p3=p3->next;
    delete currptr;
}
// delete p1;
// delete p2;
// delete p3;
}

void linkList::Creat(string a)                   //引入字符串,创立两个链表,分别表示两个整数
{
int i=0j=0m=0n=0k=0l=0s=0w=0;      
//i记录字符串,j记录加数节点数;s记录被加数节点数
                //w标记字符串中的‘-’号
             //k记录字符串中的字符转化为整数的值,l使每个节点记录4位
while(a[m]!=‘;‘) m++;            //m记录字符串中被加数的字符数
    n=m;                                
while(a[n]!=‘\0‘) n++;           //n记录字符串的总字符数
if(a[0]==‘-‘)
{
    head0->data=(-1);              //记录整数符号
    w=1;
}
else {head0->data=1;}
for(i=m-1;i>=w;i--)             
{
    if(a[i]!=‘‘)                   //把字符转化为整数
    {
     k+=(a[i]-‘0‘)*sum(l);
     l++;
    }
    if(a[i]==‘‘||i==w)
    {
     currptr=new linkNode;             //把整数存到双向循环链表中
     currptr->data=k;
     currptr->next=head0;
     currptr->pre=head0->pre;
     head0->pre->next=currptr;
     head0->pre=currptr;
     head0=currptr; 
     s++;                               //节点数加1
     k=0;                               //重新初始化k和l
     l=0;                             
    }
}
      head0->pre->data*=s;                     //存储整数符号和节点数


//与建第一个整数链表一样,建立第二个整数链表head1
k=0;l=0;

if(a[m+1]==‘-‘)
{
    head1->data=(-1);
    m++;
}
else 
    head1->data=1;
for(i=n-1;i>m;i--)
{
    if(a[i]!=‘‘)
    {
     k+=(a[i]-‘0‘)*sum(l);
     l++;
    }
    if(a[i]==‘‘||i==m

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2012-06-04 14:10  任意长的整数加法\
     文件        9765  2011-01-06 13:54  任意长的整数加法\25.任意长的整数加法.cpp
     文件      170496  2012-06-04 14:10  任意长的整数加法\25.任意长的整数加法.doc

评论

共有 条评论