用c语言编写程序栈的基本操作的实现(初始化、进栈、出栈、取栈顶元素、判断栈是否为空、遍历等),要求分别采用顺序和链式存储结构。
时间: 2024-12-20 14:15:33 浏览: 11
C语言实现栈的操作
5星 · 资源好评率100%
在C语言中,我们可以使用数组(顺序存储)或链表(链式存储)来实现程序栈。
**顺序存储(数组)的实现:**
```c
#include <stdio.h>
#define MAX_SIZE 100
typedef struct {
int top; // 栈顶指针
int data[MAX_SIZE];
} Stack;
// 初始化栈
void init(Stack *s) {
s->top = -1;
}
// 进栈(入栈)
void push(Stack *s, int value) {
if (s->top < MAX_SIZE - 1) {
s->data[++s->top] = value;
} else {
printf("Stack overflow\n");
}
}
// 出栈(出栈)
int pop(Stack *s) {
if (s->top == -1) {
printf("Stack underflow\n");
return -1;
} else {
return s->data[s->top--];
}
}
// 取栈顶元素
int getTop(Stack *s) {
if (s->top != -1) {
return s->data[s->top];
} else {
printf("Stack is empty\n");
return -1;
}
}
// 判断栈是否为空
int isEmpty(Stack *s) {
return s->top == -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");
}
}
```
**链式存储(链表)的实现:**
```c
#include <stdio.h>
typedef struct Node {
int data;
struct Node* next;
} Node;
typedef struct {
Node* top;
} Stack;
// 初始化链式栈
void init(Stack *s) {
s->top = NULL;
}
// ...(其他函数同上,需要修改对Node类型的引用)
```
阅读全文