目录
栈
简介
栈是一种常见的数据结构,它遵循“先进后出”的原则,即最后进入栈的元素最先被访问。栈的实现可以使用数组或链表来存储数据。
使用数组实现栈
定义栈结构:首先需要定义一个结构体来表示栈,其中包含一个数组用于存储数据和一个指针表示栈顶位置。
#define MAX_SIZE 100
typedef struct Stack {
int data[MAX_SIZE];
int top;
} Stack;
初始化栈:将栈顶指针设置为-1,表示栈为空。
void initialize(Stack* stack) {
stack->top = -1;
}
入栈操作:将元素插入到栈顶位置,需要将栈顶指针增加1,并将元素存储在栈顶位置。
void push(Stack* stack, int item) {
if (stack->top == MAX_SIZE - 1) {
printf("Stack is full\n");
} else {
stack->data[++stack->top] = item;
}
}
出栈操作:从栈顶位置移除元素,需要将栈顶指针减少1,并返回栈顶元素。
int pop(Stack* stack) {
if (stack->top == -1) {
printf("Stack is empty\n");
return -1;
} else {
return stack->data[stack->top--];
}
}
获取栈顶元素:返回栈顶位置的元素,但不将其从栈中移除。
int peek(Stack* stack) {
if (stack->top == -1) {
printf("Stack is empty\n");
return -1;
} else {
return stack->data[stack->top];
}
}
判断栈是否为空:根据栈顶指针是否为-1来判断栈是否为空。
int isEmpty(Stack* stack) {
return stack->top == -1;
}
判断栈是否已满:根据栈顶指针是否达到数组的最大索引来判断栈是否已满。
int isFull(Stack* stack) {
return stack->top == MAX_SIZE - 1;
}
使用数组实现的栈具有固定的大小,当栈满时无法再插入元素。如果需要实现一个可以动态扩展大小的栈,可以使用链表来实现栈的操作。
队列
简介
队列是一种常见的数据结构,它遵循“先进先出”的原则,即最先进入队列的元素最先被访问。队列的实现可以使用数组或链表来存储数据。
使用数组实现队列
定义队列结构:首先需要定义一个结构体来表示队列,其中包含一个数组用于存储数据,一个front指针表示队列的第一个元素位置,一个rear指针表示队列的最后一个元素位置。
#define MAX_SIZE 100
typedef struct Queue {
int data[MAX_SIZE];
int front;
int rear;
} Queue;
初始化队列:将front和rear指针均设置为-1,表示队列为空。
void initialize(Queue* queue) {
queue->front = -1;
queue->rear = -1;
}
入队操作:将元素插入到队列的末尾,需要将rear指针增加1,并将元素存储在rear指针位置。
void enqueue(Queue* queue, int item) {
if (queue->rear == MAX_SIZE - 1) {
printf("Queue is full\n");
} else {
if (queue->front == -1) {
queue->front = 0;
}
queue->data[++queue->rear] = item;
}
}
出队操作:从队列的第一个元素位置移除元素,需要将front指针增加1,并返回移除的元素。
int dequeue(Queue* queue) {
if (queue->front == -1 || queue->front > queue->rear) {
printf("Queue is empty\n");
return -1;
} else {
return queue->data[queue->front++];
}
}
判断队列是否为空:根据front和rear指针的位置关系来判断队列是否为空。
int isEmpty(Queue* queue) {
return queue->front == -1 || queue->front > queue->rear;
}
判断队列是否已满:根据rear指针是否达到数组的最大索引来判断队列是否已满。
int isFull(Queue* queue) {
return queue->rear == MAX_SIZE - 1;
}
使用数组实现的队列具有固定的大小,当队列满时无法再插入元素。如果需要实现一个可以动态扩展大小的队列,可以使用链表来实现队列的操作。