顺序栈操作-补充顺序栈入栈函数
时间: 2024-06-13 14:04:02 浏览: 20
顺序栈是一种基于数组实现的栈结构,它的操作包括初始化、判断栈是否为空、求栈长度、清空栈、销毁栈、入栈和出栈等。其中入栈操作是将元素压入栈顶,而出栈操作则是将栈顶元素弹出。如果要补充顺序栈的入栈函数,可以参考以下代码:
```
void Push(SqStack *s, SElemType e){
if(s->top == MAXSIZE-1){ // 栈满,无法入栈
printf("Stack is full.\n");
return;
}
s->top++; // 栈顶指针加1
s->data[s->top] = e; // 将元素e压入栈顶
}
```
在这个函数中,我们首先判断栈是否已满,如果已满则无法入栈,否则将栈顶指针加1,并将元素e压入栈顶。
相关问题
顺序栈入栈出栈源代码
根据提供的引用内容,可以使用以下代码实现顺序栈的入栈和出栈功能:
```
// 定义全局变量
DB全局块: 全局DB块;
// 入栈函数
FC入栈:
IF 全局DB块.入栈按钮 = 1 THEN
IF DB全局块.DataArray[10] <> 0 THEN
// 栈已满,无法入栈
// 这里可以添加相应的处理逻辑
ELSE
// 将待入栈数据压入栈顶
DB全局块.DataArray[DB全局块.待入栈数据] := DB全局块.待入栈数据;
// 栈顶指针加1
DB全局块.待入栈数据 := DB全局块.待入栈数据 + 1;
END_IF
END_IF
// 出栈函数
FC出栈:
IF 全局DB块.出栈按钮 = 1 THEN
IF DB全局块.DataArray[1] = 0 THEN
// 栈已空,无法出栈
// 这里可以添加相应的处理逻辑
ELSE
// 将栈顶数据弹出
DB全局块.出栈数据 := DB全局块.DataArray[DB全局块.待入栈数据 - 1];
// 栈顶指针减1
DB全局块.待入栈数据 := DB全局块.待入栈数据 - 1;
END_IF
END_IF
```
C语言实现顺序栈的入栈和出栈两个栈的基本操作函数
以下是C语言实现顺序栈的入栈和出栈两个栈的基本操作函数的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 10
typedef struct {
int data[MAX_SIZE];
int top1;
int top2;
} SeqStack;
void initStack(SeqStack *s) {
s->top1 = -1;
s->top2 = MAX_SIZE;
}
int isFull(SeqStack *s) {
return (s->top1 + 1) == s->top2;
}
int isEmpty1(SeqStack *s) {
return s->top1 == -1;
}
int isEmpty2(SeqStack *s) {
return s->top2 == MAX_SIZE;
}
void push1(SeqStack *s, int x) {
if (isFull(s)) {
printf("Stack 1 is full.\n");
return;
}
s->data[++s->top1] = x;
}
void push2(SeqStack *s, int x) {
if (isFull(s)) {
printf("Stack 2 is full.\n");
return;
}
s->data[--s->top2] = x;
}
int pop1(SeqStack *s) {
if (isEmpty1(s)) {
printf("Stack 1 is empty.\n");
return -1;
}
return s->data[s->top1--];
}
int pop2(SeqStack *s) {
if (isEmpty2(s)) {
printf("Stack 2 is empty.\n");
return -1;
}
return s->data[s->top2++];
}
int main() {
SeqStack s;
initStack(&s);
push1(&s, 1);
push1(&s, 2);
push1(&s, 3);
push2(&s, 4);
push2(&s, 5);
push2(&s, 6);
printf("%d\n", pop1(&s));
printf("%d\n", pop2(&s));
printf("%d\n", pop1(&s));
printf("%d\n", pop2(&s));
printf("%d\n", pop1(&s));
printf("%d\n", pop2(&s));
return 0;
}
```
在这个例子中,我们定义了一个 `SeqStack` 结构体,包含了两个整型数组和两个指向栈顶的指针 `top1` 和 `top2`。`initStack()` 函数用来初始化栈,将 `top1` 和 `top2` 初始化为 -1 和 `MAX_SIZE`,表示两个栈都为空。`isFull()` 函数判断两个栈是否已经满了,如果 `top1` 和 `top2` 相差为 1,就说明两个栈都已经满了。`isEmpty1()` 和 `isEmpty2()` 函数分别判断两个栈是否为空,如果 `top1` 或 `top2` 等于它们的初始值,则说明它们为空。
`push1()` 和 `push2()` 函数分别用来向两个栈中压入数据。它们都先判断栈是否已经满了,如果已经满了则打印一条提示信息并返回。否则,`push1()` 将数据压入第一个栈的栈顶,同时将 `top1` 加 1;`push2()` 将数据压入第二个栈的栈顶,同时将 `top2` 减 1。
`pop1()` 和 `pop2()` 函数分别用来从两个栈中弹出数据。它们都先判断栈是否为空,如果为空则打印一条提示信息并返回 -1。否则,`pop1()` 从第一个栈的栈顶弹出数据,同时将 `top1` 减 1 并返回弹出的数据;`pop2()` 从第二个栈的栈顶弹出数据,同时将 `top2` 加 1 并返回弹出的数据。
在 `main()` 函数中,我们首先调用 `initStack()` 函数初始化栈。然后,我们分别向两个栈中压入 1、2、3 和 4、5、6 这六个数。接着,我们依次从两个栈中弹出数据,并打印输出。最后,我们返回 0 表示程序正常结束。
相关推荐
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)