结构体和链表

1)简单的来说,结构体就是一个可以包含不同数据类型的一个结构,它是一种可以自己定义的数据类型,它的特点和数组主要有两点不同,首先结构体可以在一个结构中声明不同的数据类型,第二相同结构的结构体变量是可以相互赋值的,而数组是做不到的,因为数组是单一数据类型的数据集合,它本身不是数据类型(而结构体是), 数组名称是常量指针,所以不可以做为左值进行运算,所以数组之间就不能通过数组名称相互复制了,即使数据类型和数组大小完全相同。
定义结构体使用struct修饰符,例如:
struct test
{
float a;
int b;
};
2)链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer)。由于不必须按顺序存储, 链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而顺序表相应的时间复杂度分别是O(logn)和O(1)。
          在计算机科学中,链表作为一种基础的数据结构可以用来生成其它类型的数据结构。链表通常由一连串节点组成,每个节点包含任意的实例数据(data fields)和一或两个用来指向明上一个/或下一个节点的位置的链接("links")。链表最明显的好处就是,常规数组排列关联项目的方式可能不同于这些数据项目在记忆体或磁盘上顺序,数据的访问往往要在不同的排列顺序中转换。而链表是一种自我指示数据类型,因为它包含指向另一个相同类型的数据的指针(链接)。 链表允许插入和移除表上任意位置上的节点,但是不允许随机存取。链表有很多种不同的类型:单向链表,双向链表以及循环链表。
一个基于C语言的餐馆点菜系统可以利用结构体链表来实现。在这样的系统中,结构体可以用来定义菜品和订单的信息,而链表则用来管理这些信息,使系统能够处理多个菜品和订单。 首先,我们定义一个菜品的结构体,它可能包含菜品名称、价格、数量等信息。例如: ```c typedef struct Dish { char name[50]; // 菜品名称 float price; // 菜品价格 int quantity; // 菜品数量 struct Dish *next; // 指向下一个菜品的指针 } Dish; ``` 接着,我们可以通过链表将多个菜品连接起来,形成一个菜品的菜单。同样,我们也可以为顾客的订单创建一个类似的结构体链表结构。 在点菜系统中,我们可能需要执行以下操作: 1. 添加菜品到菜单。 2. 允许顾客根据菜单添加菜品到他们的订单。 3. 更新订单中的菜品数量和价格。 4. 计算订单总价。 链表提供了动态数据结构的优点,比如可以随时添加或删除节点,而不需要事先知道数据的总量。这样,即使在运行时,顾客点的菜品数量增加或减少,系统也能够灵活应对。 例如,如果顾客想要添加一个新菜品到订单中,我们可以创建一个新的Dish结构体实例,并将其插入到订单链表的相应位置。如果顾客想要修改某个菜品的数量,我们可以在链表中找到对应的节点,并更新其数量和总价。 系统最终会计算所有订单项的总价,并可能打印出一个顾客的点菜单,包括所有菜品的名称、数量和价格。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值