判断栈满和栈空的c语言代码
时间: 2023-10-23 12:14:36 浏览: 168
假设栈的结构体定义如下:
```c
#define MAX_SIZE 100
typedef struct {
int data[MAX_SIZE];
int top;
} Stack;
```
判断栈是否满:
```c
int isFull(Stack *s) {
return (s->top == MAX_SIZE - 1);
}
```
判断栈是否空:
```c
int isEmpty(Stack *s) {
return (s->top == -1);
}
```
相关问题
写一个判断栈是否为空的代码C语言
以下是判断栈是否为空的代码示例:
```c
#include <stdio.h>
#define MAXSIZE 10 // 定义栈的最大容量
typedef struct {
int data[MAXSIZE];
int top; // 栈顶指针
} Stack;
// 初始化栈
void init(Stack *s) {
s->top = -1;
}
// 判断栈是否为空
int isEmpty(Stack *s) {
return (s->top == -1);
}
int main() {
Stack s;
init(&s);
if (isEmpty(&s)) {
printf("栈为空\n");
} else {
printf("栈不为空\n");
}
return 0;
}
```
在上面的代码中,我们首先定义了一个结构体 `Stack`,包含一个数组 `data` 和一个栈顶指针 `top`。然后我们定义了两个函数:`init` 用于初始化栈,`isEmpty` 用于判断栈是否为空。在 `main` 函数中,我们先初始化了一个栈,然后调用 `isEmpty` 函数判断栈是否为空,并输出结果。
c语言链表的判断栈满栈空代码
在C语言中,栈链表的判断"栈满"和"栈空"主要是通过操作链表头部来完成的:
1. **判断栈是否为空 (IsEmpty)**[^1]:
```c
// 定义栈的定义,假设结构体Node包含一个int元素和一个指向下一个节点的指针next
struct Node {
int data;
struct Node* next;
};
// 判定栈是否为空
bool IsEmpty(struct Node* top) {
return top == NULL; // 如果头节点next为NULL,则表示栈为空
}
```
2. **获取栈的大小 (GetSize)**:
要获得栈的实际大小,即元素的数量,可能需要维护一个额外的计数器,因为直接遍历链表计算会比较复杂。如果每次入栈和出栈都更新计数器,那么可以在O(1)时间内得到当前大小。但如果链表没有这样的功能,可以遍历链表计算:
```c
int GetSize(struct Node* top) {
int size = 0;
while (top != NULL) {
size++;
top = top->next;
}
return size;
}
```
对于循环链表,队列为空的情况通常是指队列头和尾指针都指向同一个节点,而队列满则是当插入新元素时发现队尾已经追上了队首。但这些概念在标准的栈结构(非循环链表)中并不适用。
阅读全文