用 c 写 栈和队列操作的实现(验证性实验) 问题描述 (1) 建立一个顺序栈。 (2) 建立一个循环顺序队列。 (3) 分别实现栈和队列的基本操作。
时间: 2023-06-14 14:04:12 浏览: 123
以下是用 C 语言实现顺序栈和循环顺序队列的基本操作:
顺序栈的基本操作:
1. 初始化栈:创建一个空栈,并返回该栈的指针。
```
#include <stdio.h>
#include <stdlib.h>
#define MaxSize 100
typedef struct Stack {
int data[MaxSize];
int top;
} Stack;
Stack* initStack() {
Stack* s = (Stack*)malloc(sizeof(Stack));
s->top = -1;
return s;
}
```
2. 判断栈是否为空:如果栈为空,则返回 1,否则返回 0。
```
int isEmpty(Stack* s) {
if (s->top == -1) {
return 1;
} else {
return 0;
}
}
```
3. 入栈操作:将元素 x 压入栈顶。
```
void push(Stack* s, int x) {
if (s->top == MaxSize - 1) {
printf("Stack is full!\n");
return;
}
s->data[++s->top] = x;
}
```
4. 出栈操作:弹出栈顶元素,并返回该元素。
```
int pop(Stack* s) {
if (isEmpty(s)) {
printf("Stack is empty!\n");
return -1;
}
return s->data[s->top--];
}
```
循环顺序队列的基本操作:
1. 初始化队列:创建一个空队列,并返回该队列的指针。
```
typedef struct Queue {
int data[MaxSize];
int front, rear;
} Queue;
Queue* initQueue() {
Queue* q = (Queue*)malloc(sizeof(Queue));
q->front = q->rear = 0;
return q;
}
```
2. 判断队列是否为空:如果队列为空,则返回 1,否则返回 0。
```
int isEmpty(Queue* q) {
if (q->front == q->rear) {
return 1;
} else {
return 0;
}
}
```
3. 判断队列是否已满:如果队列已满,则返回 1,否则返回 0。
```
int isFull(Queue* q) {
if ((q->rear + 1) % MaxSize == q->front) {
return 1;
} else {
return 0;
}
}
```
4. 入队操作:将元素 x 插入队尾。
```
void enqueue(Queue* q, int x) {
if (isFull(q)) {
printf("Queue is full!\n");
return;
}
q->data[q->rear] = x;
q->rear = (q->rear + 1) % MaxSize;
}
```
5. 出队操作:将队头元素弹出,并返回该元素。
```
int dequeue(Queue* q) {
if (isEmpty(q)) {
printf("Queue is empty!\n");
return -1;
}
int x = q->data[q->front];
q->front = (q->front + 1) % MaxSize;
return x;
}
```
以上是顺序栈和循环顺序队列的基本操作实现。可以通过自己编写测试代码进行验证。
阅读全文