”后进后出“栈

2024-06-04 22:58
文章标签 后出 后进

本文主要是介绍”后进后出“栈,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

栈的定义:

栈是限定仅在表尾进行插入或删除操作的线性表,因此表尾端成为栈顶,相应的,表头端成为栈底,不含有任何元素的栈称为空栈。
栈的修改遵循后进先出的原则,因此栈又称为后进先出的线性表,简称LIFO结构。
栈一般采用数组作为其存储结构,这样做可以避免使用指针,简化程序,当然数组需要预先声明静态数据区的大小,但这不是问题,因为即便是频繁进出入栈操作,任何时刻栈元素的实际个数也不会很多,为栈预留一个足够大但又不占用太多空间并不是很困难,如果不能做到这一点,那么节省内存的方法就是使用链表存储栈。

栈的基本运算:

[cpp]  view plain copy
print ?
  1. #include<iostream>  
  2. #include<cstdio>  
  3. using namespace std;  
  4. typedef struct Stacknode//定义链式栈的结构体  
  5. {  
  6.     int data;//数据域  
  7.     Stacknode *next;//下一节点的指针域  
  8. }Stacknode,*Stack;  
  9. //初始化一个链式栈(返回一个链式栈的头节点)  
  10. Stack InitStack()  
  11. {  
  12.     Stack stack=(Stack)malloc(sizeof(Stacknode));  
  13.     stack->next=NULL;  
  14.     return stack;  
  15. }  
  16. //入栈  
  17. void Push(Stack stack,int newData)  
  18. {  
  19.     //判断是否为空  
  20.     if(stack==NULL)  
  21.     {  
  22.         printf("栈未初始化,请初始化以后再使用\n");  
  23.         return;  
  24.     }  
  25.     //找到最后一个节点  
  26.    Stacknode *lastnode=stack;  
  27.    while(lastnode->next)  
  28.     {  
  29.     lastnode=lastnode->next;  
  30.     }  
  31.    lastnode->next=(Stacknode*)malloc(sizeof(Stacknode*));  
  32.    lastnode->next->data=newData;  
  33.    lastnode->next->next=NULL;  
  34.    printf("入栈成功!\n");  
  35. }  
  36. //出栈  
  37. int Pop(Stack stack)  
  38. {  
  39.     //判断栈是否为空  
  40.     if(!stack->next)  
  41.     {  
  42.         printf("栈为空,无法出栈\n");  
  43.         return -1;//-1只是一个自定义的错误代码  
  44.     }  
  45.     //找到最后一个节点的钱一个节点  
  46.     //tempNode:最后一个节点的前一个节点  
  47.     Stacknode *tempNode=stack;  
  48.     while(tempNode->next->next)  
  49.     {  
  50.         tempNode=tempNode->next;  
  51.     }  
  52.     int data=tempNode->next->data;  
  53.     free(tempNode->next);  
  54.     tempNode->next=NULL;  
  55.     return data;  
  56. }  
  57.   
  58. int main()  
  59. {  
  60.     Stack stack=InitStack();  
  61.     Push(stack,3);//3进栈  
  62.     Push(stack,4);//4进栈  
  63.     Push(stack,5);//5进栈  
  64.     printf("%d\n",Pop(stack));  
  65.     printf("%d\n",Pop(stack));  
  66.     printf("%d\n",Pop(stack));  
  67.     printf("%d\n",Pop(stack));//第4次出栈,应该出错  
  68.     return 0;  
  69. }  

这篇关于”后进后出“栈的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1031367

相关文章

学好Java核心技术,年后进大厂不是梦

随着现代科技发展,公司企业对Java技术人员的需求量不断增加,掌握Java程序设计技术的程序员,无疑成为了求职市场上的热门人选。 随着经验的不断累积,Java无论各级应用中都取得了不少进展,在很多关键性业务中发挥了举足轻重的作用。很多国际厂商推出的基于Java技术的应用服务器以及各种应用软件,推动了Java在金融、电信、制造等领域的重要地位。 而现如今流行的云计算、移动领域方面,大多数的企业选

计算机开机进入不了系统怎么办,电脑开机后进不了系统就一直开机怎么解决 电脑开机进不了系统原因【图文】...

电脑开机后进不了系统就一直开机是怎么回事呢?我们有时候电脑开机之后不能进入电脑的桌面,也不能进入电脑系统。这是怎么回事呢?是怎么导致的呢?我们使用电脑的时候,当我们的系统文件出现问题和电脑中了病毒,很容易出现这个问题,电脑的文件出现错误的时候我们也不能进入系统。下面,我们来看看电脑开机后进不了系统就一直开机怎么处理。 一、电脑系统自带磁盘修复教程: 在我的电脑中选中盘符后单击鼠标右键选属性,在弹

美国计算机科学专业毕业生,2021年美国留学热门专业之计算机科学专业这5所名校 毕业后进微软!...

近些年,随着网络技术的不断发展,计算机人才成为了各大行业的核心资源,从而对计算机科学人才的需求量与日俱增,美国在计算机领域一直处在世界的最前沿,拥有着IT人才梦寐以求的“硅谷”,还拥有IT大牛企业谷歌、微软、IBM,因此,越来越多的学生去美国攻读计算机科学专业,下面,小编就为大家带来了 2021年美国留学的热门专业之计算机科学专业5所名校推荐,希望对大家有所帮助: 1. 卡耐基梅隆大学 (CM

程序人生:毕业遭遇欠薪,3个月后进大厂薪资翻倍,我如何做到的?

01 毕业遇上无良老板 那年我走出校门,不知道什么是社会险恶,手持平面设计本科毕业证闯入一家5个人的小公司,成为了一个服装跟单文员,我的计划是在这里沉淀一段时间,当做一个跳板。对于我个人而言我更倾向于去大公司体会团队合作的感觉,结交很多技术大佬,沉淀更多资源。 可惜好景不长,没等我在设计行业谋出一份出路,公司里就传来了财务危机的消息:在某一个清晨,老板卷款逃跑,数家供应商围攻公司大门。我手

Bootstrap FileInput 选择文件后出的清空 重置按钮

因为我是点击上传后数据是临时放在后端的 我想点击清空后台数据久要获取到清空按钮这个元素但是他是动态生成的所有我在网上找了很多说明都没有找到后来我只能手动自己去修改了 fileinput.js  写个记录防止自己后面又用到同时给大家借鉴 '<script type="text/javascript"> $("#removel").click(function(){$.ajax({type