学习笔记——C语言基本概念栈和队列——(14)

本次笔记是C语言的最后学习内容。

1、栈

特点:先进后出

        堆栈又名栈( stack) , 它是一种运算受限的线性表。 限定仅在表尾进行插入和删除操作的线性表。 这一端被称为栈顶, 相对地, 把另一端称为栈底。 向一个栈插入新元素又称作进栈、 入栈或压栈, 它是把新元素放到栈顶元素的上面, 使之成为新的栈顶元素; 从一个栈删除元素又称作出栈或退栈, 它是把栈顶元素删除掉, 使其相邻的元素成为新的栈顶元素。

示意图:

使用数组实现顺序栈:

#include<stdio.h>
#include<stdlib.h>
struct Stu
{int num[6];int top;
};
int Push_Stu(struct Stu*s,int x);
int mean(void);
int Pop_Stu(struct Stu* s, int* x);int main()
{int num,n;//初始化栈struct Stu *sta;sta=(struct Stu*)malloc(sizeof(struct Stu));sta->top=-1;while(1){switch (mean()){case 1:printf("请输入要入栈的元素:");scanf("%d",&num);if(Push_Stu(sta,num))printf("入栈成功!\n");elseprintf("入栈失败!栈已满\n");break;case 2:if(Pop_Stu(sta, &num))printf("出栈成功!出栈元素为:%d\n", num);elseprintf("出栈失败!栈已空。\n");break;case 3:printf("程序已退出。\n");return 0;break;default:printf("输入错误\n");break;}}
}
//定义功能界面
int mean(void)
{int num;printf("请输入你要执行的操作:\n");printf("1.入栈\n");printf("2.出栈\n");printf("3.退出\n");scanf("%d",&num);if(num>=1&&num<=3){return num;}else{printf("输入错误请重新输入:");return 0;}
}
//定义入栈函数
int Push_Stu(struct Stu*s,int x)
{  	//判断是否为栈满if(s->top == 5){return 0;//栈满不能入栈}else{s->top++;s->num[s->top] = x;return 1;}
}
//定义出栈的函数
int Pop_Stu(struct Stu* s, int* x)
{  //判断是否为栈空if(s->top==-1){return 0;//栈空不能出栈}else{*x = s->num[s->top];s->top--;return 1;}
}

使用链表实现顺序栈:

#include<stdio.h>
#include<stdlib.h>
struct Stu
{int num[6];int top;
};
struct NODE
{int num;struct NODE*front;
};
int Push_Stu(struct NODE** top, int x);
int mean(void);
int Pop_Stu(struct NODE** top, int* x);int main()
{int num,n;//初始化栈struct NODE*top=NULL;while(1){switch (mean()){case 1:printf("请输入要入栈的元素:");scanf("%d",&num);if(Push_Stu(&top,num))printf("入栈成功!\n");elseprintf("入栈失败!栈已满\n");break;case 2:if(Pop_Stu(&top, &num))printf("出栈成功!出栈元素为:%d\n", num);elseprintf("出栈失败!栈已空。\n");break;case 3:printf("程序已退出。\n");return 0;break;default:printf("输入错误\n");break;}}
}
//定义功能界面
int mean(void)
{int num;printf("请输入你要执行的操作:\n");printf("1.入栈\n");printf("2.出栈\n");printf("3.退出\n");scanf("%d",&num);if(num>=1&&num<=3){return num;}else{printf("输入错误请重新输入:");return 0;}
}
//定义入栈函数
int Push_Stu(struct NODE**top,int x)
{  struct NODE*new=(struct NODE *)malloc(sizeof(struct NODE));//判断是否为栈满new->num=x;new->front=*top;*top=new;return 1;
}
//定义出栈的函数
int Pop_Stu(struct NODE**top, int* x)
{  //判断是否为栈空if(*top==NULL){return 0;//栈空不能出栈}  else{*x = (*top)->num;struct NODE*temp=*top;*top=(*top)->front;free(temp);return 1;}
}

2、队列

        队列是一种特殊的线性表,特殊之处在于它只允许在表的前端 ( front)进行删除操作,而在表的后端 ( rear)行插入操作, 和栈一样, 队列是一种操作受限制的线性表。 进行插入操作的端称为队尾, 进行删除操作的称为队头。
        特点: 先进先出

队列就不过多介绍了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/620967.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[大模型]Baichuan2-7B-chat langchain 接入

