c语言栈的实现和运算代码
时间: 2024-10-13 21:16:34 浏览: 37
四则运算,C语言栈实现.rar
C语言中的栈可以通过数组或链表来实现。下面是数组实现的代码示例:
```c
#define MAX_SIZE 100 // 栈的最大容量
int stack[MAX_SIZE]; // 定义一个数组作为栈
int top = -1; // 栈顶指针初始化为-1
// 判断栈是否为空
int is_empty() {
return top == -1;
}
// 判断栈是否已满
int is_full() {
return top == MAX_SIZE - 1;
}
// 入栈操作
void push(int data) {
if (is_full()) {
printf("Stack overflow!\n");
return;
}
stack[++top] = data;
}
// 出栈操作
int pop() {
if (is_empty()) {
printf("Stack underflow!\n");
return -1;
}
return stack[top--];
}
// 获取栈顶元素
int peek() {
if (is_empty()) {
printf("Stack is empty!\n");
return -1;
}
return stack[top];
}
```
上述代码中,我们定义了一个数组`stack`作为栈,同时定义了一个`top`变量作为栈顶指针。`is_empty()`和`is_full()`函数用于判断栈是否为空或已满,`push()`函数用于入栈操作,`pop()`函数用于出栈操作,`peek()`函数用于获取栈顶元素。
下面是链表实现的代码示例:
```c
typedef struct node {
int data;
struct node* next;
} Node;
Node* top = NULL; // 栈顶指针初始化为NULL
// 判断栈是否为空
int is_empty() {
return top == NULL;
}
// 入栈操作
void push(int data) {
Node* new_node = (Node*)malloc(sizeof(Node));
new_node->data = data;
new_node->next = top;
top = new_node;
}
// 出栈操作
int pop() {
if (is_empty()) {
printf("Stack underflow!\n");
return -1;
}
int data = top->data;
Node* temp = top;
top = top->next;
free(temp);
return data;
}
// 获取栈顶元素
int peek() {
if (is_empty()) {
printf("Stack is empty!\n");
return -1;
}
return top->data;
}
```
上述代码中,我们定义了一个链表作为栈,同时定义了一个`top`指针作为栈顶指针。`is_empty()`函数用于判断栈是否为空,`push()`函数用于入栈操作,`pop()`函数用于出栈操作,`peek()`函数用于获取栈顶元素。
阅读全文