栈结构的学习(转)
来源:互联网 发布:船舶定位软件 编辑:程序博客网 时间:2024/05/11 13:42
栈是一个很重要的数据结构。其主要的思想为:
1. 栈是一个后进先出的数据结构(last-in, first-out LIFO)。
2. 它的主要操作有“IsEmpty() 判断栈空。Push()插入数据。Pop弹出数据。
3. 它的核心数据为栈顶,栈数据区域。栈顶表示最后一个数据的位置,也表示了栈中数据的个数。这里是有一个int来表示。栈空的时候,栈顶位置为0。要得到栈顶元素,只需要用nData[nTop]就可以了。nData是它的数据区域。
4. 实现的一些细节,下面代码的栈顶的初始值为0,他代表什么数据也没有,压入数据的时候,先把栈顶加1,然后使nData[nTop] = 数据。这样在出栈和得到栈顶元素都很方便。也很方便的得到栈的数据个数。下标为0的空间没有用,浪费了这个空间得到了操作的方便。还有就是注意判断栈是否满了,如果满了还添加的话,栈溢出。也要判断栈如果已经为空了,就不能在弹出(pop)数据了。
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
//定义一个栈的结构体
struct MyStack
{
int nTop; //栈顶位置
int nData[11]; //栈的数据区域
};
MyStack g_stack;
//判断栈是否为空,空返回true
bool IsEmpty()
{
return !g_stack.nTop;
}
//设置栈为空
int SetEmpty()
{
g_stack.nTop = 0;
return 0;
}
//压数据入栈
int Push(int nData)
{
assert(g_stack.nTop < 10);
++g_stack.nTop;
g_stack.nData[g_stack.nTop] = nData;
return g_stack.nTop;
}
//得到栈顶的引用
int& GetTop()
{
assert(g_stack.nTop);
return g_stack.nData[g_stack.nTop];
}
//弹出栈顶元素,返回弹出的元素。
int Pop(void)
{
assert(g_stack.nTop);
--g_stack.nTop;
return g_stack.nData[g_stack.nTop + 1];
}
int main()
{
SetEmpty();
//测试栈
if (IsEmpty())
{
printf("MyStack Is Empty!/n");
}
for (int i = 0; i < 10; ++i)
{
Push(i);
printf("%d ", GetTop());
}
printf("/n");
while (!IsEmpty())
{
printf("%d ", Pop());
}
printf("/n");
system("pause");
return 0;
}
- 栈结构的学习(转)
- 学习笔记 栈(一.栈的顺序存储结构)
- 数据结构学习笔记(六)-- 栈的顺序结构
- C#结构的学习
- C#结构的学习
- 结构体的学习
- 结构体的学习
- 结构体的学习
- [转]DOM 结构-----有需要的大家学习学习吧
- CNN学习(二)-LeNet网络结构的学习
- 学习栈结构
- 结构学习(一)
- 学习结构的心得(二)
- sap组织结构的学习
- 我学习的系统结构
- 关于JVM结构的学习
- 关于JVM结构的学习
- 关于JVM结构的学习
- linux的rpm命令
- 下载东东不容易
- 流类数据转换
- poj 2506
- 鲁大师(原Z武器)漏洞修复,你必需知道的
- 栈结构的学习(转)
- Android控件美化Shape你会用吗?
- clean了一下,gen文件夹下的R.java文件消失
- poj 2229 Sumsets
- PayPal 基于浏览器的两种在线支付集成方式(wps和ecs)
- 学习
- C#线程池
- Java中如何获得SuperClass中的private fields
- poj 2549 Sumsets