验目的:1、掌握栈和队列的基本知识 2、深入理解栈和队列的特征,掌握并灵活运用栈和队列。3、用顺序结构表示栈并实现栈的各种基本操作 将程序填写完整,实现栈的初始化、释放栈、入栈、出栈等基本操作。
时间: 2023-05-23 10:01:45 浏览: 107
栈和队列的基本操作的实现.
以下是栈的基本操作实现代码,使用顺序结构表示栈:
```c
#include <stdio.h>
#define MAX_SIZE 100
typedef struct {
int data[MAX_SIZE];
int top; // 栈顶指针,指向栈顶元素
} Stack;
void initStack(Stack* s) {
s->top = -1; // 初始化栈顶指针为-1,表示栈为空
}
void push(Stack* s, int x) {
if (s->top == MAX_SIZE - 1) {
printf("栈已满,无法入栈\n");
return;
}
s->top++; // 栈顶指针加1
s->data[s->top] = x; // 入栈
}
int pop(Stack* s) {
if (s->top == -1) {
printf("栈已空,无法出栈\n");
return 0; // 出错返回0
}
int x = s->data[s->top]; // 取出栈顶元素
s->top--; // 栈顶指针减1
return x;
}
int main() {
Stack s;
initStack(&s);
push(&s, 1);
push(&s, 2);
push(&s, 3);
printf("%d\n", pop(&s)); // 3
printf("%d\n", pop(&s)); // 2
printf("%d\n", pop(&s)); // 1
printf("%d\n", pop(&s)); // 栈已空,无法出栈,返回0
return 0;
}
```
以下是队列的基本操作实现代码,使用顺序结构表示队列:
```c
#include <stdio.h>
#define MAX_SIZE 100
typedef struct {
int data[MAX_SIZE];
int head; // 队头指针,指向队头元素
int tail; // 队尾指针,指向队尾元素的下一个位置
} Queue;
void initQueue(Queue* q) {
q->head = q->tail = 0; // 初始化队头队尾指针为0
}
void enQueue(Queue* q, int x) {
if ((q->tail + 1) % MAX_SIZE == q->head) {
printf("队列已满,无法入队\n");
return;
}
q->data[q->tail] = x; // 入队
q->tail = (q->tail + 1) % MAX_SIZE; // 队尾指针加1,需要取模
}
int deQueue(Queue* q) {
if (q->head == q->tail) {
printf("队列已空,无法出队\n");
return 0; // 出错返回0
}
int x = q->data[q->head]; // 取出队头元素
q->head = (q->head + 1) % MAX_SIZE; // 队头指针加1,需要取模
return x;
}
int main() {
Queue q;
initQueue(&q);
enQueue(&q, 1);
enQueue(&q, 2);
enQueue(&q, 3);
printf("%d\n", deQueue(&q)); // 1
printf("%d\n", deQueue(&q)); // 2
printf("%d\n", deQueue(&q)); // 3
printf("%d\n", deQueue(&q)); // 队列已空,无法出队,返回0
return 0;
}
```
阅读全文