实验内容 1.编写一个程序实现顺序栈的各种基本运算。 实验步骤: 1. 初始化顺序栈 2. 插入元素 3. 删除栈顶元素 4. 取栈顶元素 5. 遍历顺序栈 6. 置空顺序栈 以上每步为一个函数,必须画出每个函数的流程图。 用c语言编写
时间: 2024-12-19 09:17:39 浏览: 34
实验内容:
本实验的目标是使用C语言编写一个简单的顺序栈数据结构,并实现其基本操作。顺序栈是一种线性表,只允许在一端进行插入和删除操作,通常采用数组作为底层存储。
**实验步骤**:
1. **初始化顺序栈**:
创建一个顺序栈所需的数组,并设置栈顶指针top为-1表示栈为空。例如:
```c
#include <stdio.h>
typedef struct Stack {
int capacity;
int top;
int* data;
} Stack;
void init(Stack* stack, int size) {
stack->capacity = size;
stack->top = -1;
stack->data = (int*)malloc(stack->capacity * sizeof(int));
}
```
流程图:初始化内存并设置初始状态。
2. **插入元素(压栈)**:
当栈不满时,将新元素存放在data数组栈顶位置,并更新top指针。
```c
void push(Stack* stack, int value) {
if (stack->top < stack->capacity - 1) {
stack->data[++stack->top] = value;
} else {
printf("Stack overflow\n");
}
}
```
流程图:检查空间,如果可用则增加栈顶元素并更新top。
3. **删除栈顶元素(弹栈)**:
检查栈是否为空,然后将栈顶元素移除并返回。
```c
int pop(Stack* stack) {
if (stack->top == -1) {
printf("Stack underflow\n");
return -1; // 返回错误值
} else {
return stack->data[stack->top--];
}
}
```
流程图:检查栈顶,取值并减小top。
4. **取栈顶元素**:
相当于查看栈顶而不实际移除,若栈不空则返回顶部元素。
```c
int peek(Stack* stack) {
if (stack->top != -1) {
return stack->data[stack->top];
} else {
printf("Stack is empty\n");
return -1; // 返回错误值
}
}
```
5. **遍历顺序栈**:
使用循环访问栈中的所有元素。
```c
void traverse(Stack* stack) {
if (stack->top >= 0) {
for (int i = 0; i <= stack->top; i++) {
printf("%d ", stack->data[i]);
}
printf("\n");
} else {
printf("Stack is empty\n");
}
}
```
流程图:打印数组的内容。
6. **置空顺序栈**:
清空栈顶元素并将top设为-1。
```c
void clear(Stack* stack) {
stack->top = -1;
free(stack->data);
stack->data = NULL;
}
```
流程图:释放已分配的内存并设置栈为空。
完成以上函数后,你可以组合这些函数绘制出整个操作过程的流程图。在实践中,确保处理好边界条件,避免溢出或下溢的情况。
阅读全文