帮我用C语言写一个堆栈出栈入栈的函数吧
时间: 2023-02-22 19:21:43 浏览: 44
好的,以下是一个简单的C语言代码实现堆栈的出栈和入栈的函数。
```
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
int stack[MAX_SIZE];
int top = -1;
void push(int value) {
if (top == MAX_SIZE - 1) {
printf("Error: Stack overflow\n");
return;
}
top++;
stack[top] = value;
}
int pop() {
if (top == -1) {
printf("Error: Stack underflow\n");
return -1;
}
int value = stack[top];
top--;
return value;
}
int main() {
push(1);
push(2);
push(3);
printf("%d\n", pop());
printf("%d\n", pop());
printf("%d\n", pop());
return 0;
}
```
希望对你有所帮助!
相关问题
帮我 利用“数组”作为存储结构方法实现“堆栈”的基本操作,包括:创建堆栈、入栈、出栈、空栈、满栈等操作写一个C语言程序
好的,下面是一个用数组实现堆栈的基本操作的C语言程序:
```c
#include <stdio.h>
#include <stdbool.h>
#define MAX_SIZE 100
int stack[MAX_SIZE];
int top = -1;
void createStack() {
top = -1;
}
void push(int value) {
if (top >= MAX_SIZE - 1) {
printf("Error: Stack overflow\n");
} else {
top++;
stack[top] = value;
}
}
int pop() {
int value = -1;
if (top < 0) {
printf("Error: Stack underflow\n");
} else {
value = stack[top];
top--;
}
return value;
}
int peek() {
return stack[top];
}
bool isEmpty() {
return top < 0;
}
bool isFull() {
return top >= MAX_SIZE - 1;
}
int main() {
createStack();
push(10);
push(20);
push(30);
printf("Top element: %d\n", peek());
while (!isEmpty()) {
int value = pop();
printf("Popped element: %d\n", value);
}
return 0;
}
```
在这个程序中,我们定义了一个长度为100的数组 `stack` 来作为堆栈的存储结构。`top` 用来记录堆栈顶部元素的下标,初始化为 -1 表示堆栈为空。
`createStack()` 函数用来创建一个空的堆栈,即将 `top` 重置为 -1。
`push()` 函数用来将元素入栈。如果堆栈已满,则输出错误信息;否则,将 `top` 加1并将元素存放在 `stack[top]` 中。
`pop()` 函数用来将元素出栈。如果堆栈为空,则输出错误信息;否则,将 `top` 减1并返回 `stack[top]` 中的元素。
`peek()` 函数用来查看堆栈顶部的元素,但不将其出栈。
`isEmpty()` 函数用来检查堆栈是否为空,即 `top` 是否小于0。
`isFull()` 函数用来检查堆栈是否已满,即 `top` 是否大于等于 MAX_SIZE - 1。
在 `main()` 函数中,我们首先调用 `createStack()` 函数创建一个空的堆栈,然后使用 `push()` 函数将三个元素入栈。接着使用 `peek()` 函数查看堆栈顶部的元素,并使用 `pop()` 函数将所有元素出栈并输出。
用c语言实现随机输入n个数,按升序顺序实现出栈,入栈输出p,出栈输出c
在C语言中,你可以通过动态内存分配和链表的方式来实现这个功能。首先,你需要创建一个结构体来存储数据和指向下一个节点的指针,然后使用堆栈(尽管C语言本身并没有内置的堆栈结构,但可以手动实现类似堆栈的行为)来管理元素。
以下是一个简单的示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义结构体来存储数据和一个指向下一个元素的指针
typedef struct Node {
int data;
struct Node* next;
} StackNode;
// 初始化堆栈头部
StackNode* top = NULL;
// 函数用于插入元素到堆栈
void push(int num) {
StackNode* newNode = (StackNode*)malloc(sizeof(StackNode));
if (newNode == NULL) {
printf("Memory allocation failed.\n");
return;
}
newNode->data = num;
newNode->next = top;
top = newNode;
}
// 函数用于从堆栈顶部删除并返回元素
int pop() {
if (top == NULL) {
printf("Stack is empty.\n");
return -1; // 返回一个错误值表示空栈
}
int data = top->data;
StackNode* temp = top;
top = top->next;
free(temp); // 释放已删除节点的内存
return data;
}
// 主函数,接受用户输入
int main() {
int n, p, c;
printf("Enter the number of elements to be pushed: ");
scanf("%d", &n);
for (int i = 0; i < n; ++i) {
printf("Enter element %d: ", i + 1);
scanf("%d", &push(i + 1)); // 入栈操作,同时检查是否成功
}
printf("Enter a position (0-based index) to print: ");
scanf("%d", &p);
if (p >= 0 && p <= n - 1) {
c = pop(); // 出栈操作,注意检查结果
printf("Element at position %d is: %d\n", p, c);
} else {
printf("Invalid position.\n");
}
return 0;
}
```
在这个程序中,用户会被提示输入n个整数,并选择一个位置p。程序会将这些数字按顺序入栈,然后根据指定位置出栈并打印相应的数值。注意,如果出栈位置无效(即超出范围),程序会给出相应的提示。
阅读全文