利用C语言编程实现栈两种存储表示和各种基本操作 附加源码
时间: 2024-10-16 11:22:11 浏览: 67
在C语言中,我们可以使用数组或链表两种数据结构来实现栈的数据结构。以下是两种基本的实现及其常见操作:
**1. 数组实现栈**
```c
#include <stdio.h>
#define MAX_SIZE 100
typedef struct {
int top;
int data[MAX_SIZE];
} Stack;
// 初始化栈
void init(Stack* s) {
s->top = -1;
}
// 检查栈是否为空
int isEmpty(Stack* s) {
return (s->top == -1);
}
// 检查栈是否已满
int isFull(Stack* s) {
return (s- 1);
}
// 入栈操作(压栈)
void push(Stack* s, int value) {
if (isFull(s)) {
printf("Stack is full.\n");
return;
}
s->data[++s->top] = value;
}
// 出栈操作(弹栈)
int pop(Stack* s) {
if (isEmpty(s)) {
printf("Stack is empty.\n");
return -1; // 返回一个特殊值表示空栈
}
return s->data[s->top--];
}
// 获取栈顶元素但不移除
int peek(Stack* s) {
if (isEmpty(s)) {
printf("Stack is empty.\n");
return -1;
}
return s->data[s->top];
}
```
**2. 链表实现栈**
```c
#include <stdlib.h>
typedef struct Node {
int data;
struct Node* next;
} StackNode;
typedef struct {
StackNode* top;
} Stack;
// 初始化链表栈
void init(Stack* s) {
s->top = NULL;
}
// ...其他操作类似,这里省略,因为链表栈的基本操作(如入栈、出栈等)都是通过头结点的操作实现的。
```
**
阅读全文