双端顺序栈进栈与出栈的实现,用C语言写出完整源代码
时间: 2024-05-15 22:17:48 浏览: 140
好的,我可以回答您的问题。以下是双端顺序栈的进栈和出栈操作的C语言代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#define MaxSize 100
typedef struct
{
int data[MaxSize];
int top1; // 定义栈1的栈顶指针
int top2; // 定义栈2的栈顶指针
} Stack;
// 初始化栈
void InitStack(Stack *S)
{
S->top1 = -1;
S->top2 = MaxSize;
}
// 判断栈是否为空
int isEmpty(Stack *S, int flag)
{
if (flag == 1)
return (S->top1 == -1);
else if (flag == 2)
return (S->top2 == MaxSize);
}
// 判断栈是否已满
int isFull(Stack *S)
{
return (S->top1 == S->top2 - 1);
}
// 进栈操作
void Push(Stack *S, int x, int flag)
{
if (isFull(S))
{
printf("Stack Overflow!\n");
exit(1);
}
if (flag == 1)
S->data[++S->top1] = x; // 栈1进栈
else if (flag == 2)
S->data[--S->top2] = x; // 栈2进栈
}
// 出栈操作
int Pop(Stack *S, int flag)
{
if (flag == 1)
{
if (isEmpty(S, flag))
{
printf("Stack1 is Empty!\n");
exit(1);
}
return (S->data[S->top1--]); // 栈1出栈
}
else if (flag == 2)
{
if (isEmpty(S, flag))
{
printf("Stack2 is Empty!\n");
exit(1);
}
return (S->data[S->top2++]); // 栈2出栈
}
}
int main()
{
Stack s;
InitStack(&s);
Push(&s, 1, 1); // 第一个参数是栈; 第二个参数是要放入的数; 第三个参数是选择栈1或栈2
Push(&s, 2, 2);
Push(&s, 3, 1);
Push(&s, 4, 2);
printf("%d\n", Pop(&s, 1));
printf("%d\n", Pop(&s, 2));
printf("%d\n", Pop(&s, 1));
printf("%d\n", Pop(&s, 2));
return 0;
}
```
这段代码实现了使用双端顺序栈进栈和出栈。在函数中,使用 `flag` 形参来选择栈1或栈2,如果 `flag` 的值为1,则表示操作的是栈1;如果 `flag` 的值为2,则表示操作的是栈2。其中,进栈操作是通过 `Push()` 函数实现的,而出栈操作是通过 `Pop()` 函数实现的。
注意:双端顺序栈的各种操作需要考虑两个栈同时存在的情况,因此需要分别处理栈1和栈2的栈顶指针。
阅读全文