数据结构之堆栈

有幸掌握浅薄知识,不吝分享,保持独立思考,自主学习,共同进步。另求关注,点赞,评论,感谢!(tips:主页有数据结构全部知识点,以及知识点讲解,建立完善的数据结构知识体)

核心算法思想

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

核心算法实现

顺序栈结构描述如下:

typedef struct Stack
{Elemtype *top;Elemtype *base;int stacksize;
}SqStack;

初始化栈:

void IntiStack(sqstack *s)
{s->base = (Elemtype*)malloc(stack_init_size*sizeof(Elemtype));if (!s->base)
exit(0);s->top = s->base;   //设置栈为空 s->stacksize = stack_init_size;
}

入栈:

int Push(sqstack* s, Elemtype e)
{if (s->top - s->base >= s->stacksize)    //判断是否栈满 {s->base = (Elemtype*)realloc(s->base, (s->stacksize + stack_increment)*sizeof(Elemtype));if (!s->base)exit(0);s->top = s->base + s->stacksize;  //重新设置栈顶 s->stacksize += stack_increment; //重新设置栈的大小 }*(s->top) = e;s->top++;return 1;
}

出栈:

void Pop(sqstack* s, Elemtype *e)
{if (s->top == s->base)      //如果栈为空 return;*e = *--(s->top);
}

实践出真知,代码案例

编写一个程序,利用栈的先进后出的特点,实现对于输入的任意一个非负十进制整数,打印输出与其等值的二进制数。

案例源码

constexpr auto STACK_INIT_SIZE =  20;
constexpr auto STACKINCREACE =  20;
typedef char Elemtype;
typedef int Status;
typedef struct {Elemtype *top;Elemtype *base;int stacksize;
}SqStack;Status InitStack(SqStack &S);
Status Push(SqStack &S, Elemtype e);
Status Pop(SqStack &s, Elemtype e);
Status StackEmpty(SqStack S);Status InitStack(SqStack &S) {S.base = (Elemtype*)malloc(STACK_INIT_SIZE * sizeof(Elemtype));if (!S.base) { return false; }S.stacksize = STACK_INIT_SIZE;S.top = S.base;return true;
}Status Push(SqStack &S, Elemtype e) {if (S.top - S.base >= S.stacksize) {S.base = (Elemtype*)realloc(S.base, (S.stacksize + STACK_INIT_SIZE) * sizeof(Elemtype));if (!S.base) { return false; }S.top = S.base + S.stacksize;S.stacksize += STACK_INIT_SIZE;}*S.top = e;S.top++;return true;
}Status Pop(SqStack &S, Elemtype *e) {if (S.base == S.top) { return false; }else{*e = *--S.top;return true;}
}Status StackEmpty(SqStack S){if (S.base == S.top) { return true; }return false;
}int main()
{int N;Elemtype e;SqStack stack;InitStack(stack);scanf_s("%d",&N);while (N){Push(stack, N % 2);N = N / 2;}while (!StackEmpty(stack)){Pop(stack,&e);printf("%d",e);}
}

面试常见问题

栈和队列有什么相同和区别?
栈和队列都是一种特殊的线性表,只允许在端点处插入和删除元素,区别在于栈是先进后出,后进先出队列是先进先出,后进后出
(tips:下一博讲队列)

