news 2026/6/21 2:10:54

数据结构(栈和队列)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
数据结构(栈和队列)

一、栈

用数组实现栈

#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); }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/20 12:34:33

BiliLive-tools(B站录播一站式工具)

BiliLive-tools 是一款专为 B站录播需求 设计的一站式工具&#xff0c;整合了直播录制、弹幕处理、视频压制、上传及下载等功能。它旨在解决传统录播工具碎片化、操作复杂的问题&#xff0c;尤其适合 录播man&#xff08;直播录制与上传者&#xff09; 和 切片man&#xff08;视…

作者头像 李华
网站建设 2026/6/21 4:15:58

家长评语个性化定制,不重复的学生评价方案

摘要Top Pick&#xff1a;爱查分 核心价值&#xff1a;2分钟为全班生成个性化评语&#xff0c;每个孩子都被真正看见 关键亮点&#xff1a;AI智能生成初稿→一键个性化调整→成绩单自动关联→家校私聊深度沟通 关键数据&#xff1a;40名学生评语从3小时缩短到15分钟&#xff0c…

作者头像 李华
网站建设 2026/6/20 14:29:03

2025年信创DevOps平台选型:以嘉为蓝鲸为核心的全流程落地指南​

在《数据安全法》《密码法》等法规刚性约束与企业 “稳态 敏态” 双态业务需求下&#xff0c;信创 DevOps 平台选型已成为企业数字化转型的核心命题。嘉为蓝鲸作为融合腾讯十余年企业级实践的国产 DevOps 标杆&#xff0c;凭借全栈信创适配、双态融合架构、价值流智能管理等核…

作者头像 李华
网站建设 2026/6/21 5:41:59

一个github的proxy url

一个github的proxy url&#xff1a;https://ghproxy.cn使用示例&#xff1a;git clone https://ghproxy.cn/https://github.com/isaac-sim/IsaacLab.git

作者头像 李华
网站建设 2026/6/21 4:59:53

信息化项目管理和制度规范文件

项目各环节管理要点&#xff1a;前期管理&#xff1a;聚焦项目启动前&#xff0c;做好部门间信息传递、制定项目编号规则&#xff0c;同步项目信息&#xff0c;为后续管理奠基。项目分类&#xff1a;按签约情况、规模等因素划分项目类别&#xff0c;明确界定标准&#xff0c;支…

作者头像 李华
网站建设 2026/6/20 23:24:24

54、Linux 网络流量控制与调度机制深度解析

Linux 网络流量控制与调度机制深度解析 1. 引言 在 Linux 系统中,网络流量控制(Traffic Control,简称 TC)是实现网络服务质量(Quality of Service,简称 QoS)的关键技术。通过 TC,我们可以对网络流量进行分类、调度和管理,确保重要的网络流量能够得到优先处理,从而提…

作者头像 李华