使用c语言实现栈的基本操作,包括定义栈结构、创建一个栈、判断栈是否为空、判断栈是否已满、将元素压入栈、从栈中弹出元素、获取栈顶元素等操作。,并在主函数中进行测试
时间: 2023-11-17 17:06:06 浏览: 24
好的,根据您的要求,我来为您演示一下使用C语言实现栈的基本操作,包括定义栈结构、创建一个栈、判断栈是否为空、判断栈是否已满、将元素压入栈、从栈中弹出元素、获取栈顶元素等操作,并在主函数中进行测试。
首先,我们需要定义一个栈结构体,包含栈的最大容量,当前元素个数以及一个元素数组,如下所示:
```c
#define MAXSIZE 10
typedef struct {
int top; // 栈顶指针
int size; // 当前元素个数
int data[MAXSIZE]; // 元素数组
} Stack;
```
接下来,我们需要实现创建一个栈的函数,将栈顶指针和当前元素个数初始化为0,如下所示:
```c
void init(Stack *s) {
s->top = 0;
s->size = 0;
}
```
然后,我们需要实现判断栈是否为空的函数,当当前元素个数为0时,栈为空,如下所示:
```c
int isEmpty(Stack *s) {
return s->size == 0;
}
```
接着,我们需要实现判断栈是否已满的函数,当栈顶指针等于最大容量时,栈已满,如下所示:
```c
int isFull(Stack *s) {
return s->top == MAXSIZE;
}
```
接下来,我们需要实现将元素压入栈的函数,先判断栈是否已满,如果未满,则将元素放入栈顶指针所指向的位置,将栈顶指针加1,当前元素个数加1,如下所示:
```c
void push(Stack *s, int value) {
if (!isFull(s)) {
s->data[s->top] = value;
s->top++;
s->size++;
} else {
printf("Stack is full.\n");
}
}
```
然后,我们需要实现从栈中弹出元素的函数,先判断栈是否为空,如果非空,则将栈顶指针减1,当前元素个数减1,并返回栈顶元素,如下所示:
```c
int pop(Stack *s) {
int value = -1;
if (!isEmpty(s)) {
s->top--;
s->size--;
value = s->data[s->top];
} else {
printf("Stack is empty.\n");
}
return value;
}
```
最后,我们需要实现获取栈顶元素的函数,先判断栈是否为空,如果非空,则返回栈顶元素,如下所示:
```c
int top(Stack *s) {
int value = -1;
if (!isEmpty(s)) {
value = s->data[s->top - 1];
} else {
printf("Stack is empty.\n");
}
return value;
}
```
现在,我们已经完成了栈的基本操作的实现,下面是完整的代码:
```c
#include <stdio.h>
#define MAXSIZE 10
typedef struct {
int top; // 栈顶指针
int size; // 当前元素个数
int data[MAXSIZE]; // 元素数组
} Stack;
void init(Stack *s) {
s->top = 0;
s->size = 0;
}
int isEmpty(Stack *s) {
return s->size == 0;
}
int isFull(Stack *s) {
return s->top == MAXSIZE;
}
void push(Stack *s, int value) {
if (!isFull(s)) {
s->data[s->top] = value;
s->top++;
s->size++;
} else {
printf("Stack is full.\n");
}
}
int pop(Stack *s) {
int value = -1;
if (!isEmpty(s)) {
s->top--;
s->size--;
value = s->data[s->top];
} else {
printf("Stack is empty.\n");
}
return value;
}
int top(Stack *s) {
int value = -1;
if (!isEmpty(s)) {
value = s->data[s->top - 1];
} else {
printf("Stack is empty.\n");
}
return value;
}
int main() {
Stack s;
init(&s);
printf("Stack is empty: %d\n", isEmpty(&s));
push(&s, 1);
push(&s, 2);
push(&s, 3);
printf("Stack top: %d\n", top(&s));
printf("Stack pop: %d\n", pop(&s));
printf("Stack pop: %d\n", pop(&s));
printf("Stack pop: %d\n", pop(&s));
printf("Stack is empty: %d\n", isEmpty(&s));
return 0;
}
```
运行结果如下:
```
Stack is empty: 1
Stack top: 3
Stack pop: 3
Stack pop: 2
Stack pop: 1
Stack is empty: 1
```
以上就是使用C语言实现栈的基本操作的演示,希望对您有所帮助!