c语言单向链表存储快递信息
时间: 2025-05-04 11:23:45 浏览: 20
在C语言中使用单向链表来存储快递信息是一个很常见的应用场景。下面将详细介绍如何实现这个功能。
### 单向链表简介
单向链表是一种线性数据结构,它由一系列节点组成,每个节点包含两部分:一部分用于存放用户需要保存的数据;另一部分则是指向下个元素位置的指针(如果是最末尾,则指向NULL)。通过这种方式可以动态地添加、删除元素而不需要预先分配固定大小的空间给整个数组等静态容器。
### 定义快遞結構体
首先我们定义一个表示“快递”的结构体,其中包含了有关每件包裹的基本详情:
```c
#include <stdio.h>
#include <stdlib.h>
// 定義一個代表“快遞”的數據結構體
typedef struct Delivery {
char sender[50]; //寄件人名稱
char recipient[50]; //收件人姓名
int id; // 快递ID编号
float weight; // 包裹重量
struct Delivery *next; // 指向下一个结点的指针
} delivery_t;
```
这里`delivery_t`是我们自定义的一种新类型名称,方便后续引用该结构体变量的时候更加简洁明了。
### 创建新的节点并初始化
当有新的快递到达仓库时,我们就创建一个新的链表节点,并将其插入到当前列表末端:
```c
// 函數創建新的節點並返回該節點地址
delivery_t* create_delivery(char send_name[],char recv_name[],int pkg_id,float wght) {
// 分配内存空间以建立一个全新的节点
delivery_t* new_node = (delivery_t*)malloc(sizeof(delivery_t));
if (!new_node)
return NULL;
strcpy(new_node->sender,send_name);
strcpy(new_node->recipient,recv_name);
new_node->id=pkg_id;
new_node->weight=wght;
new_node->next=NULL;
return new_node;
}
```
请注意上述函数会检查是否成功获取到了足够的堆上连续字节作为临时缓存区;若未能完成此操作便直接退出并向调用者报告错误状态(`return null`)。
### 插入新节点至链表结尾处
现在我们需要编写一段程序把新建好的记录加入现有的队列当中去——即追加到已有所有项目的最后面一位之前为止的位置上去:
```c
void append_to_list(delivery_t** head_ref,delivery_t* node){
/* 如果此时还没有任何项目存在 */
if(*head_ref == NULL){
*head_ref=node;
return ;
}
delivery_t *last=*head_ref;
while(last->next!=NULL) last=last->next;
last->next=node;
}
```
这里的头节点是通过双指针传递进来的(形参为`delivery_t **head_ref `),这是因为在实际修改过程中可能会改变原先是null值的状态所以采用这种间接寻址的方式能让我们在整个流程结束后仍保留下最新的变化情况反映在外层作用域里。
### 遍历显示全部已知内容项
当我们想要查看目前系统内所有的订单明细时候就应当遍历一遍完整的单向链条然后逐行打印出各字段的信息啦!
```c
void display_all_deliveries(const delivery_t *list_head){
const delivery_t *temp=list_head;
printf("----- 当前所有待处理的配送任务 -----\n");
while(temp != NULL ){
printf("\n寄件人:%s\n", temp->sender );
printf("收件人:%s\n", temp->recipient );
printf("快递ID:%d \t ", temp->id);
printf("包裹重量:%f kg\n", temp->weight);
temp=temp->next ;
}
}
```
以上就是利用单向链表结构管理一组快递物品基本信息的一个简单示例代码片段,在现实应用环境中还需要考虑更多边界条件以及异常状况下的应对策略哦~
阅读全文
相关推荐


















