顺序栈进栈c语言代码
时间: 2023-12-11 16:31:50 浏览: 42
以下是顺序栈进栈的C语言代码:
```c
// 定义一个入栈函数push
void push(stack_t *s, datatype x) {
// 判断栈是否已满
if(s->top == s->len - 1) {
printf("Stack is full!\n");
return;
}
// 栈顶指针加1,将元素x入栈
s->top++;
s->data[s->top] = x;
}
```
相关问题
c语言顺序栈进栈代码
以下是C语言顺序栈的进栈代码实现:
引用中的代码实现:
```c
Status Push(SqStack *S, SElemType e){
if(S->top - S->base == S->stacksize){ //栈满
return ERROR;
}
*(S->top) = e; //元素e压入栈顶
S->top++; //栈顶指针加1
return OK;
}
```
其中,`SqStack`是顺序栈的存储结构体,`SElemType`是栈中元素的数据类型,`Status`是函数返回值类型,`OK`和`ERROR`是函数返回值的两种状态。
函数`Push`用于将元素`e`进栈,如果栈已满则返回`ERROR`,否则将元素`e`压入栈顶,并将栈顶指针加1,最后返回`OK`。
另外,需要注意的是,在使用顺序栈之前,需要先进行初始化操作,具体实现可以参考引用中的代码。
双端顺序栈进栈与出栈的实现,用C语言写出完整源代码
好的,我可以回答您的问题。以下是双端顺序栈的进栈和出栈操作的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的栈顶指针。