用c语言写栈的入栈操作:void push(sqStack *s, int x)
时间: 2024-02-23 18:58:00 浏览: 25
以下是用C语言实现栈的入栈操作的代码:
```
void push(sqStack *s, int x) {
if (isFull(s)) {
printf("栈已满,无法插入元素!");
return;
}
*(s->top) = x;
s->top++;
}
```
在这段代码中,我们首先判断栈是否已满,如果已满,则无法插入元素,直接返回。否则,我们将元素x插入到栈顶top所指的位置,并将top指针向上移动一个位置,表示栈顶指针指向下一个位置,以便下一次插入元素。
相关问题
用c语言 创建一个顺序栈,实现顺序栈的出栈和入栈
好的,这是一个基本的顺序栈的实现,包含入栈(push)和出栈(pop)操作。
```
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100 // 定义栈的最大容量
typedef struct {
int data[MAXSIZE]; // 存放栈中元素
int top; // 栈顶指针
} SqStack;
// 初始化栈
void InitStack(SqStack *S) {
S->top = -1; // 栈顶指针初始化为-1
}
// 判断栈是否为空
int StackEmpty(SqStack S) {
if (S.top == -1) { // 栈顶指针为-1,栈为空
return 1;
}
return 0;
}
// 判断栈是否已满
int StackFull(SqStack S) {
if (S.top == MAXSIZE - 1) { // 栈顶指针等于最大容量减一,栈已满
return 1;
}
return 0;
}
// 入栈操作
int Push(SqStack *S, int x) {
if (StackFull(*S)) { // 栈已满,无法入栈
return 0;
}
S->top++; // 栈顶指针加一
S->data[S->top] = x; // 将元素x入栈
return 1;
}
// 出栈操作
int Pop(SqStack *S, int *x) {
if (StackEmpty(*S)) { // 栈为空,无法出栈
return 0;
}
*x = S->data[S->top]; // 将栈顶元素出栈
S->top--; // 栈顶指针减一
return 1;
}
int main() {
SqStack S;
int x;
InitStack(&S); // 初始化栈
Push(&S, 1); // 入栈
Push(&S, 2);
Push(&S, 3);
Pop(&S, &x); // 出栈
printf("%d\n", x); // 输出出栈元素
Pop(&S, &x);
printf("%d\n", x);
Pop(&S, &x);
printf("%d\n", x);
Pop(&S, &x); // 尝试出栈空栈
return 0;
}
```
需要注意的是,栈顶指针的初始值应该为-1,而不是0。在入栈操作时,先将栈顶指针加一,再将元素入栈;在出栈操作时,先将栈顶元素出栈,再将栈顶指针减一。
c语言代码实现顺序栈的基本操作
可以实现顺序栈的基本操作的C语言代码如下:
```
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100 // 定义栈的大小
typedef int ElemType; // 栈内元素类型
typedef struct {
ElemType data[MAX_SIZE]; // 存储栈内元素的数组
int top; // 栈顶指针
} SqStack; // 定义顺序栈类型
void InitStack(SqStack *S); // 初始化栈
int StackEmpty(SqStack *S); // 判断栈是否为空
int StackFull(SqStack *S); // 判断栈是否已满
void Push(SqStack *S, ElemType x); // 入栈操作
ElemType Pop(SqStack *S); // 出栈操作
ElemType GetTop(SqStack *S); // 获取栈顶元素值
int main() {
SqStack S;
int i;
ElemType x, top;
InitStack(&S); // 初始化栈
// 生成元素
for (i = 1; i <= 10; i++) {
x = i;
Push(&S, x); // 入栈
}
while (!StackEmpty(&S)) {
top = GetTop(&S); // 获取栈顶元素值
printf("%d ", top); // 打印栈顶元素值
Pop(&S); // 出栈
}
return 0;
}
// 初始化栈
void InitStack(SqStack *S) {
S->top = -1;
}
// 判断栈是否为空
int StackEmpty(SqStack *S) {
if (S->top == -1) {
return 1; // 栈为空
}
return 0; // 栈不为空
}
// 判断栈是否已满
int StackFull(SqStack *S) {
if (S->top == MAX_SIZE - 1) {
return 1; // 栈已满
}
return 0; // 栈未满
}
// 入栈操作
void Push(SqStack *S, ElemType x) {
if (StackFull(S)) {
printf("Error: Stack Full.\n"); // 栈已满,无法入栈
return;
}
S->top++; // 栈顶指针加1
S->data[S->top] = x; // 新元素入栈
}
// 出栈操作
ElemType Pop(SqStack *S) {
ElemType x;
if (StackEmpty(S)) {
printf("Error: Stack Empty.\n"); // 栈为空,无法出栈
return -1;
}
x = S->data[S->top]; // 栈顶元素出栈
S->top--; // 栈顶指针减1
return x; // 返回栈顶元素值
}
// 获取栈顶元素值
ElemType GetTop(SqStack *S) {
if (StackEmpty(S)) {
printf("Error: Stack Empty.\n"); // 栈为空,无法获取栈顶元素值
return -1;
}
return S->data[S->top]; // 返回栈顶元素值
}
```