线性表归并运算

该博客介绍了一个使用C语言实现线性表归并的程序。通过初始化顺序表,为顺序表L1和L2赋值,然后将两个非递减排序的线性表La和Lb归并成新的线性表Lc,保持数值非递减排列。程序中包含了初始化、赋值、归并和遍历线性表的功能。
摘要由CSDN通过智能技术生成
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define INITSIZE 100 //线性表存储空间的初始分配量
#define LISTINCREMENT 10 //线性表存储空间的分配增量
#define OK 1
#define ERROR 0
#define OVERFLOW -1
typedef int ElemType;
typedef int Status;
typedef struct{
 ElemType *elem;
 int length;
 int listsize;
}SqList;
 
 
Status InitList(SqList &L)
{//构造一个空的顺序表L。
 L.elem = (ElemType * )malloc(INITSIZE*sizeof(ElemType));
 if(! L.elem)exit(OVERFLOW);
 L.length = 0;
 L.listsize = INITSIZE;
 return(OK);
}
void Assign(SqList &L)
{//为顺序表L的各元素赋值
 int i,N;
 printf("Please input the Number of the SqList:");
 scanf("%d",&N);
 printf("Please input
好的,我来为您提供一份C语言代码,实现一元稀疏多项式的计算器,包含多项式的加法运算。代码如下: ```c #include<stdio.h> #include<stdlib.h> #define MAX 100 typedef struct{ float coef; // 系数 int expn; // 指数 }Elem; typedef struct{ Elem data[MAX+1]; // 线性表存储一元稀疏多项式 int len; // 长度 }Poly; void InitPoly(Poly *p){ // 初始化多项式 p->len = 0; } void CreatePoly(Poly *p){ // 创建多项式 int n, i; printf("请输入多项式项数:"); scanf("%d", &n); printf("请按照指数递减的顺序输入每一项的系数和指数:\n"); for(i = 0; i < n; i++){ scanf("%f %d", &p->data[i].coef, &p->data[i].expn); } p->len = n; } void PrintPoly(Poly p){ // 打印多项式 int i; for(i = 0; i < p.len; i++){ printf("%.1fx^%d", p.data[i].coef, p.data[i].expn); if(i < p.len-1){ printf("+"); } } printf("\n"); } void InsertPoly(Poly *p, Elem e){ // 插入一项 int i, pos; pos = p->len; for(i = 0; i < p->len; i++){ if(p->data[i].expn == e.expn){ // 指数相同,系数相加 p->data[i].coef += e.coef; break; } if(p->data[i].expn < e.expn){ // 找到插入位置 pos = i; break; } } if(i == p->len){ // 未找到相同指数的项,插入新项 p->data[pos] = e; p->len++; } } Poly AddPoly(Poly pa, Poly pb){ // 多项式加法 Poly pc; InitPoly(&pc); int i = 0, j = 0; while(i < pa.len && j < pb.len){ if(pa.data[i].expn == pb.data[j].expn){ // 同次项相加 Elem e; e.coef = pa.data[i].coef + pb.data[j].coef; e.expn = pa.data[i].expn; if(e.coef != 0){ // 系数不为0,插入新项 InsertPoly(&pc, e); } i++; j++; } else if(pa.data[i].expn > pb.data[j].expn){ // pa中较高次项 InsertPoly(&pc, pa.data[i]); i++; } else{ // pb中较高次项 InsertPoly(&pc, pb.data[j]); j++; } } while(i < pa.len){ // 将pa中剩余项插入pc InsertPoly(&pc, pa.data[i]); i++; } while(j < pb.len){ // 将pb中剩余项插入pc InsertPoly(&pc, pb.data[j]); j++; } return pc; } int main(){ Poly pa, pb, pc; InitPoly(&pa); InitPoly(&pb); InitPoly(&pc); printf("***请输入第一个多项式***\n"); CreatePoly(&pa); printf("***请输入第二个多项式***\n"); CreatePoly(&pb); printf("***第一个多项式***\n"); PrintPoly(pa); printf("***第二个多项式***\n"); PrintPoly(pb); pc = AddPoly(pa, pb); printf("***相加后的多项式***\n"); PrintPoly(pc); return 0; } ``` 该代码实现了一元稀疏多项式的计算器,并且实现了多项式的加法运算,将多项式加法运算转化为线性表的条件归并运算。您可以根据需要进行修改和完善。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值