栈的基本操作的实现(初始化、进栈、出栈、取栈顶元素、判断栈是否为空、遍历等),要求分别采用顺序和链式存储结构。C语言代码及运行结果截图
时间: 2024-11-09 13:25:40 浏览: 140
PHP实现的栈数据结构示例【入栈、出栈、遍历栈】
栈是一种线性的数据结构,通常用于后进先出(LIFO,Last In First Out)的数据访问。以下是使用顺序存储结构(数组)和链式存储结构(链表)实现栈的基本操作:
**顺序存储(数组实现):**
```c
#include <stdio.h>
#define MAX_SIZE 50
typedef struct {
int data[MAX_SIZE];
int top;
} Stack;
// 初始化
void init(Stack *s) {
s->top = -1;
}
// 进栈
void push(Stack *s, int value) {
if (s->top == MAX_SIZE - 1) {
printf("Stack overflow!\n");
return;
}
s->data[++s->top] = value;
}
// 出栈
int pop(Stack *s) {
if (s->top == -1) {
printf("Stack underflow!\n");
return -1; // 返回错误代码
}
return s->data[s->top--];
}
// 取栈顶元素
int peek(Stack *s) {
if (s->top == -1) {
printf("Stack is empty.\n");
return -1;
}
return s->data[s->top];
}
// 判断栈是否为空
int isEmpty(Stack *s) {
return s-1;
}
// 遍历(对于顺序栈,只能通过索引来访问)
void traverse(Stack *s) {
if (!isEmpty(s)) {
for (int i = 0; i <= s->top; ++i) {
printf("%d ", s->data[i]);
}
printf("\n");
} else {
printf("Stack is empty.\n");
}
}
int main() {
Stack stack;
init(&stack);
push(&stack, 1);
push(&stack, 2);
push(&stack, 3);
traverse(&stack); // 输出: 3 2 1
printf("Top element: %d\n", peek(&stack)); // 输出: 3
printf("Popped element: %d\n", pop(&stack)); // 输出: 3
return 0;
}
```
**链式存储(链表实现):**
```c
#include <stdio.h>
typedef struct Node {
int data;
struct Node* next;
} Node;
typedef struct Stack {
Node* top;
} Stack;
// 初始化
void init(Stack *s) {
s->top = NULL;
}
// ...其他函数类似,但需替换数组索引为指针操作...
int main() {
Stack stack;
init(&stack);
// 创建节点并添加到堆栈...
Node* node1 = createNode(1);
Node* node2 = createNode(2);
Node* node3 = createNode(3);
// ...然后像数组栈一样操作
return 0;
}
// 辅助函数:创建新节点
Node* createNode(int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->next = NULL;
return newNode;
}
```
注意:由于文本格式限制,无法提供实际的运行结果截图。在实际环境中运行上述代码,你可以看到每个操作的结果。
阅读全文