C语言之链式栈简单实现

代码如下:

/*
	链式栈:实现接口
	判栈空
	返回栈顶元素
	入栈
	出栈
	遍历栈
*/
#include <stdio.h>
#include <stdlib.h>

//栈节点
typedef struct linkstack
{
	int data;
	struct linkstack *pNext;
}LINKSTACK_T;

typedef struct stack
{
	LINKSTACK_T  *Top;
	LINKSTACK_T  *Buttom;
	int datalen;
}STACK_T;

//创建栈
STACK_T *Create_Stack()
{
	STACK_T *pStack = NULL;

	pStack = (STACK_T *)malloc(sizeof(STACK_T));
	if (pStack == NULL)
	{
		return NULL;
	}

	pStack->Top = pStack->Buttom = NULL;
	pStack->datalen = 0;

	return pStack;
}

//判栈空
int Is_StackEmpty(STACK_T *pStack)
{
	return (pStack->Top == NULL) ? -1 : 0;
}

//返回栈顶元素
int Stack_Top(STACK_T *pStack)
{
	return pStack->Top->data;
}


//入栈
int Push(STACK_T *pStack, int data)
{
	LINKSTACK_T *pInSatck = NULL;
	pInSatck = (LINKSTACK_T *)malloc(sizeof(LINKSTACK_T));
	if (pInSatck == NULL)
	{
		printf("Push:malloc failed.\n");
		return -1;
	}

	pInSatck->data = data;
	pInSatck->pNext = pStack->Top;
	pStack->Top = pInSatck;
	pStack->datalen++;

	printf(">>>>数据[%d]入栈<<<<\n", pStack->Top->data);

	return 0;
}

//出栈
int Pop(STACK_T *pStack)
{
	LINKSTACK_T *pOutStack = NULL;
	int Tempdata = 0;

	if (Is_StackEmpty(pStack) == -1)
	{
		printf("Pop:栈空.\n");
		return -1;
	}

	pOutStack = (LINKSTACK_T *)malloc(sizeof(LINKSTACK_T));
	if (pOutStack == NULL)
	{
		printf("Pop:malloc failed.\n");
		return -1;
	}

	Tempdata = pStack->Top->data;
	pOutStack = pStack->Top->pNext;
	free(pStack->Top);
	pStack->Top = pOutStack;
	pStack->datalen--;

	printf("<<<<数据[%d]出栈>>>>\n", Tempdata);

	return Tempdata;
}


//遍历栈
int Traversal_Stack(STACK_T *pStack)
{
	LINKSTACK_T *pStackTop = pStack->Top;
	//判栈空
	if (Is_StackEmpty(pStack) == -1)
	{
		printf("Traversal_Stack:栈空.\n");
		return -1;
	}

	printf("当前栈内共[%d]个元素,分别为:", pStack->datalen);
	while (pStackTop != NULL)
	{
		printf("%d\t",pStackTop->data);
		pStackTop = pStackTop->pNext;
	}
	printf("\n\n");

	return 0;
}




int main()
{
	STACK_T *pStack = NULL;

	//创建栈
	pStack = Create_Stack();

	//入栈
	Push(pStack, 10);
	Push(pStack, 20);
	Push(pStack, 30);
	Push(pStack, 40);
	Push(pStack, 50);

	printf("----------------------------------------------------------------------------\n\n");

	//遍历栈
	Traversal_Stack(pStack);

	printf("----------------------------------------------------------------------------\n\n");

	//出栈
	Pop(pStack);
	Pop(pStack);
	Pop(pStack);
	Pop(pStack);
	Pop(pStack);
	Pop(pStack);

	system("pause");
	return 0;

}


效果如下:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值