大一新生必看,自学必看,里昂详解数据结构之堆栈相关推荐

  1. 大一新生必看,自学必看,里昂详解数据结构之二叉树

    数据结构之二叉树 有幸掌握浅薄知识,不吝分享,保持独立思考,自主学习,共同进步.另求关注,点赞,评论,感谢!(tips:主页有数据结构全部知识点,以及知识点讲解,建立完善的数据结构知识体) 核心算法思 ...

  2. 大一新生必看,自学必看,里昂详解数据结构之队列

    数据结构之队列 有幸掌握浅薄知识,不吝分享,保持独立思考,自主学习,共同进步.另求关注,点赞,评论,感谢!(tips:主页有数据结构全部知识点,以及知识点讲解,建立完善的数据结构知识体) 核心算法思想 ...

  3. 大一新生必看,自学必看,里昂详解数据结构之图

    数据结构之图 有幸掌握浅薄知识,不吝分享,保持独立思考,自主学习,共同进步.另求关注,点赞,评论,感谢!(tips:主页有数据结构全部知识点,以及知识点讲解,建立完善的数据结构知识体) 核心算法思想 ...

  4. 大一新生必看,自学必看,里昂详解数据结构之链表

    数据结构之链表 有幸掌握浅薄知识,不吝分享,保持独立思考,自主学习,共同进步.另求关注,点赞,评论,感谢!(tips:主页有数据结构全部知识点,以及知识点讲解,建立完善的数据结构知识体) 核心算法思想 ...

  5. 大一新生必看,自学必看,里昂详解数据结构之线性表

    数据结构之线性表(顺序表) 有幸掌握浅薄知识,不吝分享,保持独立思考,自主学习,共同进步.另求关注,点赞,评论,感谢!(tips:主页有数据结构全部知识点,以及知识点讲解,建立完善的数据结构知识体) ...

  6. 大一新生上手题(题目加源代码详解)(每日一题,一题多解)

    2019 数列有序! Problem Description 有n(n<=100)个整数,已经按照从小到大顺序排列好,现在另外给一个整数x,请将该数插入到序列中,并使新的序列仍然有序.n从键盘输 ...

  7. 思科ccna认证工程师必看路由协议IGRP和EIGRP详解

    思科ccna认证工程师必看路由协议IGRP和EIGRP详解单单从他们的名字当中,我们就能猜到他们之间有很多的关联. IGRP: 一种内部网关路由协议,它由Cisco公司八十年代中期设计.使用组合用户配 ...

  8. 一看就懂的CE-NET详解

    一看就懂的CE-NET详解 针对问题 u-net及其变体存在限制,连续的pooling和交错的卷积运算会导致一些空间信息的丢失. 文章贡献 提出了一个DAC模块和一个RMP模块来捕获更多的高级特征并保 ...

  9. 计算机bios设置论文,玩转电脑必看知识——各种BIOS设置详解 的更多相关文章

    7.IDE Primary Master UDMA(第一个IDE主控制器下的UDMA模式) 8.IDE Primary Slave UDMA(第一个IDE从控制器下的UDMA模式) 9.IDE Sec ...

最新文章

  1. [翻译]使用HtmlAgilityPack更好的HTML分析和验证
  2. 2020年度最佳的23个的机器学习项目(附源代码)
  3. 飞天技术汇|阿里云推出全新开发者服务,技术赋能开发者
  4. 兼容及DOM解释差异笔记——待续
  5. VTK:可视化之KochSnowflake
  6. 升级Hbase,解决bug问题
  7. 修改onlyoffice存储为手动存储关闭浏览器时不进行保存
  8. .NET Core Docker使用初入篇
  9. 如何完成一次Apache的版本发布
  10. 案例演示按角色的form认证实现过程
  11. winform checkedlistbox不显示复选框_据说90%的人都不知道怎么解决这个Word问题
  12. oracle 查询表里信息_查看ORACLE 数据库及表信息
  13. Vue后台数据模拟以及抓取线上数据
  14. .NET中加密和解密的实现方法
  15. JAVA基础(1/17)-JAVA语言概述
  16. Confluence 会议记录(Meeting Notes)蓝图
  17. 海思3516A 运行mp4box工具,移植gpac 0.4.0
  18. MinDoc安装指南(v0.12)
  19. android密度计算器,密度计算器
  20. 如何用PHP写webshell,phpAdmin写webshell的方法

热门文章

  1. 全球围剿下,苹果还能挺多久?
  2. Android命令-重点命令-pm/am/content/wm/appops
  3. 飞腾CPU体系结构(九)
  4. 快乐共享(By Robinvane Suen)
  5. SurfaceView和View最本质的区别
  6. android iphone css,css能判断手机是安卓还是ios吗?
  7. matlab各次谐波含量,与谐波相关的基本概念
  8. 解锁商业新模式,神奇AR为IP内容“添把火”
  9. 网页文字无法复制的解决方法
  10. 程序员约架事件中,薛非到底是因为不会用Github还是不会写Tokenizer而没有应战?...