这是我第一次写博客,肯定会有诸多不足,还请见谅。同时我也是想记录下来,以便以后查询。接下来是简单的介绍:
-
这是我数据结构课程的一个小作业,要求是采用一种数据结构与实际生活相结 合,自由发挥写一个比较有用的小程序。
-
算法部分采用了单链表实现,参考了一些网上的代码。
程序结果展示
1、主界面
2、主要功能和操作方式介绍
1、操作方式介绍
-
输入:需要分为两个多项式分别输入。点击L1进行第一个多项式的输入,同理第二个多项式也是。每次只能输入一个多项式,且在输入一个多项式时一次只能输入一项,输入一项后点击input即为输入成功,期间可点击C退格。接着可继续输入第二个多项式或进行计算
-
输出:计算功能包括多项式加法(+),多项式减法(-),多项式乘法(*),多项式求导(d(L1),d(L2))。首先点击COMPUTE后输出栏可显示,点击运算符后显示相关式子,点击等于即可得出相关结果。注:运算一次后需要点击清空AC
2、功能展示
- 输入:
3. 计算:
①加法:
②减法:
③乘法:
④求导:
3、代码部分
- 头文件widget.h:
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <iostream>
using namespace std;
typedef struct
{
double coef;//系数
int expn;//指数
}Term;
typedef struct ploynomial
{
Term term;
ploynomial *next;
}ploynomial,*LinkList;
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = nullptr);
~Widget();
void InitList(LinkList &L);
int cmp(Term a,Term b);
void insertNode(LinkList &L,Term e);
void visitList(LinkList L, QString& string);
void addPolyn(LinkList &l,LinkList l1,LinkList l2);
void multiplyPolyn(LinkList &l,LinkList l1,LinkList l2); //返回L1*L2
void SubtracatPolyn(LinkList &l,LinkList l1,LinkList l2); //返回L1-L2的结果
void derivativePolyn(LinkList &l,LinkList l1);
private slots:
void on_pB_number1_clicked();
void on_pB_number2_clicked();
void on_pB_number3_clicked();
void on_pB_number4_clicked();
void on_pB_number5_clicked();
void on_pB_number6_clicked();
void on_pB_number7_clicked();
void on_pB_number8_clicked();
void on_pB_number9_clicked();
void on_pB_number0_clicked();
void on_pB_charDot_clicked();
void on_pB_charPower_clicked();
void on_pB_unNumber_clicked();
void on_pB_delete_clicked();
void on_pB_deleteAll_clicked();
void on_pB_positive_clicked();
void on_pB_negetive_clicked();
void on_pB_Input_clicked();
void on_pB_l1_clicked();
void on_pB_l2_clicked();
void on_pB_compute_clicked();
void on_pB_equals_clicked();
void on_pB_multiply_clicked();
void on_pB_Derivatives_clicked();
void on_pB_Derivatives2_clicked();
private:
Ui::Widget *ui;
public:
LinkList L1,L2,L3;
};
#endif // WIDGET_H
- 源文件widget.cpp,这部分代码500行左右,看似多,但多数都是类似的。
#include "widget.h"
#include "ui_widget.h"
#include "QString"
#include <QMessageBox>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
ui->showPolyn->setReadOnly(true);
ui->showPolyn2->setReadOnly(true);
ui->Result->setReadOnly(true);
this->ui->showPolyn->setEnabled(false);
this->ui->showPolyn2->setEnabled(false);
this->ui->Result->setEnabled(false);
InitList(L1);
InitList(L2);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pB_number1_clicked()
{
if(this->ui->showPolyn->isEnabled())
this->ui->showPolyn->insert("1");
else if(this->ui->showPolyn2->isEnabled())
this->ui->showPolyn2->insert("1");
}
void Widget::on_pB_number2_clicked()
{
if(this->ui->showPolyn->isEnabled())
this->ui->showPolyn->insert("2");
else if(this->ui->showPolyn2->isEnabled())
this->ui->showPolyn2->insert("2");
}
void Widget::on_pB_number3_clicked()
{
if(this->ui->showPolyn->isEnabled())
this->ui->showPolyn->insert("3");
else if(this->ui->showPolyn2->isEnabled())
this->ui->showPolyn2->insert("3");
}
void Widget::on_pB_number4_clicked()
{
if(this->ui->showPolyn->isEna