栈的实现 (栈篇&&刷题笔记)

栈(FILO)

数组栈:数组加栈顶下标======默认栈底为arr[0],

#define size 10 //容量
typedef int DataType;

typedef struct//数组栈
{
DataType data[size];
int top;//栈顶指针
}sqStack;

//===================push压栈操作
bool Mypush(sqStack *sta,DataType elem)
{
	if (sta->top == size-1)//top指向栈顶,栈已经满了
	return false;
	else
	{
	s->top++;//压入一个之前,栈顶下标加1
	s->data[s->top]=elem;
	return true;
	}		
}
//========pop出栈(有的分成了两步一个pop弹出,一个top返回顶部的值)
bool Mypop(sqStack *sta,DataType *elem)//利用指针把栈顶的值带出来 
{
	if(s->top ==-1//数组栈为空
		return false;
	else
	{
		*elem=s->data[s->top];
		s->top--;
		return true;
	}	
}

链式栈:链表加栈顶指针


typedef int DataType;
typedef struct Node//单链表---- 一个节点
{
DataType data;
struct Node *next;
}Node, *Nodeptr;

typedef struct LinkStack//链式栈
{
Node* top_ptr;   //等价于Nodeptr top;=======相当于头结点
int count;
}LinkStack;

//================push压栈
bool Mypush(LinkStack *stack,DataType elem)
{
	if (!stack)
		return false;
	Node* node=(Node *)malloc(sizeof(Node));//分配一个新的节点空间
	
	node->data=elem;
	node->next=stack->top_ptr;//当前栈指针(指向的是一个节点) 赋值给
	stack->top_ptr = node;// 刚刚建立的新节点下一个节点的地址 赋值给 链式栈的栈顶指针
	
	stack->count++;
	return true;
}

//=================pop出栈
bool Mypop(LinkStack *stack,DataType *elem)
{
	if (StackEmpty(*stack))
		return false;
	else
	{
		Node *node;
		*elem=stack->top_ptr->data;
		node=stack->top_ptr;//栈指针赋给新节点的地址
		stack->top_ptr=stack->top_ptr->next;//sp下移一位,指向后一节点
		
		stack->count--;
		return true;		
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

栋哥爱做饭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值