链栈-用C语言描述

#include<stdio.h>
#include<malloc.h>

/*
堆栈的链式存储实现
为了简化算法,链栈也可以带一空的表头结点,表头结点后面的第一个结点就是链栈的栈顶结点。
栈中的其他结点通过它们的指针Next链接起来,栈底结点的Next为NULL。
*/

typedef struct SNode *PtrToSNode;
typedef int ElementType;

ElementType ERROR = -1;

struct SNode
{
	ElementType Data;
	PtrToSNode Next;
};

typedef PtrToSNode Stack;

Stack CreateStack() {
	/*构建一个堆栈的头结点,返回该结点的指针*/
	Stack S = (Stack)malloc(sizeof(struct SNode));
	S->Next = NULL;
	return S;
}

bool IsEmpty(Stack S) {
	/*判断堆栈是否为空*/
	return (S->Next == NULL);
}

bool Push(Stack S, ElementType X) {
	/*入栈*/
	Stack TmpCell = (Stack)malloc(sizeof(struct SNode));
	TmpCell->Data = X;
	TmpCell->Next = S->Next;
	S->Next = TmpCell;
	return true;
}


ElementType Pop(Stack S) {
	/*出栈*/
	Stack FirstCell;
	ElementType TopElem;

	if (IsEmpty(S)) {
		printf("堆栈空\n");
		return ERROR;
	}

	else
	{
		FirstCell = S->Next;
		TopElem = FirstCell->Data;
		S->Next = FirstCell->Next;
		free(FirstCell);
		return TopElem;
	}
}

void LinkStackDemo() {
	printf("=============初始化链式存储栈===============\n");
	Stack S = CreateStack();
	printf("=================依次入栈1-5================\n");
	for (int i = 1; i <= 5;i++)
		Push(S, i);
	printf("==================依次出栈=====================\n");
	ElementType x = 0;
	while (true)
	{
		x = Pop(S);
		if (x == -1)
			break;
		printf("%d\t", x);
	}
}

int main() {
	LinkStackDemo();
	return 1;
}

运行结果:

=============初始化链式存储栈===============
=================依次入栈1-5================
==================依次出栈=====================
5    4    3    2    1    堆栈空

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

WUYANGEZRA

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

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

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

打赏作者

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

抵扣说明:

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

余额充值