用c语言实现随机输入n个数,按升序顺序实现出栈,入栈输出p,出栈输出c(用顺序栈)
时间: 2024-10-21 15:13:29 浏览: 33
入栈出栈的C语言实现
5星 · 资源好评率100%
在C语言中,我们可以使用数组作为顺序栈来存储整数,并通过基本的栈操作(入栈push、出栈pop)来实现这个功能。下面是一个简单的程序示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义栈结构体
typedef struct {
int* stack; // 存放数据的数组
int top; // 栈顶指针
int capacity; // 栈的最大容量
} Stack;
// 初始化栈
void init(Stack* s, int cap) {
s->stack = (int*)malloc(cap * sizeof(int));
if (!s->stack) {
printf("Memory allocation failed.\n");
exit(1);
}
s->top = -1;
s->capacity = cap;
}
// 判断栈是否满
int is_full(Stack* s) {
return s->top == s->capacity - 1;
}
// 判断栈是否空
int is_empty(Stack* s) {
return s->top == -1;
}
// 入栈
void push(Stack* s, int value) {
if (is_full(s)) {
printf("Stack is full.\n");
return;
}
s->top++;
s->stack[s->top] = value;
}
// 出栈并返回顶部元素
int pop(Stack* s) {
if (is_empty(s)) {
printf("Stack is empty.\n");
return -1; // 返回一个特殊值表示栈为空
}
int value = s->stack[s->top];
s->top--;
return value;
}
// 主函数
int main() {
int n, p, c;
Stack s;
printf("Enter the number of elements to be entered: ");
scanf("%d", &n);
init(&s, n + 1); // 加1是因为需要预留一个位置存放新入栈的元素
// 输入并按顺序保存到栈中
for (int i = 0; i < n; i++) {
scanf("%d", &p);
push(&s, p);
}
printf("Enter a number to search for: ");
scanf("%d", &c);
// 搜索并输出对应的元素
while (!is_empty(&s) && pop(&s) != c) {}
// 如果找到,输出结果;否则说明栈中没有c
if (pop(&s) == c) {
printf("Element found and popped out: %d\n", c);
} else {
printf("Element not found in the stack.\n");
}
// 清理内存
free(s.stack);
return 0;
}
```
在这个程序中,用户首先输入n个整数,然后输入搜索的数字c。程序会按照入栈的顺序查找c是否存在,如果存在则弹出并输出。注意,此代码没有处理异常情况,实际应用中需要加上适当的错误检查。
阅读全文