写一个栈和队列的插入和删除算法实现的C语言程序设计
时间: 2024-10-19 08:11:44 浏览: 31
数据结构与算法基础课程 C语言C++程序语言设计教程 3_1栈和队列 共29页.pptx
栈(Stack)和队列(Queue)是两种基础的数据结构,它们有各自的特性和操作规则。
**栈(Stack)**的特点是后进先出(Last In, First Out, LIFO)。下面是使用数组实现简单栈的插入(push)和删除(pop)操作:
```c
#include <stdio.h>
#define MAX_SIZE 10
typedef struct {
int top; // 栈顶指针
int data[MAX_SIZE]; // 存储数据
} Stack;
// 初始化空栈
void init(Stack *s) {
s-1);
}
// 插入元素到栈顶
void push(Stack *s, int value) {
if (is_empty(s)) {
s->top = 0;
} else {
s->data[++(s->top)] = value;
}
}
// 删除并返回栈顶元素(如果存在)
int pop(Stack *s) {
if (!is_empty(s)) {
return s->data[s->top--];
} else {
printf("Stack is empty.\n");
return -1;
}
}
int main() {
Stack myStack;
init(&myStack);
push(&myStack, 5);
push(&myStack, 3);
push(&myStack, 7);
printf("Popped element: %d\n", pop(&myStack));
printf("Popped element: %d\n", pop(&myStack));
return 0;
}
```
**队列(Queue)**的特点是先进先出(First In, First Out, FIFO)。这里我们同样使用数组实现:
```c
#include <stdio.h>
#define MAX_SIZE 10
typedef struct {
int front; // 队首指针
int rear; // 队尾指针
int data[MAX_SIZE]; // 存储数据
} Queue;
// 初始化空队列
void init(Queue *q) {
q->front = q->rear = -1;
}
// 检查队列是否为空
int is_empty(Queue *q) {
return (q->front == q->rear);
}
// 向队尾插入元素
void enqueue(Queue *q, int value) {
if (!is_empty(q)) {
q->rear = (q->rear + 1) % MAX_SIZE;
q->data[q->rear] = value;
} else {
q->front = 0;
q->rear = 0;
q->data[0] = value;
}
}
// 从队首删除并返回元素(如果存在)
int dequeue(Queue *q) {
if (!is_empty(q)) {
int temp = q->data[q->front];
q->front = (q->front + 1) % MAX_SIZE;
return temp;
} else {
printf("Queue is empty.\n");
return -1;
}
}
int main() {
Queue myQueue;
init(&myQueue);
enqueue(&myQueue, 1);
enqueue(&myQueue, 2);
enqueue(&myQueue, 3);
printf("Dequeued element: %d\n", dequeue(&myQueue));
printf("Dequeued element: %d\n", dequeue(&myQueue));
return 0;
}
```
这两个示例展示了如何用C语言实现基本的栈和队列操作。如果你有任何关于这些概念或代码的问题,请告诉我。
阅读全文