堆栈 顺序存储与链式存储的实现

堆栈 :具有一定操作约束的线性表,只在一端做插入,删除,它的特点是后入先出,
就相当于羽毛球筒;
栈的顺序存储实现
#define MaxSize // 储存数据元素的最大个数
typedef struct SNode *Stack;
struct SNode{
	ElementType Data[MaxSize];
	int Top;
}; 
void Push(Stack PtrS,ElementType item){ //入栈 
	if(PtrS->Top=MaxSize-1){
		printf("堆栈满");
		return; 
	}
	else {
		PtrS->Data[++(PtrS->Top)]=item;
		return;
	}
}
ElementType Pop(Stack PtrS){
	if(PtrS->Top==-1){
		printf("堆栈空");
		return ERROR; 
	}
	else {
		return (PtrS->Data[(PtrS->Top)--]);
	}
}
堆栈的链式存储实现
栈的链式存储结构实际上就是一个单链表,叫做栈链。插入和删除都在栈顶进行;
typedef struct SNode *Stack;
struct SNode{
	ElementType Data;
	struct SNode *Next;
}; 
Stacck CreateStack(){//构建一个堆栈的头结点,返回指针 
	Stack S;
	s=(Stack)malloc(sizeof(struct SNode));
	s->Next=NULL;
	return S;
}
int IsEmpty(Stack S){ //判断堆栈是否为空 
	return (S->Next=NULL);
}
void Push(ElementType item,Stack S){ //将元素item压入堆栈S 
	struct SNode *TmpCell;
	TmpCell=(struct SNode *)malloc(sizeof (struct SNode));
	TmpCell->Element=item;
	TmpCell->Next=S->Nect;
	s->Next=TmpCell;
}
ElementType Pop(Stack S){ //删除并返回堆栈s的栈顶元素 
	struct SNode *FirstCell;
	ElementType TopElem;
	if(IsEmpty(s)){
		printf("堆栈空");
		return NULL;
	}
	else {
		FirstCell=S->Next;
		S->Next=FirstCell->Next;
		TopElem=FirstCell->Element;
		free(FirstCell);
		return TopElem;
	}
} 

堆栈的入队和出队操作在队头进行

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值