news 2026/6/13 16:36:41

c语言——栈和队列

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
c语言——栈和队列

1.栈


1.1栈的概念及结构

1.1.1概念


:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(LastInFirstOut)的则。
压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。
出栈:栈的删除操作叫做出栈。出数据也在栈顶。

1.1.2结构

数组栈


链式栈
如果用尾做栈顶,尾插尾删,要设计成双向链表,否则删除数据效率低
如果用头做栈顶,头插头删,就可以设计成单链表

两种都可以,非要选一种,数组栈结构稍微好一点。

1.2接口函数

//要改变结构体的内容 //传结构体的指针 void StackInit(ST* ps); void StackDestory(ST* ps); void StackPush(ST* ps,STDataType x); void StackPop(ST* ps); STDataType StackTop(ST* ps); //取栈顶的数据 int StackSize(ST* ps); //栈中元素个数 bool StackEmpty(ST* ps); //判断栈是否为空

1.3详细代码

#pragma once #include<stdio.h> #include<stdlib.h> #include<assert.h> #include<stdbool.h> typedef int STDataType; typedef struct Stack { STDataType* a; int top;//栈顶 int capacity; }ST; void StackInit(ST* ps) { assert(ps); ps->a = NULL; ps->top = 0; //初始化时,top给的是0, // 意味着top指向栈顶数据的下一个 // ps->top=-1; //初始化时,top给的是 - 1, // 意味着top指向栈顶数据 ps->capacity = 0; } void StackDestory(ST* ps) { assert(ps); free(ps->a); ps->a = NULL; ps->top = 0; ps->capacity = 0; } void StackPush(ST* ps, STDataType x) { assert(ps); if (ps->top == ps->capacity) { int newCapacity = ps->capacity == 0 ? 4 : ps->capacity * 2; STDataType* tmp = (STDataType*)realloc(ps->a, sizeof(STDataType) * newCapacity); if (tmp == NULL) { printf("realloc fail\n"); exit(-1); } ps->a = tmp; ps->capacity = newCapacity; } ps->a[ps->top] = x; ps->top++; } void StackPop(ST* ps) { assert(ps); assert(ps->top > 0); //栈不为空才能删 ps->top--; } STDataType StackTop(ST* ps) { assert(ps); assert(ps->top > 0); //栈不为空才能取栈顶元素 return ps->a[ps->top - 1]; } int StackSize(ST* ps) { assert(ps); return ps->top; } bool StackEmpty(ST* ps) { assert(ps); /* if (ps->top == 0) return true; else return false; */ return ps->top == 0; } void TestStack() { ST st; StackInit(&st); StackPush(&st, 1); StackPush(&st, 2); StackPush(&st, 3); StackPush(&st, 4); //遍历栈中的数据 while (!StackEmpty(&st)) { printf("%d ", StackTop(&st)); StackPop(&st); } StackDestory(&st); } int main() { TestStack(); return 0; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/12 7:30:57

微软确认:Windows 11 AI 智能体访问用户文件前会先请求许可

微软证实&#xff0c;在允许人工智能智能体访问存储于六个常用文件夹&#xff08;包括桌面、文档、下载、音乐、图片和视频&#xff09;的文件前&#xff0c;Windows 11 会先征求用户的同意。用户也可为每个智能体单独自定义文件访问权限。12 月 17 日消息&#xff0c;微软证实…

作者头像 李华
网站建设 2026/6/13 9:44:48

Shopee 验证码解决方案

ight Data 的验证码解决方案是 抓取浏览器 和 网络解锁器 的内置功能&#xff0c;为应对最复杂的验证码挑战提供完整解决方案。功能特点快速识别与解决&#xff1a;可高准确率且迅速地自动解决 Shopee 验证码。IP 轮换&#xff1a;利用自动重试和动态 IP 调整&#xff0c;防止被…

作者头像 李华
网站建设 2026/6/12 19:59:56

Python - 诊断和修复内存泄漏

内存泄漏是指程序错误地管理内存分配&#xff0c;导致可用内存减少&#xff0c;并可能导致程序变慢或崩溃。 在 Python 中&#xff0c;内存管理通常由解释器处理&#xff0c;但内存泄漏仍然可能发生&#xff0c;尤其是在长时间运行的应用中。在 Python 中诊断和修复内存泄漏需…

作者头像 李华
网站建设 2026/6/10 19:35:34

什么叫组团社,什么叫地接社

在旅游行业中&#xff0c;有两个重要的角色&#xff1a;组团社与地接社&#xff0c;它们分别承担着不同的职责。 组团社&#xff0c;也被称为国内旅游批发商&#xff0c;其主要功能是接受旅游团或海外旅行社的预订。 它们负责制定并下达接待计划&#xff0c;甚至可以提供全程陪…

作者头像 李华
网站建设 2026/6/13 1:41:42

8大关键技术点掌握YashanDB的使用技巧

如何优化查询速度是数据库系统设计和运维中的重要问题&#xff0c;影响着业务响应时间和系统吞吐能力。高效的数据存储、合理的索引设计、智能的执行计划生成以及高并发事务控制技术&#xff0c;均直接关系到查询性能表现。本文围绕YashanDB数据库系统&#xff0c;深入剖析其八…

作者头像 李华
网站建设 2026/6/13 9:19:21

Kubernetes Service 架构深度解析:从虚拟IP到流量的智能寻址

在Kubernetes中&#xff0c;Pod间的直接互联仅是服务通信的基础。要构建一个稳定、弹性且对消费端透明的服务网络&#xff0c;其核心在于Service抽象层。许多开发者对Service的理解仅停留在“一个虚拟IP”的层面&#xff0c;却未能洞悉其背后精妙的流量治理机制&#xff1a;请求…

作者头像 李华