请用C语言写出顺序栈的入栈和出栈两个栈的基本操作函数。(分2个函数完成)
时间: 2023-06-19 22:04:23 浏览: 59
以下是顺序栈的基本操作函数:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100 // 定义栈的最大长度
typedef struct stack {
int data[MAXSIZE]; // 存放栈中元素的数组
int top; // 栈顶指针
} Stack;
// 初始化栈
void initStack(Stack *S) {
S->top = -1; // 栈顶指针赋值为-1,表示空栈
}
// 判断栈是否为空
int isEmpty(Stack S) {
return S.top == -1;
}
// 判断栈是否已满
int isFull(Stack S) {
return S.top == MAXSIZE - 1;
}
// 入栈操作
void push(Stack *S, int x) {
if (isFull(*S)) {
printf("Stack is full.\n");
return;
}
S->top++; // 栈顶指针加1
S->data[S->top] = x; // 新元素入栈
}
// 出栈操作
int pop(Stack *S) {
if (isEmpty(*S)) {
printf("Stack is empty.\n");
return -1; // 如果栈为空,返回-1
}
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));
printf("%d\n", pop(&S));
printf("%d\n", pop(&S));
printf("%d\n", pop(&S));
return 0;
}
```
上述代码中,我们定义了一个结构体 Stack 来表示顺序栈,包含一个存放栈中元素的数组 data 和一个栈顶指针 top。同时,我们定义了几个基本操作函数:
- initStack:初始化栈,将栈顶指针 top 赋值为-1,表示空栈。
- isEmpty:判断栈是否为空,如果栈顶指针 top 等于-1,则表示栈为空。
- isFull:判断栈是否已满,如果栈顶指针 top 等于 MAXSIZE-1,则表示栈已满。
- push:入栈操作,如果栈已满,则输出提示信息;否则,将栈顶指针 top 加1,将新元素 x 存入 data[top]。
- pop:出栈操作,如果栈为空,则输出提示信息;否则,将栈顶元素取出,栈顶指针 top 减1,并返回出栈的元素。
在 main 函数中,我们首先使用 initStack 函数初始化栈 S,然后依次将元素 1、2、3 入栈,最后依次出栈并输出栈顶元素。注意,在出栈操作中,如果栈为空,则返回-1。