栈定义:栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
😠
操作:
出入栈;获取栈顶;获取大小;判空;
数组实现/链表实现
#include<stdio.h>
#include<stdbool.h>
#include<stdlib.h>
#define Type int //定义栈数据类型
#define Capacity 20 //设置栈最大容量
//数组实现栈
typedef struct stack
{
Type data[Capacity];//此处 Type 为 int 类型
int top;//栈顶,此处实现为 top为 -1 时为空栈;
}stack;
//入栈
void stack_push(stack* s,Type a)
{
s->data[++s->top] = a;//入栈并且top++;
}
//判定栈是否为空
bool isEmpty(stack* s)
{
return s->top == -1;
}
//出栈
void stack_pop(stack* s)
{
if (isEmpty(s))//判空
{
return;
}
s->top--;
}
//获取栈大小
int GetSize(stack* s)
{
return s->top + 1;
}
//获取栈顶元素
Type GetPop(stack*s)
{
return s->data[s->top];
}
//链表实现栈
typedef struct Node //节点定义
{
Type data;
struct Node* next;
}Node;
typedef struct Lstack //定义栈
{
struct Node* top;//栈顶,头插法实现;
int size;//记录大小,此处设为0;
}Lstack;
//节点创建
Node* nodeCreate(Type val)
{
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->next = NULL;
newNode->data = val;
return newNode;
}
//入栈
void Lstackpush(Lstack* s, Type val)
{
Node* new = nodeCreate(val);
if (s->top == NULL)
{
s->top = new; s->size++;
return;
}
new->next = s->top;
s->top = new;
s->size++;
}
//出栈
void Lstackpop(Lstack* s)
{
Node* tmp = s->top;
s->top = s->top->next;
s->size--;
free(tmp);
}
//获取大小
//判空
//获取栈顶元素
int main()
{
//数组实现栈
struct stack s;
s.top = -1;
//链表实现栈
struct Lstack L;
L.size = 0;
L.top = NULL;
return 0;
}
发现错误,欢迎大家指出哦(●'◡'●);
😚