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

📄 实习2.cpp

📁 从文件读进2个不限制长度的多项式相加
💻 CPP
字号:
#include<iostream.h>
#include<stdio.h>
#include<stdlib.h>
struct data
{
	int n;
	int e;
	data * next;
	data * pre;
};
void delZero(data * & head)
{
	data * p = head->next , * junk;
	while(p)
	{
		if(p->n == 0)
		{
			p->pre->next = p->next;
			p->next->pre = p->pre;
			junk = p;
			p = p->next;
			delete junk;
		}
		else
		{
			p = p->next;
		}
	}
}
void showResult(data * & FirstHead , data * & SecondHead)
{
	data * FirstP = FirstHead->next , * SecondP = SecondHead->next;
	while(FirstP)
	{
		cout<<FirstP->n<<" "<<FirstP->e<<" ";
		FirstP = FirstP->next;
	}
	cout<<endl;
	while(SecondP)
	{
		cout<<SecondP->n<<" "<<SecondP->e<<" ";
		SecondP = SecondP->next;
	}
	cout<<endl;
}
void addElement(data * FirstElement , data * & SecondElement)
{
	FirstElement->n += SecondElement->n;
}
void addLink(data * & FirstHead , data * & SecondHead)
{
	data * FirstP = FirstHead->next , * SecondP = SecondHead->next;
	data * temp, * PreRecord;
	while(SecondP)
	{
		if(FirstP && SecondP)
		{
			if(FirstP->e == SecondP->e)
			{
				addElement(FirstP , SecondP);
				PreRecord = FirstP;
				FirstP = FirstP->next;
				SecondP = SecondP->next;
			}
			else if(FirstP->e < SecondP->e)
			{
				PreRecord = FirstP;
				FirstP = FirstP->next;
			}
			else if(FirstP->e > SecondP->e)
			{
				temp = new data;
				temp->e = SecondP->e;
				temp->n = SecondP->n;
				FirstP->pre->next = temp;
				temp->pre = FirstP->pre;
				temp->next = FirstP;
				FirstP->pre = temp;
				SecondP = SecondP->next;
			}
		}
		else if(!FirstP)
		{
			temp = new data;
			temp->e = SecondP->e;
			temp->n = SecondP->n;
			PreRecord->next = temp;
			temp->pre = PreRecord;
			PreRecord = PreRecord->next;
			SecondP = SecondP->next;
		}
	}
}

void main()
{
	data * FirstHead = new data , * SecondHead = new data;
    data * temp1 = new data , * temp2 = new data , * p1 , * p2;
	FILE * inf;
	int In1,In2;
	FirstHead->next = temp1;
	temp1->pre = FirstHead;
	SecondHead->next = temp2;
	inf = fopen("实习2数据.txt" , "r");
	fscanf(inf , "%d" , &In1);
	fscanf(inf , "%d" , &In2);
	while(!(In1 == 0 && In2 == 0))
	{
		temp1->n = In1;
		temp1->e = In2;
        p1 = temp1;
		temp1 = new data;
		p1->next = temp1;
		temp1->pre = p1;
        fscanf(inf , "%d" , &In1);
		fscanf(inf , "%d" , &In2);
	}
	p1->next = NULL;
	fscanf(inf , "%d" , &In1);
	fscanf(inf , "%d" , &In2);
	while(!(In1 == 0 && In2 == 0))
	{
		temp2->n = In1;
		temp2->e = In2;
        p2 = temp2;
		temp2 = new data;
		p2->next = temp2;
        fscanf(inf , "%d" , &In1);
		fscanf(inf , "%d" , &In2);
	}
	p2->next = NULL;
	fclose(inf);
    addLink(FirstHead , SecondHead);
	delZero(FirstHead);
	showResult(FirstHead,SecondHead);
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -