利用顺序表实现多项式相加C++

利用顺序表实现多项式相加C++,第1张

class="superseo">数据结构:顺序表的应用

整体思路: 创建三个顺序表,表一和表二存储数据——进行判断,无论是否指数相等都把表一的数据逐项存到表三(如果相等就把系数相加再存)——把表二中对应行的数据删除,循环完后的表二剩下的元素就是和表一中指数不相等的,再把这些元素加到表三——通过函数实现多项式的每一项按照指数大小进行排序——最后输出结果。


(记录计算机菜鸟第一次写文章,讲真的代码一定要多写,深刻领悟到血泪教训了)

#include 
#include 
using namespace std;
#define MAXSIZE 100

typedef struct//顺序表中元素的类型,描述多项式中每一项的系数和指数
{
    int a;//指数
    int b;//系数
}Elem;
typedef struct//顺序表的存储结构
{
    Elem *elem;
    int length;
}Sqlist;

void InitList(Sqlist *list);//初始化一个空表
void CreatList(Sqlist *list);//创建多项式
void ListDelete(Sqlist* L, int i);
void BubbleSort(Sqlist* L);//指数排序
void add(Sqlist *p1,Sqlist *p2,Sqlist *p_res);//实现多项式相加
void print(Sqlist *list);//输出相加结果

int main()
{
    Sqlist list1,list2,result;
    Sqlist *p1,*p2,*p_res;

    p1=&list1;
    p2=&list2;
    p_res=&result;

    int A;
    cin>>A;//实现多组数据的输入
    for(int i=0;i

1.初始化和创建顺序表

void InitList(Sqlist *list){
    list->elem=new Elem[MAXSIZE];
    list->length=0;
}
void CreatList(Sqlist *list)
{
    cin>>list->length;//输入多项式的项数
    for(int i=0; ilength; i++){
        cin >> list->elem[i].a >> list->elem[i].b;//输入对应的指数和系数
    }
}

2.实现多项式相加

void add(Sqlist *p1,Sqlist *p2,Sqlist *p_res)
//进行多项式相加时,先逐个判断相同项,当有相同项时,进行相加,然后放入p_res,然后删掉原表中的元素
//若无出现相同项,则无 *** 作,等到判断结束后再将表中所剩的元素加入到p_res中
{
    int k = 0;
      for(int i = 0;i < p1->length; i++){
        for (int j = 0; j < p2->length; j++) {
            if (p1->elem[i].a == p2->elem[j].a) { //指数相同,系数相加
                p_res->elem[k].b = p1->elem[i].b + p2->elem[j].b;
                p_res->elem[k].a = p1->elem[i].a;
                ListDelete(p1, i);
                ListDelete(p2, j);
                k++;
                p_res->length++;
                i--;
                j--;
            }
        }
 	}
    for (int i = 0; i < p1->length; i++) {
        p_res->elem[k] = p1->elem[i];
        p_res->length++;
        k++;
    }
	for(int j = 0;j < p2->length;j++ ){
		p_res->elem[k] = p2->elem[j];
        p_res->length++;
  		k++;
	}
}

3.删除表中元素

void ListDelete(Sqlist *L, int i) {
    for (int j = i; j < L->length; j++) {
        L->elem[j] = L->elem[j + 1];

    } --L->length;//注意表长减小的位置要放在for循环外!
}

4.按指数大小进行排序(利用冒泡排序)

void BubbleSort(Sqlist* L) {
    int m = L->length - 1;
    bool flag = 1;
    while ((m > 0) && (flag == 1)) {
        flag = 0;
        for (int j = 0; j < m; j++) {
            if (L->elem[j].a > L->elem[j + 1].a) {
                flag = 1;
                Elem t = L->elem[j];
                L->elem[j] = L->elem[j + 1];
                L->elem[j + 1] = t;
            }
        }
        --m;
    }
}

5.输出结果(注意要删去系数为0的项)

void print(Sqlist *list)
{
     if(list->elem[0].b==0)
        ListDelete(list,0);
    for(int i=0; ilength; i++){
        if(i != 0){
            if(list->elem[i].b > 0){
                cout<<"+";
            }
            else if(list->elem[i].b < 0){
                cout<<"-";
            }
            coutelem[i].a;
    }
            else{
            cout<elem[i].b<<"x^"<elem[i].a;
        }
    }
    cout << endl;
}

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/584931.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-04-12
下一篇2022-04-12

发表评论

登录后才能评论

评论列表(0条)