前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据结构算法整理-03-顺序栈与链栈

数据结构算法整理-03-顺序栈与链栈

作者头像
devi
发布2021-08-18 15:40:06
2440
发布2021-08-18 15:40:06
举报
文章被收录于专栏:搬砖记录

特点:

  • 先入先出
  • 出入口只有一个(弹夹)

1. 顺序栈

1.1 定义

代码语言:javascript
复制
#include<stdio.h>
#include<stdlib.h> 
#define MaxSize 64
typedef int datatype;

typedef struct 
{
	datatype data[MaxSize];
	int top;
}seqstack;

1.2 初始化

代码语言:javascript
复制
seqstack* InitStack(seqstack* s)
{
	s=(seqstack*)malloc(sizeof(seqstack));
	s->top=-1;
    return s;
}

1.3 入栈

代码语言:javascript
复制
int Push(seqstack *sstack,datatype x)//入栈; 
{
	if(sstack->top==MaxSize-1)
	{
		printf("stack full!\n");
		return -1;
	}	

	sstack->top++;
	sstack->data[sstack->top]=x;
	
	return 1;
} 

1.4 出栈

代码语言:javascript
复制
int Pop(seqstack *sstack)//出栈;
{
	if(sstack->top==-1)
	{
		printf("OVER->Top = %d",sstack->top);
		return -1;
	}
	printf("Pop %d\n",sstack->data[sstack->top]);
	sstack->top--;
	return 1;
}

2. 链栈(重点)

2.1 定义

代码语言:javascript
复制
typedef struct node
{
	datatype data;
	struct node * next;
}LinkStack;

LinkStack *top;

2.2 入栈

代码语言:javascript
复制
LinkStack* Push(LinkStack* top,datatype x)
{
	LinkStack* p;
	p = (LinkStack)malloc(sizeof(LinkStack));
	p->data = x;
	p->next = top->next;
	top=p;
	return top;
}

2.3 出栈

代码语言:javascript
复制
LinkStack* Pop(LinkStack* top)
{
	LinkStack* q;
	if(!top){
		printf("Stack null!");
		return NULL;
	}
	q=top->next;
	top=top->next;
	free(q);
	return top;
}

记忆总结

  1. 链栈数据是通过数组存放,但外层依旧是一个结构体(跟顺序表一样)
  2. 栈满:top==MaxSize-1 为什么要减一?因为栈空时top=-1而非1,相当于错开了一位。为什么top不从1开始?方便利用top作为数组下标去索引数据
  3. 入栈只需要将top++且top指向的位置赋为新值即可
  4. 出栈只需要top- -

  1. 链栈就是只通过一个top指针连接、只进行头插法、头删除的单链表。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/12/22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 顺序栈
    • 1.1 定义
      • 1.2 初始化
        • 1.3 入栈
          • 1.4 出栈
          • 2. 链栈(重点)
            • 2.1 定义
              • 2.2 入栈
                • 2.3 出栈
                • 记忆总结
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档