
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;
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)