(1)C(或C++)实现顺序栈,并利用该栈实现教材的数制转换算法。 (2)C(或C++)实现循环队列,主函数测试队空到队满,队满到队空的过程,要输出“入队”、“出队”、“队空”和“队满”的提示文字。
时间: 2024-10-22 14:09:20 浏览: 52
(1)在C语言中,我们可以简单地实现一个顺序栈(基于数组的实现):
```c
#include <stdio.h>
#define MAX_SIZE 100
typedef struct {
int top;
int data[MAX_SIZE];
} Stack;
// 初始化栈
void init(Stack *s) {
s->top = -1;
}
// 判断栈是否为空
int isEmpty(Stack *s) {
return s->top == -1;
}
// 判断栈是否已满
int isFull(Stack *s) {
return s->top == MAX_SIZE - 1;
}
// 入栈操作
void push(Stack *s, int value) {
if (isFull(s)) {
printf("Queue is full.\n");
return;
}
s->data[++s->top] = value;
printf("Pushed %d onto the stack.\n", value);
}
// 出栈操作
int pop(Stack *s) {
if (isEmpty(s)) {
printf("Stack is empty.\n");
return -1; // 返回一个特殊值表示栈空
}
return s->data[s->top--];
}
// 主函数演示栈的操作
int main() {
Stack s;
init(&s);
push(&s, 5); // 入栈示例
printf("After pushing: ");
while (!isEmpty(&s)) {
printf("%d ", pop(&s));
}
return 0;
}
```
对于教材中的数制转换算法,例如从二进制转十进制,可以将上面的栈用于辅助存储中间过程,但在上述栈结构中并不直接体现。
(2)在C语言中实现循环队列:
```c
#include <stdio.h>
#define QUEUE_SIZE 10
typedef struct {
int front, rear, count;
int data[QUEUE_SIZE];
} Queue;
// 初始化队列
void init(Queue *q) {
q->front = q->rear = -1;
q->count = 0;
}
// 检查队列是否为空
int isEmpty(Queue *q) {
return q->count == 0;
}
// 检查队列是否已满
int isFull(Queue *q) {
return (q->rear + 1) % QUEUE_SIZE == q->front;
}
// 入队操作
void enqueue(Queue *q, int value) {
if (isFull(q)) {
printf("Queue is full.\n");
return;
}
if (isEmpty(q)) q->front = q->rear = 0;
q->data[(q->rear + 1) % QUEUE_SIZE] = value;
q->rear = (q->rear + 1) % QUEUE_SIZE;
++q->count;
printf("Inserted %d into the queue.\n", value);
}
// 出队操作
int dequeue(Queue *q) {
if (isEmpty(q)) {
printf("Queue is empty.\n");
return -1;
}
int removedValue = q->data[q->front];
q->front = (q->front + 1) % QUEUE_SIZE;
if (q->front == q->rear) q->front = q->rear = -1; // 队列变空
--q->count;
return removedValue;
}
// 主函数演示队列操作
int main() {
Queue q;
init(&q);
enqueue(&q, 1); // 入队示例
while (!isEmpty(&q)) {
printf("Dequeued %d from the queue.\n", dequeue(&q));
}
return 0;
}
```
阅读全文