结构简介
函数包含:多项式的读入与写入、多项式选择排序、多项式相加
#include <bits/stdc++.h>
using namespace std;
struct DATA{
int a;
int b;
};
struct NODE{
DATA data;
NODE* next;
};
NODE* file_read(const char ad[]){
//读入数据
FILE* f = NULL;
int a, b;
NODE *head = NULL;
f = fopen(ad, "r");
while(fscanf(f, "%d,%d", &a, &b) == 2){
NODE* newNode = new NODE;
newNode->data.a = a;
newNode->data.b = b;
newNode->next = head;
head = newNode;
}
fclose(f);
return head;
}
void Insert_sort(NODE** head){
if((*head) == NULL || (*head)->next == NULL) return;
NODE* sorted = NULL;
NODE* currentNode = *head;
*head = NULL;
while(currentNode != NULL){
NODE* next = currentNode->next;
if(sorted == NULL || sorted->data.b > currentNode->data.b){
currentNode->next = sorted;
sorted = currentNode;
}else{
NODE* p = sorted;
while(p->next != NULL && p->next->data.b < currentNode->data.b) p = p->next;
currentNode->next = p->next;
p->next = currentNode;
}
currentNode = next;
}
*head = sorted;
}
NODE* creatNode(int a, int b){
NODE* p = new NODE;
p->data.a = a;
p->data.b = b;
p->next = NULL;
return p;
}
NODE* addLinks(NODE* head1, NODE* head2){
NODE* ans = NULL, *tem;
NODE *i = head1, *j = head2;
while(i != NULL && j != NULL){
int ia = i->data.a, ib = i->data.b;
int ja = j->data.a, jb = j->data.b;
if(ib < jb){
tem = creatNode(ia, ib);
tem->next = ans;
ans = tem;
i = i->next;
}
if(ib == jb){
tem = creatNode(ia + ja, ib);
i = i->next;
j = j->next;
tem->next = ans;
ans = tem;
}
if(ib > jb){
tem = creatNode(ja, jb);
tem->next = ans;
ans = tem;
j = j->next;
}
}
while(i != NULL){
tem = creatNode(i->data.a, i->data.b);
tem->next = ans;
ans = tem;
i = i->next;
}
while(j != NULL){
tem = creatNode(j->data.a, j->data.b);
tem->next = ans;
ans = tem;
j = j->next;
}
return ans;
}
void outputFile(NODE* head){
FILE* f = NULL;
f = fopen("C:\\Users\\王贺祥\\Desktop\\output.txt", "w");
if(f == NULL){
cout << "open file error" << endl;
return;
}
NODE* p = head;
while(p != NULL){
if(p != head){
fprintf(f, "+");
cout << '+';
}
fprintf(f,"%dx^%d", p->data.a, p->data.b);
cout << p->data.a << "x^" << p->data.b;
p = p->next;
}
fclose(f);
}
int main(){
char address1[100] = "C:\\Users\\王贺祥\\Desktop\\input1.txt";
char address2[100] = "C:\\Users\\王贺祥\\Desktop\\input2.txt";
NODE* head1 = file_read(address1);
NODE* head2 = file_read(address2);
Insert_sort(&head1);
Insert_sort(&head2);
NODE* ans = addLinks(head1, head2);
//输出
NODE* p = ans;
while(p != NULL){
if(p != ans)
cout << '+';
cout << p->data.a << "x^" << p->data.b;
p = p->next;
}
cout << endl << "file:" << endl;
//写入文件
outputFile(ans);
//释放内存
p = ans;
NODE* tem;
while(p != NULL){
tem = p;
p = p->next;
delete tem;
}
return 0;
}