Baichuan2-7B-chat langchain 接入 这篇主要讲 Baichuan2-7B-chat 如何对接Langchain中 langchain.llms.base 的 LLM 模块&#xff0c;并且提供一个快捷搭建向量数据库、Agent等多功能的Langchain应用的部署方案&#xff1b;关于如何具体对接向量数据库和gradio的部分请参考in…

排序之归并排序

代码 先上代码&#xff0c;根据代码将归并排序的整个过程。 class Solution {public int[] sortArray(int[] nums) {int[] tmp new int[nums.length];merge(nums, 0, nums.length - 1, tmp);return nums;}private void merge(int[] nums, int left, int right, int[] tmp){if…

kmeans聚类sklearn实现(Python实验)

Kmeans毫无疑问&#xff0c;好用又“便宜”的算法&#xff0c;经常在很多轻量化场景中实现。所谓的“聚类”&#xff08;Clustering&#xff09;&#xff0c;就是通过欧氏距离找哪些点构成一个簇。假设我们空间中有一堆点&#xff0c;通过肉眼大概可以看出有两簇&#xff0c;思…

OpenHarmony实战开发-如何实现图片缩放效果。

介绍 图片预览在应用开发中是一种常见场景&#xff0c;在诸如QQ、微信、微博等应用中均被广泛使用。本模块基于Image组件实现了简单的图片预览功能。 使用说明&#xff1a; 双指捏合对图片进行缩放双击图片进行图片的大小切换&#xff0c;在放大状态下&#xff0c;双击可恢复…

TensorFlow 1.x的学习

.为什么还有很多人都选择使用TensorFlow 1.x 兼容性问题: TensorFlow 1.x在一些旧项目中已经得到了广泛应用&#xff0c;这些项目可能依赖于1.x版本的特定API或行为。升级到2.x可能需要大量的代码修改和测试工作&#xff0c;对于一些已经稳定运行的项目&#xff0c;维护者可能…

内网渗透-内网环境下的横向移动总结

内网环境下的横向移动总结 文章目录 内网环境下的横向移动总结前言横向移动威胁 威胁密码安全 威胁主机安全 威胁信息安全横向移动威胁的特点 利用psexec 利用psexec.exe工具msf中的psexec 利用windows服务 sc命令 1.与靶机建立ipc连接2.拷贝exe到主机系统上3.在靶机上创建一个…

聚观早报 | 哪吒L上市定档;iPhone 16最新高清渲染图

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 4月10日消息 哪吒L上市定档 iPhone 16最新渲染图 华为太空表与问界M9联动 蔚来万里长城加电风景线正式贯通 Red…

基于Springboot+Vue的Java项目-房产销售系统(附演示视频+源码+LW)

大家好&#xff01;我是程序员一帆&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &am…

ubuntu16.04安装Eclipse C/C++

1.安装 JDK 官网源码安装 首先打开JDK官网&#xff0c;JDK1.8的下载网址为&#xff1a;https://www.oracle.com/cn/java/technologies/downloads/#java8-windows&#xff0c;进入到网址如下图所示&#xff1a; 向下滑动到 JDK1.8的下载界面&#xff0c;如下图所示&#xff1a…

戏作打油诗《无知》

笔者经营多年的《麻辣崇州论坛》&#xff0c;半月前突被攻击我在“霸屏”&#xff0c;没处讲理&#xff0c;特戏作打油诗《无知》一首&#xff0c;为那个无理取闹、砸我“麻辣崇州论坛”的无知小儿画像如下。 请点击链接&#xff0c;一目了然&#xff1a;崇州论坛-麻辣社区 没…

2024-04-15_[UPnP]:详细解析

UPnP 一、论文阅读 1.2 Theory 1.2.1 Geometry of the absolute pose problem α i f i v i R p i t , i 1.. n . \alpha_i \mathbf{f}_i \mathbf{v}_i \mathbf{R} \mathbf{p}_i \mathbf{t} ,i1..n. αi​fi​vi​Rpi​t,i1..n. 其中&#xff1a; P i ∈ R 3 P_i \i…

幽灵漏洞进阶版来了

近日&#xff0c;网络安全研究人员披露了针对英特尔系统上 Linux 内核的首个原生 Spectre v2 漏洞&#xff0c;该漏洞是2018 年曝出的严重处理器「幽灵」&#xff08;Spectre&#xff09;漏洞 v2 衍生版本&#xff0c;利用该漏洞可以从内存中读取敏感数据&#xff0c;主要影响英…