硬汉嵌入式论坛

 找回密码
 立即注册
查看: 4793|回复: 2
收起左侧

堆栈之静态数组

[复制链接]

8

主题

11

回帖

8

积分

新手上路

积分
8
发表于 2016-3-12 14:32:18 | 显示全部楼层 |阅读模式
这里使用静态数组实现堆栈的基本操作,堆栈的知识比较简单,基本操作代码基本都给出了,这里使用Visual studio 进行仿真,可以照搬到到单片机使用
[backcolor=rgba(128, 128, 128, 0.0470588)]
  1. [backcolor=rgba(128, 128, 128, 0.0470588)][color=#880000][font=Source Code Pro]//堆栈学习代码:静态数组实现[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro][/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#880000][font=Source Code Pro]//author:鬼谷[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro][/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#880000][font=Source Code Pro]//[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro][/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#444444][font=Source Code Pro]#include "stdio.h"[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro][/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#880000][font=Source Code Pro]//堆栈存储的数据类型[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro][/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#444444][font=Source Code Pro]#define stack_type int[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro][/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#880000][font=Source Code Pro]//堆栈的长度[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro][/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#444444][font=Source Code Pro]#define stack_len 10[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro][/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#880000][font=Source Code Pro]//堆栈的状态[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro][/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#444444][font=Source Code Pro]#define stack_full 0[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro][/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#444444][font=Source Code Pro]#define stack_no_full 1[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro][/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#444444][font=Source Code Pro]#define stack_empty 0[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro][/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#444444][font=Source Code Pro]#define stack_no_empty 1[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro][/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#880000][font=Source Code Pro]//堆栈操作状态[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro][/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#444444][font=Source Code Pro]#define success 0[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro][/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#444444][font=Source Code Pro]#define failed 1[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro][/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#880000][font=Source Code Pro]//堆栈定义[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro][/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#000088][font=Source Code Pro]static[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro] stack_type stack_1[stack_len];[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#000088][font=Source Code Pro]static[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro] [/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#000088][font=Source Code Pro]int[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro] top_elemnt = -[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#006666][font=Source Code Pro]1[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro];[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#880000][font=Source Code Pro]//常用数据类型定义[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro][/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#444444][font=Source Code Pro]#define u8 unsigned char[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro][/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#880000][font=Source Code Pro]//栈空[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro]u8 Is_stack_empty([/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#000088][font=Source Code Pro]void[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro]){[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#000088][font=Source Code Pro]if[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro] (top_elemnt == -[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#006666][font=Source Code Pro]1[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro])[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#000088][font=Source Code Pro]return[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro] stack_empty;[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#000088][font=Source Code Pro]else[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro] [/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#000088][font=Source Code Pro]return[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro] stack_no_empty;}[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#880000][font=Source Code Pro]//栈满[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro]u8 Is_stack_full([/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#000088][font=Source Code Pro]void[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro]){[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#000088][font=Source Code Pro]if[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro] (top_elemnt == stack_len - [/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#006666][font=Source Code Pro]1[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro])[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#000088][font=Source Code Pro]return[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro] stack_full;[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#000088][font=Source Code Pro]else[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro] [/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#000088][font=Source Code Pro]return[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro] stack_no_full;}[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#880000][font=Source Code Pro]//压栈[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro]u8 push(stack_type data){[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#000088][font=Source Code Pro]if[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro] (Is_stack_full() == stack_full)[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#000088][font=Source Code Pro]return[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro] failed;[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#000088][font=Source Code Pro]else[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro]top_elemnt += [/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#006666][font=Source Code Pro]1[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro];stack_1[top_elemnt] = data;[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#000088][font=Source Code Pro]return[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro] success;}[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#880000][font=Source Code Pro]//出栈[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro]u8 pop(stack_type *data){[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#000088][font=Source Code Pro]if[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro] (Is_stack_empty() == stack_empty)[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#000088][font=Source Code Pro]return[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro] failed;[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#000088][font=Source Code Pro]else[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro]*data = stack_1[top_elemnt];top_elemnt -= [/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#006666][font=Source Code Pro]1[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro];[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#000088][font=Source Code Pro]return[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro] success;}[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#880000][font=Source Code Pro]//访问堆栈顶元素但是不改变堆栈的状态[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro]u8 top(stack_type *data){[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#000088][font=Source Code Pro]if[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro] (Is_stack_empty() == stack_empty)[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#000088][font=Source Code Pro]return[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro] failed;[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#000088][font=Source Code Pro]else[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro]*data = stack_1[top_elemnt];[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#000088][font=Source Code Pro]return[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro] success;}[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#000088][font=Source Code Pro]int[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro] main([/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#000088][font=Source Code Pro]void[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro]){u8 cnt = [/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#006666][font=Source Code Pro]0[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro];stack_type data[[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#006666][font=Source Code Pro]1[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro]] = {[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#006666][font=Source Code Pro]0[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro]};printf([/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#008800][font=Source Code Pro]"stack app running..\r\n"[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro]);[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#000088][font=Source Code Pro]for[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro] (cnt = [/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#006666][font=Source Code Pro]0[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro]; cnt < stack_len + [/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#006666][font=Source Code Pro]10[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro]; cnt++){[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#000088][font=Source Code Pro]if[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro] (push(cnt) == failed) printf([/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#008800][font=Source Code Pro]"压栈失败\r\n"[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro]);[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#000088][font=Source Code Pro]else[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro] printf([/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#008800][font=Source Code Pro]"压栈成功\r\n"[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro]);}[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#880000][font=Source Code Pro]//测试用,读取栈里的元素,工程应用不用[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro][/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#000088][font=Source Code Pro]for[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro] (cnt = [/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#006666][font=Source Code Pro]0[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro]; cnt < stack_len ; cnt++){printf([/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#008800][font=Source Code Pro]"stack_1[%d]=%d\r\n"[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro],cnt,stack_1[cnt]);}printf([/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#008800][font=Source Code Pro]"top_element = %d\r\n"[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro],top_elemnt);[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#000088][font=Source Code Pro]for[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro] (cnt = [/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#006666][font=Source Code Pro]0[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro]; cnt < stack_len + [/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#006666][font=Source Code Pro]10[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro]; cnt++){[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#000088][font=Source Code Pro]if[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro] (pop(data) == failed) printf([/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#008800][font=Source Code Pro]"出栈失败\r\n"[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro]);[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#000088][font=Source Code Pro]else[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro] printf([/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#008800][font=Source Code Pro]"出栈成功%d\r\n"[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro], *data);}printf([/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#008800][font=Source Code Pro]"top_element = %d\r\n"[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro], top_elemnt);[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#000088][font=Source Code Pro]while[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro] ([/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#006666][font=Source Code Pro]1[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro]);[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#000088][font=Source Code Pro]return[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro] [/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#006666][font=Source Code Pro]0[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro];[/font][/color][/backcolor][backcolor=rgba(128, 128, 128, 0.0470588)][color=#333333][font=Source Code Pro]仿真结国:       [/font][/color][/backcolor] 搜狗截图16年03月12日1429_1.png 搜狗截图16年03月12日1430_2.png
复制代码
[backcolor=rgba(128, 128, 128, 0.0470588)]
知行合一
回复

使用道具 举报

8

主题

11

回帖

8

积分

新手上路

积分
8
 楼主| 发表于 2016-3-12 14:33:20 | 显示全部楼层
我也不知道代码为何变成那样~
//堆栈学习代码:静态数组实现
//author:yao
//
#include "stdio.h"
//堆栈存储的数据类型
#define stack_type int
//堆栈的长度
#define stack_len 10
//堆栈的状态
#define stack_full 0
#define stack_no_full 1

#define stack_empty 0
#define stack_no_empty 1
//堆栈操作状态
#define success 0
#define failed 1
//堆栈定义
static stack_type stack_1[stack_len];
static int top_elemnt = -1;
//常用数据类型定义
#define u8 unsigned char

//栈空
u8 Is_stack_empty(void)
{
    if (top_elemnt == -1)
        return stack_empty;
    else return stack_no_empty;
}
//栈满
u8 Is_stack_full(void)
{
    if (top_elemnt == stack_len - 1)
        return stack_full;
    else return stack_no_full;
}
//压栈
u8 push(stack_type data)
{
    if (Is_stack_full() == stack_full)
        return failed;
    else
        top_elemnt += 1;
    stack_1[top_elemnt] = data;
    return success;
}
//出栈
u8 pop(stack_type *data)
{
    if (Is_stack_empty() == stack_empty)
        return failed;
    else
        *data = stack_1[top_elemnt];
    top_elemnt -= 1;
    return success;
}
//访问堆栈顶元素但是不改变堆栈的状态
u8 top(stack_type *data)
{
    if (Is_stack_empty() == stack_empty)
        return failed;
    else
        *data = stack_1[top_elemnt];
    return success;
}

int main(void)
{
    u8 cnt = 0;
    stack_type data[1] = {0};
    printf("stack app running..\\r\\n");
    for (cnt = 0; cnt < stack_len + 10; cnt++)
    {
        if (push(cnt) == failed) printf("压栈失败\\r\\n");
        else printf("压栈成功\\r\\n");
    }
    //测试用,读取栈里的元素,工程应用不用
    for (cnt = 0; cnt < stack_len ; cnt++)
    {
        printf("stack_1[%d]=%d\\r\\n",cnt,stack_1[cnt]);
    }
    printf("top_element = %d\\r\\n",top_elemnt);

    for (cnt = 0; cnt < stack_len + 10; cnt++)
    {
        if (pop(data) == failed) printf("出栈失败\\r\\n");
        else printf("出栈成功%d\\r\\n", *data);
    }
    printf("top_element = %d\\r\\n", top_elemnt);
    while (1);
    return 0;
}
知行合一
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106997
QQ
发表于 2016-3-13 10:18:26 | 显示全部楼层
没事的,感谢兄弟的分享[s:151] [s:151]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-14 04:40 , Processed in 0.270771 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表