根据前述作业编写的商品结构体,编写程序: 1)实现商品顺序栈数据结构,能够进行出栈和入栈操作;(20分) 2)实现商品顺序队列数据结构,能够进行出队和入队操作。(20分)用c语言
时间: 2024-10-07 19:05:28 浏览: 27
在C语言中,我们可以创建两个简单的结构体`Item`表示商品,然后分别实现顺序栈和顺序队列的数据结构。这里是一个基本的例子:
```c
#include <stdio.h>
#include <stdlib.h>
// 商品结构体
typedef struct {
char name[50];
float price;
} Item;
// 定义商品顺序栈
typedef struct Stack {
Item* items;
int top; // 栈顶指针
int capacity;
} Stack;
// 初始化栈
Stack* stack_init(int size) {
Stack* s = (Stack*)malloc(sizeof(Stack));
if (!s) return NULL;
s->items = malloc(size * sizeof(Item));
if (!s->items) return NULL;
s->top = -1;
s->capacity = size;
return s;
}
// 入栈
void stack_push(Stack* s, const Item* item) {
if (s->top == s->capacity - 1) {
printf("Stack is full.\n");
return;
}
s->items[++s->top] = *item;
}
// 出栈
Item* stack_pop(Stack* s) {
if (s->top == -1) {
printf("Stack is empty.\n");
return NULL;
}
Item* ret = &s->items[s->top];
s->top--;
return ret;
}
// 商品顺序队列
typedef struct Queue {
Item* items;
int front; // 队头指针
int rear; // 队尾指针
int capacity;
} Queue;
// 初始化队列
Queue* queue_init(int size) {
Queue* q = (Queue*)malloc(sizeof(Queue));
if (!q) return NULL;
q->items = malloc(size * sizeof(Item));
if (!q->items) return NULL;
q->front = -1;
q->rear = -1;
q->capacity = size;
return q;
}
// 入队
void queue_enqueue(Queue* q, const Item* item) {
if (q->rear == q->capacity - 1) {
printf("Queue is full.\n");
return;
}
q->items[++q->rear] = *item;
if (q->front == -1) q->front = 0;
}
// 出队
Item* queue_dequeue(Queue* q) {
if (q->front == q->rear) {
printf("Queue is empty.\n");
return NULL;
}
Item* ret = &q->items[q->front];
q->front++;
return ret;
}
// 示例程序
int main() {
// 初始化并操作栈和队列...
Stack* stack = stack_init(10);
Queue* queue = queue_init(10);
// ...这里可以添加实际的商品数据和相应的操作
free(stack->items);
free(stack);
free(queue->items);
free(queue);
return 0;
}
```
阅读全文