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

数据结构04 栈和队列

栈和队列

 / /: 先进后出/ /栈存储的数据的结构typrdef struct Node{int num;struct Node* next;}NODE;/ / 管理栈的结构typedef struct myStack{struct Node* top; / /记录当前栈中最后一个数据(栈顶指针)int countl    / /记录栈中的数据个数}STACK;/ / 初始化栈
STACK* satck_init();
{STACK* ptr = (STACK*)malloc(sizeof(STACK));if(ptr == NULL);{perror("statck init fail");return NULL;}ptr -> top = NULL;ptr -> count  = 0;return ptr;
}/ / 向栈中压入一个数据,也称之为入栈
void statck_push(STACK* s , int data)
{NODE* d = (NODE*)malloc(sizeof(NODE));if(d == NULL){perror("data malloc fail");return;}d->num = data;s -> top = d; // 栈顶指针始终指向栈中最上面的元素d->next = s -> top;//用于链接栈中每一个数据(s -> count)++;
}/ / 出栈
void statck_pop(STACK* s,int* data)
{if(s -> top == NULL){return;}NODE* p = s->top; / /记录栈顶元素的地址s -> top = s ->top ->next; / /将栈顶指针下移*data = p ->num; / /记录将要出栈的数据;free(p);p = MLL;(s -> count)--;}void statck_display(STACK* s)
{NODE* p1 = s -> top;while(p1 != NULL){printf("%d",p1 -> num);p1 = p1 -> next;}printf("\n");
}
int main()
{STACK* s = stack_init();stack_push(s,1);
}

/ /队列: 先进先出

#include "head.h"// 队列:先进先出
//
#define SIZE 5typedef struct queue
{int* buf;   // 用于存储数据,整个队列中所有数据都存放在这int x;      // 用于记录数据进队列时的下标int y;      // 用于记录数据出队列时的下标int size;   // 记录当前队列的容量
}QUEUE;QUEUE* queue_init()
{QUEUE* que = (QUEUE*)malloc(sizeof(QUEUE));que->buf = (int*)calloc(SIZE, sizeof(int));que->x = 0;que->y = 0;que->size = SIZE;return que;
}// 向队列中存入数据
void queue_push(QUEUE* q, int data)
{int num = q->x % q->size;q->buf[num] = data;q->x++; // 实际记录的是进入队列的元素个数
}// 从队列中取出数据
void queue_pop(QUEUE* q, int* data)
{// 无进入队列的元素if (q->x == 0){return;}int num;if (q->x > q->size){// 当队列中元素的个数 大于 q->size 时,产生溢出。// 队列头的元素溢出不存在num = (q->y + q->x - q->size) % q->size;}else{// 未差生溢出时num = q->y % q->size;}*data = q->buf[num];q->y++;
}void queue_display(QUEUE* q)
{for (int i = 0; i < q->size; i++){printf("%d ", q->buf[i]);}printf("\n");
}int main(int argc,char *argv[])
{QUEUE* que = queue_init();queue_push(que, 1);queue_push(que, 2);queue_push(que, 3);queue_push(que, 4);queue_push(que, 5);queue_push(que, 6);queue_push(que, 7);queue_push(que, 8);queue_push(que, 9);queue_push(que, 10);queue_push(que, 11);queue_push(que, 12);queue_display(que);int data;queue_pop(que, &data);printf("%d\n", data);queue_pop(que, &data);printf("%d\n", data);queue_pop(que, &data);printf("%d\n", data);queue_display(que);return 0;
}
http://www.dtcms.com/a/316216.html

相关文章:

  • tensorRT配合triton部署模型
  • C语言的结构体与联合体
  • LOOP Finance:一场 Web3 共和国中的金融制度实验
  • Spring Boot 与 Ollama 集成部署私有LLM服务 的完整避坑指南,涵盖 环境配置、模型管理、性能优化 和 安全加固
  • 【数据结构入门】数组和链表的OJ题(2)
  • uv与conda环境冲突,无法使用uv环境,安装包之后出现ModuleNotFoundError: No module named ‘xxx‘等解决方法
  • SpringBoot中策略模式使用
  • tcp 确认应答和超时时间
  • mq_timedsend系统调用及示例
  • Lua语言程序设计1:基础知识、数值、字符串与表
  • DDOS攻击和CC攻击对服务器的伤害有哪些?
  • 蘑兔音乐:音乐创作的神奇钥匙​
  • AI产品经理手册(Ch9-11)AI Product Manager‘s Handbook学习笔记
  • Linux系统交叉编译:依赖、构建与实践
  • makefile的使用与双向链表
  • 使用YOLOv8-gpu训练自己的数据集并预测
  • 多传感器融合
  • 2025暑期作业
  • 企业如何用现代数仓架构挖掘新业务盈利点?AllData产品从目标、路径、结果给出答案
  • 分布式文件系统06-分布式中间件弹性扩容与rebalance冲平衡
  • 集成学习与随机森林:从原理到实践指南
  • 解决VScode无法打开本地文件夹及远程连接后无反应的问题
  • Maven和Gradle在构建项目上的区别
  • 范式集团与海博思创成立合资公司,杀入“AI+储能”赛道
  • 机器学习之KNN、贝叶斯与决策树算法
  • 【题解】P3172 [CQOI2015] 选数(倍数莫反做法)
  • 深圳多奥500KG磁力锁(DAIC-MJ-500S)技术解析与产品优势报告,应用到门禁系统坚若磐石!
  • 计算机网络 第2章通信基础(竟成)
  • Pycaita二次开发基础代码解析:参数化模板创建与设计表驱动建模
  • 【Java面试题】注解,异常相关知识