完整的c语言程序
时间: 2023-08-07 12:18:15 浏览: 85
下面是完整的 C 语言程序,实现了用两个顺序栈模拟队列的功能:
```c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAXSIZE 100
typedef struct {
int data[MAXSIZE];
int top;
} Stack;
typedef struct {
Stack s1;
Stack s2;
int max1;
int max2;
} Queue;
void init_stack(Stack *s)
{
s->top = -1;
}
bool is_empty(Stack *s)
{
return s->top == -1;
}
bool is_full(Stack *s, int max)
{
return s->top == max - 1;
}
bool push(Stack *s, int x, int max)
{
if (is_full(s, max)) {
return false;
}
s->data[++s->top] = x;
return true;
}
int pop(Stack *s)
{
if (is_empty(s)) {
return -1;
}
return s->data[s->top--];
}
void init_queue(Queue *q, int max1, int max2)
{
q->max1 = max1;
q->max2 = max2;
init_stack(&q->s1);
init_stack(&q->s2);
}
bool enqueue(Queue *q, int x)
{
if (is_full(&q->s1, q->max1)) {
return false;
}
push(&q->s1, x, q->max1);
return true;
}
int dequeue(Queue *q)
{
if (is_empty(&q->s2)) {
while (!is_empty(&q->s1)) {
push(&q->s2, pop(&q->s1), q->max2);
}
}
return pop(&q->s2);
}
bool is_queue_empty(Queue *q)
{
return is_empty(&q->s1) && is_empty(&q->s2);
}
int main()
{
Queue q;
init_queue(&q, MAXSIZE, MAXSIZE);
enqueue(&q, 1);
enqueue(&q, 2);
enqueue(&q, 3);
printf("%d\n", dequeue(&q)); // 1
printf("%d\n", dequeue(&q)); // 2
enqueue(&q, 4);
printf("%d\n", dequeue(&q)); // 3
printf("%d\n", dequeue(&q)); // 4
printf("%d\n", dequeue(&q)); // -1
return 0;
}
```
在这个程序中,我们定义了两个结构体 `Stack` 和 `Queue` 来分别表示栈和队列。其中,`Stack` 结构体包含一个整型数组 `data` 和一个整型变量 `top`,`top` 表示栈顶元素的位置。`Queue` 结构体包含两个 `Stack` 类型的成员变量 `s1` 和 `s2`,分别表示队列的两个栈,以及两个整型变量 `max1` 和 `max2`,分别表示 `s1` 和 `s2` 的最大容量。
我们还定义了一些操作栈和队列的函数,比如 `init_stack`、`is_empty`、`is_full`、`push`、`pop`、`init_queue`、`enqueue`、`dequeue` 和 `is_queue_empty`。具体实现请参考代码注释。
在 `main` 函数中,我们创建了一个 `Queue` 类型的变量 `q`,并对其进行了一些入队、出队和判空操作,以测试队列的功能是否正常。
阅读全文