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

数据结构(栈和队列)

一、栈

用数组实现栈

#include <stdio.h> #define MaxSize 5 typedef struct Stack{ int data[MaxSize]; int pre; }Stack; //初始栈 void Init(Stack *stack){ stack->pre = -1; } //入栈操作 void Push(Stack *stack,int x){ //判断栈是否已满 if(stack->pre == MaxSize-1){ printf("栈已满\n"); return; } stack->pre = stack->pre+1;//指针向上走一位 stack->data[stack->pre] = x; } //出栈操作 void Pop(Stack *stack){ if(stack->pre == -1){ printf("栈已空\n"); return; } printf("%d\n",stack->data[stack->pre]); stack->pre = stack->pre-1; } int main() { Stack stack; Init(&stack); Push(&stack,5); Push(&stack,7); Push(&stack,4); Push(&stack,2); Pop(&stack); Pop(&stack); Pop(&stack); Pop(&stack); return 0; }

用链表实现栈

#include <stdio.h> #include <stdlib.h> typedef struct Node{ int data; struct Node *next; }LinkNode; //初始化链表(栈)的头节点 void Init(LinkNode *node){ node->next = NULL;//头节点的next初始化为NULL,表示栈为空 } //入栈操作(在链表头部插入新节点) void Push(LinkNode *head,int value){ //创建新的节点 LinkNode *newNode = (LinkNode *)malloc(sizeof(LinkNode)); newNode->data = value; newNode->next = NULL; //将新节点插入到头部(栈顶) newNode->next = head->next; head->next = newNode; } //出栈操作(删除链表头部节点并打印其值) void Pop(LinkNode *head){ if(head->next == NULL){//栈为空是直接返回 return; } LinkNode *temp = head->next;//临时保存栈顶节点 printf("%d\n",temp->data);//打印栈顶元素 head->next = temp->next;//移除栈顶节点 free(temp); } int main() { LinkNode *head = (LinkNode *)malloc(sizeof(LinkNode));//为头节点分配内存 Init(head);//初始化头节点 Push(head,1); Push(head,2); Push(head,3); Pop(head); Pop(head); return 0; }

二、队列

用数组实现队列

#include <stdio.h> #define MaxSize 5 typedef struct Queue{ int arr[MaxSize]; int r; //出 int p; //入 }Queue; void init(Queue *queue){ queue->r = -1; queue->p = -1; } //数据添加 void insert(Queue *queue,int value){ if(queue->p - queue->r == MaxSize){ printf("队列已满\n"); return; } queue->p= queue->p+1; queue->arr[queue->p] = value; } //取出数据 void chu(Queue *queue){ if(queue->p - queue->r == 0){ printf("队列已空\n"); return; } queue->r= queue->r+1; printf("%d\n",queue->arr[queue->r]); } int main(){ Queue queue; init(&queue); insert(&queue,5); insert(&queue,7); insert(&queue,4); insert(&queue,2); insert(&queue,0); insert(&queue,3); chu(&queue); chu(&queue); chu(&queue); chu(&queue); chu(&queue); chu(&queue); }
http://www.jsqmd.com/news/93071/

相关文章:

  • 为什么MES难以标准化?
  • 2025 年 12 月工业清洗设备权威推荐榜:等离子清洗机,干冰清洗机源头厂家,高效精密清洗技术深度解析 - 品牌企业推荐师(官方)
  • 别甩锅给EasyGBS!VLC播不了FLV流?竟是H.265不兼容,用它秒解决
  • 49、IP路由与转发信息库(FIB)详解
  • 2025年海上多功能平台定制厂家权威推荐榜单:自升自航多功能平台‌/海上风电安装平台‌/海上自升降平台源头厂家精选 - 品牌推荐官
  • 参观深圳比亚迪总部,探索科技,感受中国“智”造魅力
  • 2025年末麸星仪厂家排行出炉!性价比+口碑+售后全维度解析,教你选对不踩坑 - 品牌推荐大师1
  • 10.实用的系统安全及应用
  • EasyGBS解锁公共场所视频监控新模式
  • 50、IP 路由中的关键操作与机制解析
  • 47、Linux内核路由表与缓存的实现及管理
  • 51、IP路由关键函数解析
  • 【Java毕设全套源码+文档】基于springboot的高校门诊管理系统设计与实现(丰富项目+远程调试+讲解+定制)
  • 【Java毕设全套源码+文档】基于springboot的高校社团管理系统设计与实现(丰富项目+远程调试+讲解+定制)
  • 52、IP路由与FIB查找详解
  • 2025年12月承装修试资质代办,安全生产许可证资质代办,工程劳务资质代办公司推荐,全流程服务解析! - 品牌鉴赏师
  • 53、Linux网络中的IP路由与服务质量管理
  • 一个github的proxy url
  • Zeus IoT:构建百万级设备连接的工业级分布式物联网平台
  • 使用preg_match正则书写正确,但匹配不到的解决办法
  • LC.297 | 二叉树的序列化与反序列化 | 树 | 定长编码传递信息
  • 信息化项目管理和制度规范文件
  • 毕设开源 深度学习语义分割实现弹幕防遮(源码分享)
  • 44、TCP状态处理与Netlink套接字详解
  • 【Java毕设全套源码+文档】基于springboot的高校失物招领平台设计与实现(丰富项目+远程调试+讲解+定制)
  • AI大模型入门到精通:制造业应用实践,一篇搞定,建议收藏!
  • 毕设项目 yolo葡萄采摘护理定位辅助系统(源码+论文)
  • 你的 QQ 藏着多少 “隐形价值”?这款评估工具太会玩了!
  • 毕设项目 深度学习YOLOv5车辆颜色识别检测
  • 62、lkcd与TCP/IP栈调试全解析