[C]链栈的基本知识点、基操(初始化、入栈、出栈、遍历等)图文结合!!!!

链栈

(有图有代码!!!!!)no pic/code you say j8!!!
基本知识点
链栈:栈的链式存储结构,简称链栈(栈的顺序存储结构简称顺序栈)
在这里插入图片描述
空栈:对于链栈来说,空栈其实就是top = NULL的时候

对比顺序栈与链栈:

  • 两者时间复杂度一样,均为O(1);
  • 对于空间性能,顺序栈需要事先确定一个固定长度,可能会存在空间浪费问题,但它的优势是存取时定位方便,而链栈则要求每个元素都有指针域,这同时也增加了一些内存开销,但对于栈的长度无限制
  • 如果栈的使用过程中元素变化不可预料,最好使用链栈,反之,如果他的变化在可控范围内,建议使用顺序栈

基操

  • 栈的链式存储结构
typedef struct Node{
	int data;
	struct Node* next;
}Link_Stack;
Link_Stack *top;

注:链栈的操作大部分和单链表类似,只是在插入和删除上稍微特殊点

  • 栈的初始化
Link_Stack* Init()
{
	return NULL;	//构造一个空栈,链栈区别于单链表,链栈没有头结点
}
  • 入栈操作
Link_Stack* push(Link_Stack *top,int x)
{
	Link_Stack* p = (Link_Stack*)malloc(sizeof(Link_Stack));
	p->data = x;		//存数据
	//类似单链表,修改指针的指向
	p->next = top;	//将当前栈顶指针的值赋给新节点
	top = p;	//将新节点s赋值给栈顶指针
	return top;
}

在这里插入图片描述

  • 出栈操作
Link_Stack* pop(Link_Stack *top)
{
	Link_Stack *p = top;	//将栈顶指针赋值给p,便于接下来的free()操作
	if(!top)
	{
		printf("空栈,出栈无效\n");
		return NULL;
	}
	top = top->next;	//将top指针下移一位,即将当前的top->next赋值给top
	free(p);
}

在这里插入图片描述

  • 获取栈顶元素
int getTopElement(Link_Stack *top)
{
	//可加入判断栈是否为空,此处略
	return top->data;
}
  • 判空
int isEmpty(Link_Stack* top)
{
	return (top?01)//若为空则返回1,反之为0
}
  • 遍历输出
void PrintAll(Link_Stack* top)
{
	Link_Stack* p = top;
	if(!top) {
  		printf("空栈!!!没东西看个鸡儿\n");
 	}
 	else
 	{
 		while(p)
 		{
 			printf("%d",p->data);
 			p = p->next;		//栈底指针域为NULL
 		}
 	}
}

no pic/code you say j8,本期链栈总结结束,这么肝的博主,点个关注,嗯?

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值