栈和队列(栈篇上:链式栈)

一.栈的定义

栈是一种先进后出的线性表,只能在表尾进行插入和删除,有链式栈和顺序栈两种结构。

链式栈的构造似乎没有明确规定表尾表头,所以有的链式栈的构造是使用头插法插入元素,将其栈顶top指向头结点作为表尾;有的则是使用尾插法插入,在最后节点进行插入删除操作,top指向为尾节点作为表尾。

无论哪种方式,原理都是一样的:栈只能在表尾(一端)进行插入删除操作,先进后出,后进先出!

二.栈的节点类型构造

说明:我这里是将top栈顶指针指向尾节点作为表尾。

------SNode结构体是节点类型,分别记录节点的上下逻辑位置以及保存数据

------LinkedStack类型是链式栈的头,类似于链表的头结点,记录了栈中元素个数。

三.链式栈的相关操作

1.创建一个空栈

2.入栈,从栈顶插入一个元素

3.出栈,从栈顶删除一个元素,并将该元素的数据通过形参指针返回给主调函数

4.判断栈是否为空,为空返回1,非空返回0

5.获取栈顶元素,只获取元素的数据,不删除元素

6.清空栈

7.销毁栈

四.测试

int main(void)
{
	LinkedStack * s = NULL;
	int num = 0;

	/* 1.创建一个新的栈 */
	s = LinkedStack_create();

	while(1)
	{
		scanf("%d",&num);
		if(0 == num)
		{
			break;
		}

		/* 将从键盘输入的数据入栈 */
		LinkedStack_Push(s,num);
	}

	//获取栈顶元素
	LinkedStack_GetPop(s,&num);
	printf("栈顶元素:%d\n",num);


	//依次将队列中的数据出队
	while(!LinkedStack_IsEmpty(s))
	{
		LinkedStack_Pop(s,&num);
		printf("%d ",num);
	}
	printf("\n");
}

创建一个链式栈,输入数据,输入0表示人为结束添加节点元素。

结果:

输入 5 6 2 4 9 4 0

0------表结束

输出栈顶元素为4,然后依次出栈,先进后出

出栈顺序为: 4 9 4 2 6 5 符合预期

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值