用c语言写一个程序一个顺序栈中连续取出两个元素
时间: 2024-10-09 10:13:22 浏览: 14
在 C 语言中,我们可以创建一个简单的顺序栈(基于数组实现),然后设计一个函数来连续地取出两个元素。由于顺序栈一次只能压入一个元素,所以为了连续取两个元素,我们需要维护一个额外的指针来指向下一个将要读取的元素。以下是相应的代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 10
// 定义栈结构体
typedef struct {
int* stack;
int top; // 栈顶指针
int size; // 栈大小
} Stack;
// 初始化栈
Stack* create_stack(int capacity) {
Stack* s = (Stack*)malloc(sizeof(Stack));
if (s == NULL) {
printf("Memory allocation failed.\n");
return NULL;
}
s->stack = (int*)malloc(capacity * sizeof(int));
if (s->stack == NULL) {
free(s);
return NULL;
}
s->top = -1;
s->size = capacity;
return s;
}
// 入栈操作
void push(Stack* s, int value) {
if (s->top >= s->size - 1) {
printf("Stack is full.\n");
return;
}
s->top++;
s->stack[s->top] = value;
}
// 出栈操作,如果需要连续出两个元素,这里会先出一个,并更新next_p作为下个元素的位置
int pop_and_get_next(Stack* s) {
if (s->top == -1) {
printf("Stack is empty.\n");
return -1;
}
int value = s->stack[s->top];
s->top--;
// 如果还有下一个元素,返回并更新 next_p
if (s->top + 1 < s->size && s->top != -1) {
int next_value = s->stack[s->top + 1];
s->top++; // 移动到下一个元素
return next_value;
} else {
return value;
}
}
// 测试
int main() {
Stack* s = create_stack(MAX_SIZE);
if (s) {
push(s, 1);
push(s, 2);
push(s, 3);
int first = pop_and_get_next(s); // 取出第一个元素 2,next_p指向3
printf("First element: %d\n", first);
int second = pop_and_get_next(s); // 取出第二个元素 3
printf("Second element: %d\n", second);
free(s->stack);
free(s);
}
return 0;
}
```
在这个程序中,我们首先初始化一个栈,然后依次入栈三个元素。`pop_and_get_next` 函数会弹出栈顶元素,并如果栈内有剩余元素,它还会获取并返回下一个元素。注意,这个例子假设栈中有足够的元素。