数据结构--栈

news/2024/9/20 19:58:20

文章目录

    • 基本操作

栈是限定仅在表尾进行插入或者删除的线性表。对于栈来说,表尾端称为栈顶,表头端称为栈低。不含元素的空表称为空栈。因为栈限定在表尾进行插入或者删除,所以栈又被称为后进先出的线性表

在这里插入图片描述

基本操作

栈的初始化
判断是否为空栈
判断是否为满栈
入栈
出栈

#include<stdio.h>
#include<malloc.h>#define STACK_INIT_SIZE 100  //栈的初始容量 
#define STACKINCREMENT 10    //容量增量
#define OK 1 
#define OVERFLOW -2
typedef int SDataType;
typedef int Status;typedef struct {SDataType* base; //栈底指针SDataType* top;  //栈顶指针int StackSize;   //当前已经分配的存储空间,以元素为单位 
}SqStack;//初始化顺序栈,构造一个空栈
Status InitStack(SqStack& S) {//分配存储空间 S.base = (SDataType*)malloc(STACK_INIT_SIZE * sizeof(SDataType));if (!S.base) {//如果分配失败,则返回error return OVERFLOW;}//S.top 始终指向栈顶元素的下一个位置 S.top = S.base;    //初始状态下为空栈 S.StackSize = STACK_INIT_SIZE;   //当前已经分配的存储容量为100个 return OK;
}//入栈
Status Push(SqStack& s, SDataType e) {SDataType* p;//首先判断栈是不是满的(上溢) if (s.top - s.base == s.StackSize) {//追加空间 p = (SDataType*)realloc(s.base, (STACK_INIT_SIZE + STACKINCREMENT) * sizeof(SDataType));if (!p) {//如果没有找到符合条件的存储空间,则返回error return OVERFLOW;}//成功找到则使s.base指向p s.base = p;  //系统会将原来的内容复制过来s.top = s.base + s.StackSize;s.StackSize += STACKINCREMENT;}//先插入元素,然后使栈顶指针加 1 *(s.top) = e;s.top++;return OK;
}//出栈
Status Pop(SqStack& s, SDataType& e) {//判断是否会发生下溢 if (s.top != s.base) {s.top--;    //先将栈顶指针减 1 e = *(s.top);}else {return 0;}return e;
}//判断是否为空栈 
void judgeNull(SqStack& s) {if (s.top == s.base) {printf("此栈为空栈!\n");}else {printf("此栈不为空栈!\n");}
}//判断是否为满栈
void judgeFull(SqStack& s) {if (s.top - s.base == s.StackSize) {printf("栈满!\n");}else {printf("栈未满!\n");}
}int main() {SqStack s;SDataType element;InitStack(s);  //初始化栈//将1-5入栈for (int i = 1; i <= 10; i++) {Push(s, i);}judgeNull(s);judgeFull(s);printf("出栈:\n");//只要栈不为空 while (s.top != s.base) {Pop(s, element);    //出栈的元素用e接收 printf("%d ", element);}printf("\n");judgeNull(s);return 0;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pgtn.cn/news/17641.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

使用Python,OpenCV执行视觉显著性检测(Visual Saliency Detection)

使用Python,OpenCV执行视觉显著性检测(Visual Saliency Detection) 这篇博客将介绍如何使用Python,OpenCV执行显著性检测,这是一个应用图像处理和计算机视觉算法来自动定位图像中最“显著”区域的过程。 通常显著性检测器分为三类算法: 静态显著性运动显著性对象显著性O…

5. 使用PyTorch预先训练的模型执行目标检测

5. 使用PyTorch预先训练的网络执行目标检测 PyTorch是什么&#xff1f;使用PyTorch训练第一个神经网络使用PyTorch训练第一个卷积神经网络使用预训练网络进行PyTorch图像分类使用预训练网络进行PyTorch目标检测&#xff08;今天的博客&#xff09; 这篇博客将介绍如何使用PyT…

机器学习二

文章目录线性回归线性回归 # -*- coding utf-8 -*- # Author : 墙缝里的草 # File : demo1004.py # Software : PyCharmimport numpy as np import random # 线性回归 的函数构造input_data 训练数据集 realresult 训练结果集 theta 参数# 线性回归函数 def _init_(self…

与ObjectDataSource共舞

4&#xff0c;ORM组件XCode&#xff08;与ObjectDataSource共舞&#xff09; XCode为了能更方便的解决大部分问题&#xff0c;不得不“屈身”于ObjectDataSource。 先上一个经典例子&#xff08;ObjectDataSourceGridView&#xff09;&#xff08;ObjectDataSource&#xff09;…

size mismatch for roi_heads.box_predictor.cls_score.weight: copying a param with shape torch.Size([9

1. 报错 RuntimeError: Error(s) in loading state_dict for FasterRCNN: size mismatch for roi_heads.box_predictor.cls_score.weight: copying a param with shape torch.Size([91, 1024]) from checkpoint, the shape in current model is torch.Size([80, 1024]). pytor…

数据结构--队列

文章目录队列队列存储结构特点队列的相关概念&#xff1a;队列的操作&#xff1a;队列的分类&#xff1a;数组实现链表实现队列 队列存储结构特点 &#xff08;1&#xff09;队列中的数据元素遵循“先进先出”的原则 &#xff08;2&#xff09;在队尾添加元素&#xff0c;在队…

文件服务器共享目录设置(二)

三、 设置磁盘配额及文件屏蔽 为了防止用户无限制的上传文件&#xff0c;或上传病毒木马等文件&#xff0c;还需要进一步加强安全设置。用磁盘配额来管理用户的文件夹空间&#xff0c;用文件屏蔽来阻止用户上传有风险的文件。 在win2003中&#xff0c;磁盘配额只能…

机器学习--局部加权线性回归

文章目录局部加权线性回归预测鲍鱼年龄局部加权线性回归 具体理论见上次笔记《线性回归》 预测鲍鱼年龄 import numpy as npclass LocalWeightedLinearRegression(object):def __init__(self,train_data,train_result):""":param train_data: 输入训练数据:p…