在某购物平台上,某一时刻我们按价格升序浏览商品的结果如下表所示,假定上述结果存储在单链表中,当我们想按价格的降序来查看这一结果时,该如何实现?这时我们可以通过对存储上述结果的单链表进行转置来实现。 小苹果 ¥24.9 红苹果 ¥29 大苹果 ¥48 大红苹果 ¥90 用c语言
时间: 2024-10-21 07:15:33 浏览: 36
在C语言中,如果想要将单链表按照价格从高到低排序(即降序),可以按照以下步骤操作:
1. 首先,我们需要定义一个结构体来表示商品信息,包括名字和价格,以及指向下一个节点的指针。
```c
typedef struct Node {
char name[50];
double price;
struct Node* next;
} ItemNode;
```
2. 创建一个函数来添加商品到链表中,保持原有顺序不变(因为链表已按价格升序排列):
```c
void insert(ItemNode** head, const char* name, double price) {
ItemNode* newNode = (ItemNode*)malloc(sizeof(ItemNode));
newNode->name = (char*)malloc(strlen(name) + 1);
strcpy(newNode->name, name);
newNode->price = price;
newNode->next = *head;
*head = newNode;
}
```
3. 创建一个辅助函数来反转链表,这会改变商品的价格顺序:
```c
void reverseList(ItemNode** head) {
ItemNode* prev = NULL, *current = *head, *temp = NULL;
while (current != NULL) {
temp = current->next; // 保存当前节点的下一个节点
current->next = prev; // 更新当前节点的next为prev
prev = current; // 移动prev指向current
current = temp; // 移动current指向下一个未处理的节点
}
*head = prev; // 最后更新头节点
}
```
4. 现在你可以按照原升序链表的顺序添加商品,然后调用reverseList函数完成降序显示:
```c
int main() {
ItemNode* head = NULL;
insert(&head, "小苹果", 24.9);
insert(&head, "红苹果", 29);
insert(&head, "大苹果", 48);
insert(&head, "大红苹果", 90);
// 反转链表
reverseList(&head);
// 输出降序商品列表
ItemNode* currentNode = head;
while (currentNode != NULL) {
printf("%s ¥%.2f\n", currentNode->name, currentNode->price);
currentNode = currentNode->next;
}
return 0;
}
```
阅读全文