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

数据结构——栈和队列

目录

栈和队列

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.mrgr.cn/news/14429.html

相关文章:

  • 用QT写一个加载模板文件,替换关键字为实际值
  • 《黑神话悟空》:国产3A游戏的崛起与AI绘画技术的融合
  • Unity实战案例 2D小游戏HappyGlass(游戏管理类脚本)
  • 引擎切换pdf识别简历分析
  • HTTP的通讯流程
  • 群晖NAS本地使用Docker搭建Home Assistant智能家居平台与远程访问
  • 贪心算法三道经典题(买卖股票,分发饼干)
  • 300W才能开通,A股自动交易公平吗?散户如何实现程序化交易?|邢不行
  • 【STM32】IIC
  • 深入理解 Go 语言并发编程--管道(channel) 的底层原理
  • 2024.8.29 作业
  • 【准则化的思想】绝对充分度
  • 探索 Linux 内核启动过程
  • 爬取数据时,如何避免违法问题
  • 使用ddns-go实现自动配置IPv6的DDNS
  • 数据库(专业存储数据)
  • 【工具使用】clang++踩坑记录
  • mac系统下Java环境安装
  • React滚动加载(无限滚动)功能实现
  • 「个性化定制」引领美业新潮流|博弈美业SaaS系统探索未来美业的个性化革新