栈的实现及应用代码 c语言代码
时间: 2024-01-02 22:03:27 浏览: 82
栈(Stack)是一种线性数据结构,它具有“先进后出”的特点。栈只允许在表尾进行插入和删除操作,所以栈又称为“后进先出”(Last In First Out,简称LIFO)的线性表。栈的应用非常广泛,例如表达式求值、函数调用、递归等等。
以下是一份基于C语言实现的栈代码,包含初始化、入栈、出栈、清空栈等基本操作。
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100 // 定义栈的最大容量
typedef int ElemType; // 定义栈中元素的类型
typedef struct {
ElemType data[MAX_SIZE];
int top; // 栈顶指针
} Stack;
// 初始化栈
void initStack(Stack *s) {
s->top = -1; // 栈顶指针初始化为-1,表示栈为空
}
// 判断栈是否为空
int isEmpty(Stack *s) {
return s->top == -1;
}
// 判断栈是否已满
int isFull(Stack *s) {
return s->top == MAX_SIZE - 1;
}
// 入栈操作
int push(Stack *s, ElemType e) {
if (isFull(s)) {
printf("Stack is full!\n");
return 0;
}
s->top++; // 栈顶指针加1
s->data[s->top] = e; // 将元素e入栈
return 1;
}
// 出栈操作
int pop(Stack *s, ElemType *e) {
if (isEmpty(s)) {
printf("Stack is empty!\n");
return 0;
}
*e = s->data[s->top]; // 将栈顶元素赋值给*e
s->top--; // 栈顶指针减1
return 1;
}
// 清空栈
void clearStack(Stack *s) {
s->top = -1;
}
// 获取栈顶元素
int getTop(Stack *s, ElemType *e) {
if (isEmpty(s)) {
printf("Stack is empty!\n");
return 0;
}
*e = s->data[s->top]; // 将栈顶元素赋值给*e
return 1;
}
int main() {
Stack s;
initStack(&s); // 初始化栈
// 入栈操作
push(&s, 1);
push(&s, 2);
push(&s, 3);
// 获取栈顶元素
ElemType top;
getTop(&s, &top);
printf("top: %d\n", top);
// 出栈操作
while (!isEmpty(&s)) {
ElemType e;
pop(&s, &e);
printf("%d ", e);
}
printf("\n");
return 0;
}
```
以上代码实现了栈的基本操作,你可以在此基础上进行扩展,实现更多栈的应用。
阅读全文