C语言代码:1.定义实现栈的数据结构2.栈的初始化 3.入栈、出栈 4.求栈顶元素的值5.栈元素输出 第一行输入元素个数n,随后输入n个整数值 输出栈中元素值,栈最后为空
时间: 2024-09-27 21:11:26 浏览: 6
在C语言中,我们可以创建一个基于数组的简单栈数据结构来实现上述功能。以下是代码示例:
1. 定义实现栈的数据结构(使用数组):
```c
#define MAX_SIZE 100
typedef struct {
int top;
int data[MAX_SIZE];
} Stack;
```
这里定义了一个栈结构体`Stack`,包含两个部分:`top`用于记录栈顶元素的位置,`data[]`作为存储栈元素的数组。
2. 栈的初始化:
```c
void init(Stack *s) {
s->top = -1; // 初始化栈顶为-1,表示空栈
}
```
这个函数将栈顶位置设为-1,表示栈为空。
3. 入栈(push操作):
```c
void push(Stack *s, int value) {
if (s->top < MAX_SIZE - 1) { // 如果栈未满
s->top++;
s->data[s->top] = value;
} else {
printf("Stack overflow.\n");
}
}
```
这个函数检查是否还有空间,然后将新元素放在栈顶并更新`top`。
4. 出栈(pop操作):
```c
int pop(Stack *s) {
if (s->top == -1) { // 如果栈为空
return -1; // 返回-1表示栈空错误
} else {
int value = s->data[s->top]; // 获取栈顶元素
s->top--; // 移除栈顶元素并减小top
return value;
}
}
```
此函数获取并移除栈顶元素,并返回它。
5. 求栈顶元素的值:
```c
int getTop(Stack *s) {
if (s->top != -1) {
return s->data[s->top]; // 非空栈返回栈顶元素
} else {
return -1; // 栈空时返回-1
}
}
```
这个函数直接读取栈顶元素值,如果栈空则返回-1。
6. 栈元素输出(遍历栈顶到栈底):
```c
void printStack(Stack *s) {
for (int i = 0; i <= s->top; i++) {
printf("%d ", s->data[i]); // 输出栈中所有元素
}
printf("\n");
}
```
此函数打印栈中的所有元素,从栈顶开始。
**相关问题--:**
1. 如何处理非法的出栈操作(如当栈为空时试图弹出元素)?
2. 这种数组实现的栈支持动态扩容吗?
3. 如果需要改变栈的最大容量,如何修改代码?