用C语言写一个购物商品推荐系统实现队列的初始化入队出队查找取值遍历
时间: 2024-10-17 15:07:36 浏览: 31
在C语言中,我们可以使用数组或链表结构来实现一个简单的购物商品推荐系统的队列。这里我将以链表为例来说明:
```c
#include <stdio.h>
#include <stdlib.h>
// 队列节点结构体
typedef struct Node {
int item; // 商品ID
struct Node* next; // 指向下一个节点的指针
} QueueNode;
// 初始化空队列
QueueNode* initQueue() {
QueueNode* queue = (QueueNode*)malloc(sizeof(QueueNode));
queue->item = -1;
queue->next = NULL;
return queue;
}
// 入队操作(添加商品到队列尾部)
void enqueue(QueueNode** front, QueueNode* rear, int item) {
if (*rear == NULL) {
*rear = (QueueNode*)malloc(sizeof(QueueNode));
(*rear)->item = item;
(*rear)->next = NULL;
} else {
(*rear)->next = (QueueNode*)malloc(sizeof(QueueNode));
(*rear)->next->item = item;
(*rear)->next->next = NULL;
*rear = (*rear)->next;
}
}
// 出队操作(删除并返回队首的商品)
int dequeue(QueueNode** front, QueueNode** rear) {
if (*front == NULL) {
printf("Queue is empty.\n");
return -1;
}
int item = (*front)->item;
QueueNode* temp = *front;
*front = (*front)->next;
free(temp); // 释放已处理的节点内存
if (*front == NULL) {
*rear = NULL;
}
return item;
}
// 查找特定商品(如果存在则返回索引,否则返回-1)
int search(QueueNode* front, int item) {
for (int i = 0, index = 0; front != NULL; front = front->next, ++i) {
if (front->item == item) {
return index;
}
index++;
}
return -1;
}
// 遍历队列打印所有商品
void traverse(QueueNode* front) {
while (front != NULL) {
printf("%d ", front->item);
front = front->next;
}
printf("\n");
}
int main() {
QueueNode* front = initQueue();
enqueue(&front, &front, 1);
enqueue(&front, &front, 2);
enqueue(&front, &front, 3);
printf("After enqueue:\n");
traverse(front);
int removed_item = dequeue(&front, &front);
printf("Removed item: %d\n", removed_item);
int found_index = search(front, 2);
if (found_index != -1) {
printf("Found item at index: %d\n", found_index);
} else {
printf("Item not found.\n");
}
return 0;
}
```
在这个示例中,我们首先定义了一个队列节点结构,然后实现了队列的初始化、入队、出队、查找和遍历功能。在`main()`函数中展示了如何使用这些操作。
阅读全文