栈的基本使用
栈是一种基于后进先出(LIFO)原则的数据结构。它类似于一叠盘子,只能在顶部进行操作。栈有两个主要操作:
入栈(Push): 将元素放置在栈顶。
出栈(Pop): 从栈顶移除元素。
除了上述两个基本操作,栈还可能支持其他操作,如:
查看栈顶元素(Peek): 查看但不移除栈顶的元素。
判空(isEmpty): 检查栈是否为空。
获取栈的大小(Size): 返回栈中元素的数量。 栈常常用于需要“后进先出”处理方式的场景,如函数调用、表达式求值、浏览器历史记录等。
具体实现如下
//栈的基本使用
#include<stdio.h>
#include<stdlib.h>
#define MAX_SIZE 100 //栈的最大容量
//栈结构体定义
struct Stack{
int items[MAX_SIZE];
int top;
};
//初始化栈
void initializeStack(struct Stack*stack){
stack->top=-1;
}
//判断栈是否为空
int isEmpty(struct Stack*stack ){
return (stack->top==-1);
}
//判断栈是否已满
int isFull(struct Stack *stack){
return(stack->top==MAX_SIZE-1);
}
//向栈中添加元素(入栈)
void push(struct Stack*stack,int value){
if(isFull(stack)){
printf("栈已满,无法插入元素\n");
return ;
}
stack->items[++(stack->top)]=value ;
}
//从栈中删除元素(出栈)
int pop(struct Stack*stack){
if(isEmpty(stack)){
printf("栈已空,无法删除元素\n");
return -1;
}
return stack->items[(stack->top)--];
}
//清空栈
void clearStack(struct Stack *stack){
stack->top=-1;
}
//销毁栈
void destroyStack(struct Stack*stack){
free(stack);
}
//求栈的长度
int stackLength(struct Stack*stack){
return (stack->top+1);
}
int main(){
struct Stack*myStack=(struct Stack*)malloc(sizeof(struct Stack));
if(myStack==NULL){
printf("内存分配失败");
return -1;
}
initializeStack(myStack);
push(myStack,10);
push(myStack,20);
push(myStack,30);
push(myStack,40);
printf("栈的长度为:%d\n",stackLength(myStack));
printf("删除栈顶元素%d\n",pop(myStack));
printf("删除栈顶元素%d\n",pop(myStack));
clearStack(myStack);
printf("清除栈后,栈的长度为:%d\n",stackLength(myStack));
destroyStack(myStack);
return 0;
}
运行效果