Visual Studio 2013
【1】打开Visual Studio 2013软件,并创建Win32控制台应用程序。 【2】添加头文件#include 'stdafx.h'#include 'stdio.h'#include 'malloc.h'#include 'stdbool.h' 【3】验证创建工程的完整性和正确性void main(void){ printf('Hello Word......\r\n'); while (1);}
【1】栈类型定义。因为只是纯数组静态栈故只需要栈顶即可,无需栈底。#define STACK_MAX_SIZE 6 //栈大小 typedef struct stcStack{ int StackTop; //栈顶 int StackData[STACK_MAX_SIZE]; //栈数据区}stcStack, *pStcStack; 【2】初始化静态栈。栈顶为-1,即pStak->StackTop = -1,再显示栈顶和栈容量大小。 //初始化堆栈void InitStaticStack(pStcStack pStak){ pStak->StackTop = -1; printf('静态栈初始化成功......\r\n'); printf('最大容量: %d\r\n', STACK_MAX_SIZE); printf('栈顶 : %d\r\n\r\n', pStak->StackTop);} 【3】验证初始化栈的情况,先定义一个栈变量,即stcStack Stak。void main(void){ stcStack Stak; InitStaticStack(&Stak);//初始化堆栈 while (1);}
【1】判断静态栈是否已满,当栈顶加1大于等于栈最大容量时,则栈已满,否则栈未满。 //判断栈是否为满bool IsFullStaticStack(pStcStack pStak){ if ((pStak->StackTop + 1) >= STACK_MAX_SIZE) return true; else return false;} 【2】判断静态栈是否为空,当栈顶为-1时,则栈为空,初始化转态pStak->StackTop = -1。 //判断栈是否为空bool IsEmptyStaticStack(pStcStack pStak){ if (pStak->StackTop == -1) return true; else return false;} 【3】静态栈的入栈/压栈。在栈未满的情况下,将数据存放到栈顶为下标的数组中,然后栈顶加1。 //入栈/压栈void PushStaticStack(pStcStack pStak, int value){ if (IsFullStaticStack(pStak)) { printf('静态栈已满,入栈失败......\r\n'); printf('最大容量: %d\r\n', STACK_MAX_SIZE); printf('栈顶 : %d\r\n\r\n', pStak->StackTop); return; } pStak->StackData[++pStak->StackTop] = value;//入栈值 printf('入栈成功!入栈值为: %d\r\n', value);} 【4】验证入栈情况,将数据入栈中,入栈成功显示入栈数据。void main(void){ stcStack Stak; InitStaticStack(&Stak);//初始化堆栈 PushStaticStack(&Stak, 6);//入栈/压栈 PushStaticStack(&Stak, -5); PushStaticStack(&Stak, 13); PushStaticStack(&Stak, 2); PushStaticStack(&Stak, 67); while (1);} 【5】显示静态栈中所有数据,在非空栈情况下,从栈顶逐个显示占中数据。即先进后出的显示方式。 //显示栈中数据void ShowStaticStack(pStcStack pStak){ int i = 0; if (IsEmptyStaticStack(pStak)) { printf('静态栈为空,显示失败......\r\n'); printf('栈顶 : %d\r\n\r\n', pStak->StackTop); return; } printf('静态栈内容 : '); for (i = pStak->StackTop; i >=0 ; i--) printf('%d ', pStak->StackData[i]); printf('\r\n');}
【1】获取静态栈已使用空间大小,已使用空间为栈顶加1,即pStak->StackTop + 1。 //获取栈使用空间int CountStaticStack(pStcStack pStak){ if (IsEmptyStaticStack(pStak)) printf('静态栈为空......'); if (IsFullStaticStack(pStak)) printf('静态栈已满......'); printf('栈使用空间 : %d\r\n', (pStak->StackTop + 1)); return (pStak->StackTop + 1);} 【2】验证静态栈已使用空间的正确性。void main(void){ stcStack Stak; InitStaticStack(&Stak);//初始化堆栈 PushStaticStack(&Stak, 6);//入栈/压栈 PushStaticStack(&Stak, -5); PushStaticStack(&Stak, 13); PushStaticStack(&Stak, 2); PushStaticStack(&Stak, 67); ShowStaticStack(&Stak);//显示栈中数据 CountStaticStack(&Stak);//获取栈使用空间 printf('\r\n'); while (1);} 【3】获取静态栈剩余空间大小,剩余空间大小为栈总容量大小减去已使用空间大小,即STACK_MAX_SIZE - (pStak->StackTop + 1) //获取栈剩余大小int ResidueStaticStack(pStcStack pStak){ if (IsEmptyStaticStack(pStak)) printf('静态栈为空......'); if (IsFullStaticStack(pStak)) printf('静态栈已满......'); printf('栈剩余大小 : %d\r\n', (STACK_MAX_SIZE - (pStak->StackTop + 1))); return (STACK_MAX_SIZE - (pStak->StackTop + 1));} 【4】验证剩余栈空间大小void main(void){ stcStack Stak; InitStaticStack(&Stak);//初始化堆栈 PushStaticStack(&Stak, 6);//入栈/压栈 PushStaticStack(&Stak, -5); PushStaticStack(&Stak, 13); PushStaticStack(&Stak, 2); PushStaticStack(&Stak, 67); ShowStaticStack(&Stak);//显示栈中数据 CountStaticStack(&Stak);//获取栈使用空间 ResidueStaticStack(&Stak);//获取栈剩余大小 printf('\r\n'); while (1);}
【1】出栈,在非空栈的情况下,将栈顶数据返回,并且栈顶减1,即res = pStak->StackData[pStak->StackTop--] //出栈int PopStaticStack(pStcStack pStak){ int res = 0; if (IsEmptyStaticStack(pStak)) { printf('静态栈为空,出栈失败......\r\n'); printf('栈顶 : %d\r\n\r\n', pStak->StackTop); return res; } res = pStak->StackData[pStak->StackTop--];//出栈值 printf('出栈成功!出栈值为: %d\r\n', res);} 【2】验证出栈操作。void main(void){ stcStack Stak; InitStaticStack(&Stak);//初始化堆栈 PushStaticStack(&Stak, 6);//入栈/压栈 PushStaticStack(&Stak, -5); PushStaticStack(&Stak, 13); PushStaticStack(&Stak, 2); PushStaticStack(&Stak, 67); ShowStaticStack(&Stak);//显示栈中数据 CountStaticStack(&Stak);//获取栈使用空间 ResidueStaticStack(&Stak);//获取栈剩余大小 printf('\r\n'); PopStaticStack(&Stak);//出栈 printf('\r\n'); while (1);} 【3】验证栈初始化、入栈、出栈、使用空间、剩余空间、显示栈数据。void main(void){ stcStack Stak; InitStaticStack(&Stak);//初始化堆栈 PushStaticStack(&Stak, 6);//入栈/压栈 PushStaticStack(&Stak, -5); PushStaticStack(&Stak, 13); PushStaticStack(&Stak, 2); PushStaticStack(&Stak, 67); ShowStaticStack(&Stak);//显示栈中数据 CountStaticStack(&Stak);//获取栈使用空间 ResidueStaticStack(&Stak);//获取栈剩余大小 printf('\r\n'); PopStaticStack(&Stak);//出栈 PopStaticStack(&Stak); PopStaticStack(&Stak); PopStaticStack(&Stak); ShowStaticStack(&Stak);//显示栈中数据 CountStaticStack(&Stak);//获取栈使用空间 ResidueStaticStack(&Stak);//获取栈剩余大小 printf('\r\n'); while (1);}
【1】栈操作中的所有API#define STACK_MAX_SIZE 6 //栈大小 typedef struct stcStack{ int StackTop; //栈顶 int StackData[STACK_MAX_SIZE]; //栈数据区}stcStack, *pStcStack; //初始化堆栈void InitStaticStack(pStcStack pStak) //判断栈是否为空bool IsEmptyStaticStack(pStcStack pStak) //判断栈是否为满bool IsFullStaticStack(pStcStack pStak) //入栈/压栈void PushStaticStack(pStcStack pStak, int value) //出栈int PopStaticStack(pStcStack pStak) //显示栈中数据void ShowStaticStack(pStcStack pStak) //获取栈使用空间int CountStaticStack(pStcStack pStak) //获取栈剩余大小int ResidueStaticStack(pStcStack pStak
本人原创经验,仅供参考,若有不足之处请留言指正,若觉得写得好或凑合的话,请点击本页面左下角投票,谢谢了\(^o^)/
若有任何意见与帮助,请关注后私信留言,非喜勿喷
需要相关帮助请投票后关注私信