c++单向链表的基础实现

c++单向链表的基础实现。
如何用c++程序风格,设计一条可以存储商品的名称,价格,生产日期这些基础信息的链表。

// 定义商品结构体

struct Product {

    string name; // 商品名称

    int price; // 商品价格

    string date; // 商品生产日期

};



// 定义单向链表节点结构体

struct Node {

    Product p; // 存储商品信息的结构体指针

    Node* next; // 指向下一个节点的指针

};



// 创建新节点并返回指向该节点的指针

Node* createNode(Product p) {

    Node* newNode = new Node();

    newNode->p = p;

    newNode->next = nullptr;

    return newNode;

}



// 在链表尾部添加新节点

void addNode(Node** head, Product p) {

    Node* newNode = createNode(p);

    Node* current = *head;

    Node* last = nullptr;

    

    while (current != nullptr) {

        last = current;

        current = current->next;

    }

    

    last->next = newNode;

}

struct Node
{
    Node *next;
    char name[100];
    float price;
    char date[20];
};

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7762809
  • 这篇博客你也可以参考下:C++:设计一个文本行编辑程序,先从输入文件中读取数据,然后根据行编辑命令处理,将结果写到输出文件中。
  • 除此之外, 这篇博客: C++(第三篇):C++的类和对象(中 —— 万字详解:六个默认成员函数,编译器的优化问题,日期类的实现)中的 七. 总结六个默认成员函数 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    学习完上文中的六个默认成员函数后,以Date日期类对象为例,我们再总结复习一下他们的特性和用法:

    默认成员函数功能常用写法编译器默认生成的
    构造函数完成成员变量的初始化Date (int year, int month , int day)对内置类型(基本类型)成员变量不处理,对自定义类型成员变量会去调用它的默认构造函数(不用传参的构造函数)进行初始化。
    析构函数完成成员变量的资源清理(delete、free)~Date()对内置类型成员不处理,因为没有资源需要清理。对自定义类型成员,会调用它的析构函数
    拷贝构造函数同类对象定义时的初始化Date(const Date& d),参数是本类类型对象按内存存储按字节序完成浅拷贝,对内置类型会完成浅拷贝,而对自定义类型成员会调用他的拷贝构造函数进行拷贝,若是不显示实现,也会进行浅拷贝。
    赋值重载函数已存在的同类对象赋值Date& operator=(const Date& d)赋值运算符在类中不显式实现时,编译器会生成一份默认的赋值运算符重载,完成对象按字节序的浅拷贝。::.*sizeof? :. 注意以上5个运算符不能重载。赋值运算符只能重载成成员函数
    取地址重载操作符函数对不是const修饰的对象取地址Date* operator&()
    const取地址重载操作符函数对是const修饰的对象取地址const Date* operator&()const

    构造析构的特性是类似的,我们不写编译器会对内置类型不处理,自定义类型会调用它的构造和析构函数处理

    拷贝构造赋值重载特性类似,内置类型会完成浅拷贝,自定义类型会调用他们的拷贝构造和赋值重载

  • 您还可以看一下 夏曹俊老师的C++ 设计模式原理与实战大全-架构师需备课程课程中的 简单工厂实用工程技术:C++对象动态创建技术与配置化开发小节, 巩固相关知识点
  • 以下回答来自chatgpt:

    非常抱歉,由于我是一个文本模型,无法运行代码。但是你可以将上述代码复制到一个C++的开发环境中,如Visual Studio或简单的在线编译器(如replit.com),以运行并查看结果。

    希望这可以帮助到你!如果你还有其他问题,请随时提问。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^