#include <iostream> using namespace std; typedef int Elemtype1; typedef struct { Elemtype1 coef; int exp; }Elemtype; typedef struct LNode { Elemtype data; LNode *next; }*Poly; void Initlist(Poly &pa); void Input(Poly &pa); void Output(Poly &pa); void Add(Poly &pa,Poly &pb); int main() { Poly po1,po2; Initlist(po1); Initlist(po2); Input(po1); Input(po2); Output(po1); Output(po2); Add(po1,po2); Output(po1); } void Initlist(Poly &pa) { pa=new LNode; pa->next=pa; } void Input(Poly &pa) { LNode *r,*s; r=pa; Elemtype1 x; int z; cout<<"input coef,exp,exp==-1 will be end.\n"; while(1)//循环 { cin>>x>>z; if(z==-1) break;//如果z=-1 s=new LNode; s->data.coef=x; s->data.exp=z;//新节点s,data系数 为x,指数为z r->next=s;//r的后继为s r=s; } r->next=pa; } void Output(Poly &pa) { LNode *p=pa->next; bool start=true; while(p!=pa) { if(!start) { if(p->data.coef>0) cout<<"+"; } if(p->data.exp==0) cout<<p->data.coef; if(p->data.exp!=0&&!(p->data.coef==1||p->data.coef==-1)) cout<<p->data.coef; if(p->data.exp!=0&& p->data.coef==-1) cout<<"-"; if(p->data.exp!=0) { cout<<"X"; if(p->data.exp!=1) cout<<"^"<<p->data.exp; } start=false; p=p->next; } cout<<endl; } void Add(Poly &pa,Poly &pb) { LNode *p,*q,*r,*qd; p=pa->next; q=pb->next; r=pa; while(p!=pa&&q!=pb) { if(p->data.exp<q->data.exp) { r->next=p; r=p;p=p->next; } else if(p->data.exp>q->data.exp) { r->next=q; r=q;q=q->next; } else { p->data.coef=p->data.coef+q->data.coef; if(p->data.coef!=0) { r->next=p; r=p;p=p->next; } else { qd=p;p=p->next; delete qd; } qd=q; q=q->next; delete qd; } } if(p!=pa) r->next=p; else { while(q!=pb) { r->next=q; r=q;q=q->next; } r->next=pa; } qd=q; delete qd; }
时间: 2024-03-30 09:36:39 浏览: 103
这段代码实现了多项式的加法运算。代码中定义了两个结构体,一个是 Elemtype,包含多项式的系数和指数;另一个是 LNode,表示一个链表节点,其中 data 属性为 Elemtype 类型,next 属性是指向下一个节点的指针。使用 typedef 给 Elemtype 定义了一个别名 Elemtype1。
代码中定义了四个函数,分别是 Initlist、Input、Output 和 Add。Initlist 函数用于初始化一个多项式链表,Input 函数用于从标准输入中读取多项式的系数和指数,构建一个多项式链表。Output 函数用于将多项式链表输出到标准输出中,Add 函数用于将两个多项式链表相加,结果存储在第一个多项式链表中。
在主函数中,首先初始化两个多项式链表,然后调用 Input 函数读取多项式系数和指数,调用 Output 函数输出多项式链表,最后调用 Add 函数将两个多项式链表相加,并再次调用 Output 函数输出相加后的多项式链表。
需要注意的是,代码中多项式链表的头结点是一个空节点,next 属性指向第一个节点,最后一个节点的 next 属性指向头结点,形成一个循环链表。
相关问题
/ #include <iostream>#include <stdio.h>#define MAXSIZE 10typedef int ElemType;typedef struct{ ElemType *elem; int length;}SqList;
这段代码是在C++中定义了一个名为`SqList`的结构体,它是一个动态数组,用于存储元素。以下是各个部分的解释:
1. `#include <iostream>` 和 `#include <stdio.h>`:分别包含了输入输出流库iostream和标准输入输出库stdio.h,iostream通常用于控制台输出和用户交互,而stdio.h包含了一些基本的文件操作函数。
2. `#define MAXSIZE 10`:这是一个预处理器宏定义,表示动态数组的最大容量是10个元素。
3. `typedef int ElemType;`:这行定义了一个新的类型别名`ElemType`,将整型(int)简称为`ElemType`,以便于在后面的代码中引用。
4. `typedef struct` 开始定义了一个名为`SqList`的结构体。结构体是一种自定义的数据类型,可以组合不同类型的数据成员。
5. `{ ... }` 内部包含了结构体的两个数据成员:
- `ElemType *elem;`:这是一个指向`ElemType`类型的指针,用于存储数组元素的地址。
- `int length;`:表示数组的实际长度,用于记录有多少个有效元素。
6. 结构体结束的}``关闭了定义。
要创建这个结构体的对象并操作它,你可以按照以下方式使用:
```cpp
SqList myList;
myList.elem = new ElemType[MAXSIZE]; // 分配内存
myList.length = 5; // 设置初始长度
// 使用 elem 指针存储和访问元素
myList.elem[0] = 10;
// 等待实际应用中对length的操作
```
#include <iostream> #include <cstdlib> using namespace std; // self-referential structure struct listNode { char data; // each listNode contains a character struct listNode *nextPtr; // pointer to next node }; typedef struct listNode ListNode; // synonym for struct listNode typedef ListNode *ListNodePtr; // synonym for ListNode* // prototypes void insert(ListNodePtr *sPtr, char value); char delete(ListNodePtr *sPtr, char value); int isEmpty(ListNodePtr sPtr); void printList(ListNodePtr currentPtr); void instructions(void);
这段代码存在两个问题:
1. 第一行代码 "#include <iostream> #include <cstdlib>" 中间缺少了换行符,应该写成 "#include <iostream>\n#include <cstdlib>" 以便阅读。
2. C++ 中的 "delete" 是一个保留关键字,不能用作函数名。因此,函数名中的 "delete" 应该改成其他的名字,例如 "deleteNode"。
阅读全文