数据结构1——稀疏多项式乘法计算器

本文介绍了如何使用C++实现一元稀疏多项式乘法计算器,涵盖struct结构体、构造函数、函数返回指针变量、C++内存分配和指针问题。内容包括typedef与struct的区别、结构体初始化、构造函数的应用、函数返回局部指针的条件,以及动态内存分配和释放的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一元稀疏多项式简单计算器

(1)输入并建立多项式;
(2)输出多项式,输出形式为整数序列: n,c1,e1,c2,e2,…,cn,en,其中n是多项式的项数,ci和ei分别是第i项的系数和指数,序列按指数降序排列。
(3)多项式a与多项式b相乘,建立多项式。
在写代码的过程中,对其中没有掌握的各个知识点的梳理和记录。

1、struct结构体

typedef struct Polynomial{
            float coef; //系数
            int expn; //指数
            struct Polynomial *next;
            //Polynomial(double a, int b){coef = a; expn = b;}
            Polynomial(){};
        }Polyn,*Poly;
struct P{
......
}PO,*PO2
PO *p 与 PO2 p 等价,都是指向P的指针。

typedef 和 struct
 在c++中如果用typedef的话,会造成区别:

struct   Student   
    {   
    int   a;   
    }stu1;//stu1是一个Student变量  

    typedef   struct   Student2   
    {   
    int   a;   
    }stu2;//stu2是一个结构体类型=struct Student  

    使用时可以直接访问stu1.a
    但是stu2则必须先 stu2 s2;
    然后 s2.a=10;

在C++中,后者可以有
1. struct Student2 变量名
2. Student2 变量名
3. stu2 变量名

2、struct构造函数

结构体实例和类实例的初始化方法完全相同,二者都可以应用于继承层次中。不同点是结构体默认成员为public,而类默认成员是private。

若类和结构体所有数据成员均为public型,可采取如下带花括号形式进行初始化。
注意:
① 不论值的个数多少,都必须使用花括号定界
② 未指定值的数据成员编译器会自动初始化为默认值
③ 这种初始化对象方式,要求所有数据成员必须为public型
④ 这种初始化对象方式,要求类中不能编写任何构造函数

添加了构造函数的struct相当于成员全部public的类,而类的实例化必须通过构造函数,所以不能再使用{}初始化。

3、函数返回指针变量

C++允许函数返回局部指针,前提是指针指向的地址在函数退出后仍然有效。这涉及到C++内存分配问题。如果指针指向的内容是局部数组等存在与栈内存中的,则函数执行完后内容被销毁。

4、C++内存分配

C++编译器将计算机内存分为代码区和数据区。
数据区分配方式如下图所示:

这里写图片描述

不涉及动态分配的对象有严格定义的生存期。全局对象在程序启动时分配,程序结束时销毁。局部对象,在我们进入其定义所在的程序块时被创建,在程序结束时销毁。局部static对象在第一次使用前分配,在程序结束时销毁。

动态分配的对象的生存期与它们在哪里创建无关,只有显式地被释放时,才会销毁。

void f() {
int* p=newint[5];
}
delete []p;

5、指针问题

1)用malloc申请多个同名指针,或new多个同名指针,指针指向最后一次开辟的空间。
2)复制指针时复制指针本身所含的地址值,而不会复制指针指向的内容。

3)void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针。如果分配失败,则返回一个空指针(NULL)。
关于分配失败的原因,应该有多种,比如说空间不足就是一种。
void free(void *FirstByte): 该函数是将之前用malloc分配的空间还给程序或者是操作系统,也就是释放了这块内存,让它重新得到自由。

4)free 和 delete 释放的都是指针指向的内存。指针是一个变量,只有程序结束时才被销毁。

贴一下代码

#include <iostream>
#include <string>
#include<sstream>
#include <vector>
using namespace std;


typedef struct Polynomial{
    double coef; //系数
    int expn; //指数                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值