数据结构——栈和队列

server/2024/11/13 5:31:24/

目录

栈和队列

1.栈FILO

  顺序栈:(空增栈)  

 链式栈

2.队列

栈和队列

栈和队列是特殊的表状结构
表可以在任意位置插入和删除
栈和队列只允许在固定位置插入和删除

1.栈FILO

先进后出,后进先出

 栈顶:允许入栈出栈的一端称为栈顶
 栈底:不允许入栈和出栈的一端称为栈底
 入栈(压栈):将数据元素放入栈顶
 出栈(弹栈):将数据元素从栈顶位置取出

  顺序栈:(空增栈)  

     结构体定义:

//存放数据的类型
typedef int DataType;//标签类型
typedef struct stack 
{DataType *pData;int Top;int tLen;
}SeqStack
SeqStack *CreateSeqStack(int MaxLen)
{SeqStack *pTmpStack = NULL;//1.申请标签空间pTmpStack = malloc(sizeof(SeqStack));if (NULL == pTmpStack){return NULL;}//2.对每个成员赋初值pTmpStack->tLen = MaxLen;pTmpStack->Top = 0;pTmpStack->pData = malloc(MaxLen * sizeof(DataType));if (NULL == pTmpStack->pData){return NULL;}//3.申请存放数据的空间//4.返回标签地址 return pTmpStack;
}int IsFullSeqStack(SeqStack *pTmpStack)
{return pTmpStack->tLen == pTmpStack->Top ? 1 : 0;
}int IsEmptySeqStack(SeqStack *pTmpStack)
{return 0 == pTmpStack->Top ? 1 : 0;
}int PushSeqStack(SeqStack *pTmpStack, DataType TmpData)
{if (IsFullSeqStack(pTmpStack)){return -1;}pTmpStack->pData[pTmpStack->Top] = TmpData;pTmpStack->Top++;return 0;
}DataType PopSeqStack(SeqStack *pTmpStack)
{if (IsEmptySeqStack(pTmpStack)){return -1;}pTmpStack->Top--;return pTmpStack->pData[pTmpStack->Top];
}int DestroySeqStack(SeqStack **ppTmpStack)
{free((*ppTmpStack)->pData);free(*ppTmpStack);*ppTmpStack = NULL;return 0;
}

 链式栈

可以使用内核链表实现

步骤1.使用头插法,插入到链表中(入栈)

           2.每次删除,始终删头结点指向的下一个节点next;(出栈)

#include "list.h"
#include <stdio.h>typedef struct data 
{struct list_head node;int data;
}data_t;int main(void)
{struct list_head *ptmpnode = NULL;data_t d[5] = {{{NULL, NULL}, 1},{{NULL, NULL}, 2},{{NULL, NULL}, 3},{{NULL, NULL}, 4},{{NULL, NULL}, 5},};int i = 0;//定义链表空节点,并初始化struct list_head head;INIT_LIST_HEAD(&head);//将5个数据头插法插入链表中for (i = 0; i < 5; i++){list_add(&d[i].node, &head);}//只要链表不为空将第一个节点出栈while (!list_empty(&head)){   ptmpnode = head.next;printf("%d ", list_entry(ptmpnode, data_t, node)->data);list_del(head.next);}printf("\n");return 0;
}
2.队列

先进先出,后进后出(排队)

也可以使用内核链表实现

步骤:1.使用尾插法,插入到链表中(入队)

           2.每次删除,始终删头结点指向的下一个节点next;(出队)


http://www.ppmy.cn/server/112396.html

相关文章

手把手教ESP32连接阿里云

一、阿里云的配置 1、进入物联网平台 2、进入管理控制台 3、进入公共实例 4、进入设备管理-->点击产品 5、进行产品创建 6、返回产品&#xff0c;就有测试01产品存在了 7、点击管理设备 8、进行设备添加 8、添加设备之后就有设备wenshidu存在了 9.进去查看 10、进入功能定…

mac电脑里面的 磁盘分区,容器,宗卷,宗卷组的理解和使用

在mac电脑里面我们一般都是使用宗卷&#xff0c;他和我们常见的pc机器硬盘的分区是有区别的。 对于物理硬盘来说 不管是分区还是宗卷&#xff0c;他们都是逻辑上面的概念。 分区 mac电脑里面的分区 和 pc电脑中的分区差不多&#xff0c; 他们都是针对的物理硬盘&#xff0c;…

【区块链 + 人才服务】基于区块链技术助力人才证书数字化 | FISCO BCOS应用案例

区块链数字证书&#xff0c;是一种利用区块链技术来存储、验证和管理数字身份和凭证的方法&#xff0c;它具有安全可信、永久不 可篡改等特点&#xff0c;可以应用于教育、医疗、金融、政府等多个领域&#xff0c;为用户提供更便捷、高效、安全的数字身份和 凭证管理服务&#…

【软件安装】PyCharm安装教程(MAC)

一、准备阶段 准备软件安装包和jetbrains crack 包 二、软件安装 &#xff08;1&#xff09;运行pycharm安装包 等待程序运行 &#xff08;2&#xff09;运行jetbrains crack 安装包 运行补丁安装 &#xff08;3&#xff09;打开pycharm软件 等待系统验证后&#xff0c;打开…

WEB渗透Linux提权篇-可写文件提权

往期文章 WEB渗透Linux提权篇-环境变量提权-CSDN博客 WEB渗透Linux提权篇-提权工具合集-CSDN博客 用到的工具&#xff1a;windows、Linux、Mac提权脚本整理:夸克网盘分享 列出系统中可写文件 >find / -writable ! -user whoami -type f ! -path "/proc/*" ! -…

Linux 命令行快捷键

Linux 命令行快捷键_linux删除一个单词-CSDN博客 涉及在linux命令行下进行快速移动光标、命令编辑、编辑后执行历史命令、Bang(!)命令、控制命令等。让basher更有效率。 常用 Ctrl左右键:在单词之间跳转 Ctrla: 跳到本行的行首 Ctrle: 跳到页尾 Ctrlu&#xff1a;删除当前光标…

江苏省地图大屏展示

Html部分绘制echarts图 <div id"chart3" style"width: 100%;height: 100%;"></div>Js部分引入地图数据data.js <script th:src"{/js/geoJson/data.js}"></script> <script type"text/javascript">var…

导出硬盘所有文件名到txt文本文件——C#学习笔记

下面的示例演示如何使用递归遍历目录树。递归方法很简洁&#xff0c;但如果目录树很大且嵌套很深&#xff0c;则有可能会引起堆栈溢出异常。 对于所处理的特定异常以及在每个文件和文件夹上执行的特定操作&#xff0c;都只是作为示例提供。您应该修改此代码来满足自己特定的需…