在一个C语言程序中,实现顺序栈和链栈的初始化,判栈空,出栈,入栈,读栈顶元素操作。要在一个CC语言程序中完成
时间: 2024-10-21 15:06:11 浏览: 27
在C语言中,我们可以分别实现顺序栈(数组栈)和链栈(动态内存栈)的操作。
**顺序栈(数组栈)**:
```c
#include <stdio.h>
#define MAX_SIZE 100
typedef struct {
int data[MAX_SIZE];
int top;
} Stack;
// 初始化栈
void init(Stack *s) {
s->top = -1; // 栈顶默认为空
}
// 判栈空
int is_empty(Stack *s) {
return (s->top == -1);
}
// 出栈
int pop(Stack *s) {
if (is_empty(s)) {
printf("Stack underflow.\n");
return -1;
}
int item = s->data[s->top]; // 保存栈顶元素
s->top--; // 移动栈顶指针
return item;
}
// 入栈
void push(Stack *s, int value) {
if (s->top >= MAX_SIZE - 1) {
printf("Stack overflow.\n");
return;
}
s->data[++s->top] = value;
}
// 读栈顶元素
int peek(Stack *s) {
if (is_empty(s)) {
printf("Stack is empty.\n");
return -1;
}
return s->data[s->top];
}
```
**链栈(动态内存栈)**:
```c
#include <stdlib.h>
#include <stdbool.h>
typedef struct Node {
int data;
struct Node* next;
} Node;
typedef struct {
Node* top;
} LinkedStack;
// 初始化链栈
void init_LinkedStack(LinkedStack *s) {
s->top = NULL;
}
// 判栈空
bool is_empty(LinkedStack *s) {
return s->top == NULL;
}
// 出栈
int pop(LinkedStack *s) {
if (is_empty(s)) {
printf("Stack underflow.\n");
return -1;
}
Node* temp = s->top;
s->top = s->top->next;
int item = temp->data;
free(temp); // 释放节点内存
return item;
}
// 入栈
void push(LinkedStack *s, int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->next = s->top;
s->top = newNode;
}
// 读栈顶元素
int peek(LinkedStack *s) {
if (is_empty(s)) {
printf("Stack is empty.\n");
return -1;
}
return s->top->data;
}
```
阅读全文