当前位置: 首页 > news >正文

【数据结构】【栈】算法汇总

一、顺序栈的操作

1.准备工作

#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef struct{SElemType*base;SElemType*top;int stacksize;
}SqStack;

2.栈的初始化

Status InitStack(SqStack &S){S.base=(SElemType*)malloc(MAXSIZE*sizeof(SElemType));if(!S.base) exit(OVERFLOW);S.top=S.base;S.stacksize=STACK_INIT_SIZE;return OK;
}

3.判断栈是否为空

status StackEmpty(Sqstack S){if(S.top=S.base)return TRUE;elsereturn FALSE;
}

4.求栈的长度

int StackLength(SqStack S){return S.top-S.base;
}

5.清空栈

Status ClearStack(SqStack S){if(S.base) S.top=S.base;return OK
}

6.销毁顺序栈

Status DestroyStack(SqStack &S){if(S.base){delete S.base;S.stacksize=0;S.base=S.top=NULL;}return OK;
}

7.顺序栈入栈

Status Push(SqStack &S,SElemType e){if(S.top-S.base>=S.stacksize){newbase=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));if(!newbase) exit(overflow);S.base=newbase;S.top=S.base+S.stacksize;S.stacksize+=STACKINCREMENT;}*S.top++=e;return ok;
}

8.顺序栈的出栈

Status Pop(SqStack &S,SElemType &e){if(S.top==S.base)return ERROR;e=*--S.top;return OK;
}

9.取栈顶元素

Status GetTop(SqStack S,ElemType &e){if(S.base==S.top) return ERROR;E=*(S.top-1);return OK;
}

二、双向栈

1.准备工作

typedef struct{SElemType*base;int top1;int top2;
}sqdustack;

2.初始化

status initsqdustack(sqdustack &tws){tws.base=(Selemtype*)malloc(maxsize*sizeof(Selemtype));if(!tws.base) exit(OVERFLOW);tws.top1=0;tws.top2=maxsize-1;return ok;
}

3.入栈

Status push-sqdustack(sqdustack&tws,int i,selemtype x){if(tws.top1>tws.top2) return error;if(i==0) tws.base[tws.top1++]=x;else tws.base[tws.top2--]=x;return ok;
}

4.出栈

Status pop-sqdustack(sqdustack &tws,int i,selemtype &x){if(i==0){if(tws.top1==0) return error;x=tws.base[--tws.top1];}else{if(tes.top2==maxsize-1) return error;x=tws.base[++tws.top2];}return ok;
}

三、链栈

1.准备工作

typedef struct StackNode{ElemType data;struct SNode*next;
}SNode,*LinkStack;
LinkStack S;

2.初始化

void InitStack(LinkStack &S){S=NULL;return ok;
}

3.判断链栈是否为空

Status StackEmpty(LinkStack S){if(S==NULL) return true;else return false;
}

4.链栈的入栈

Status Push(LinkStack &S,SElemType e){p=(SElemType*)malloc(MAXSIZE*sizeof(SElemType));p->data=e;p->next=S;S=p;return OK;
}

5.链栈的出栈

Status Pop(LinkStack &S,SElemType e){if(S==NULL) return error;e=S->data;p=S;S=S->next;free(p);return ok;
}

6.取栈顶元素

SElemType GetTop(LinkStack S){if(S!=NULL)return S->data;
}

http://www.lryc.cn/news/454767.html

相关文章:

  • 如何训练自己的大模型,答案就在这里。
  • React18新特性
  • 汽车发动机系统EMS详细解析
  • 【社保通-注册安全分析报告-滑动验证加载不正常导致安全隐患】
  • 初学Vue(2)
  • ThinkPHP5基础入门
  • Metal 之旅之MTLLibrary
  • 第十二章 Redis短信登录实战(基于Session)
  • 华为OD机试 - 九宫格游戏(Python/JS/C/C++ 2024 E卷 100分)
  • Pytorch库中torch.normal()详解
  • atcoder-374(a-e)
  • idea2024设置中文
  • 跨境电商独立站轮询收款问题
  • [OS] 3.Insert and Remove Kernel Module
  • updatedb命令:更新locate数据库
  • 分布式共识算法ZAB
  • 程序化交易与非程序化交易者盈利能力孰优孰劣
  • 【JavaEE】【多线程】进程与线程的概念
  • LeetCode hot100---贪心算法专题(C++语言)
  • 《PyTorch深度学习快速入门教程》学习笔记(第15周)
  • kubeadm部署k8s1.28.0主从集群(cri-dockerd)
  • C语言复习概要(四)
  • 【楚怡杯】职业院校技能大赛 “Python程序开发”数据清洗练习
  • 重学SpringBoot3-集成Redis(五)之布隆过滤器
  • BGP路由原理详解
  • Pytorch实现心跳信号分类识别(支持LSTM,GRU,TCN模型)
  • AI股市预测的可参考价值有几何?
  • 【大数据应用开发】2023年全国职业院校技能大赛赛题第02套
  • 2. 将GitHub上的开源项目导入(clone)到(Linux)服务器上——深度学习·科研实践·从0到1
  • 毕业设计项目——基于transformer的中文医疗领域命名实体识别(论文/代码)