顺序栈的基本操作:初始化、进栈、出栈、读栈顶元素
2016-05-29 13:43
429 查看
顺序栈:利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时由于栈操作的特殊性,还必须附设一个位置指针top(栈顶指针)来动态地指示栈顶元素在顺序栈中的位置。通常以top=-1表示空栈。
代码如下:
#include<iostream>
using namespace std;
#define TRUE 1
#define FALSE 0
//顺序栈的存储结构
#define Stack_Size 50 //设栈中元素个数为50
typedef struct
{
int elem[Stack_Size];//用来存放栈中元素的一维数组
int top;//用来存放栈顶元素的下标,top=-1表示空栈
}SeqStack;
//初始化顺序栈
void InitStack(SeqStack *S)
{
S->top = -1;//构造一个空栈
}
//顺序栈进栈运算,首先判断栈是否已满,若栈已满,还要进栈就会发生上溢
int Push(SeqStack *S,int x)//将x置入S栈新栈顶
{
if (S->top == Stack_Size - 1)//栈已满
{
return FALSE;
}
S->top++;
S->elem[S->top] = x;//把x入栈
return TRUE;
}
//顺序栈出栈运算,首先判断栈是否为空,若栈空,还要出栈就会发生下溢
int Pop(SeqStack *S, int *x)//将S栈顶元素弹出,放到x所指的存储空间中带出
{
if (S->top == - 1)//栈为空
{
return FALSE;
}
else
{
*x = S->elem[S->top];
S->top--;//修改栈顶指针
return TRUE;
}
}
//顺序栈读栈顶元素运算
int GetPop(SeqStack *S, int *x)//将栈S栈顶元素读出,放到x所指的存储空间中,栈顶指针保持不变
{
if (S->top == -1)//栈为空
{
return FALSE;
}
else
{
*x = S->elem[S->top];
return TRUE;
}
}
注意:在实现GetPop操作时,也可将参数SeqStack *S改为SeqStack S,将传地址方式改为传值方式。传值比传地址容易理解,但传地址比传值更节省空间与时间。
本文出自 “岩枭” 博客,请务必保留此出处http://yaoyaolx.blog.51cto.com/10732111/1771270
代码如下:
#include<iostream>
using namespace std;
#define TRUE 1
#define FALSE 0
//顺序栈的存储结构
#define Stack_Size 50 //设栈中元素个数为50
typedef struct
{
int elem[Stack_Size];//用来存放栈中元素的一维数组
int top;//用来存放栈顶元素的下标,top=-1表示空栈
}SeqStack;
//初始化顺序栈
void InitStack(SeqStack *S)
{
S->top = -1;//构造一个空栈
}
//顺序栈进栈运算,首先判断栈是否已满,若栈已满,还要进栈就会发生上溢
int Push(SeqStack *S,int x)//将x置入S栈新栈顶
{
if (S->top == Stack_Size - 1)//栈已满
{
return FALSE;
}
S->top++;
S->elem[S->top] = x;//把x入栈
return TRUE;
}
//顺序栈出栈运算,首先判断栈是否为空,若栈空,还要出栈就会发生下溢
int Pop(SeqStack *S, int *x)//将S栈顶元素弹出,放到x所指的存储空间中带出
{
if (S->top == - 1)//栈为空
{
return FALSE;
}
else
{
*x = S->elem[S->top];
S->top--;//修改栈顶指针
return TRUE;
}
}
//顺序栈读栈顶元素运算
int GetPop(SeqStack *S, int *x)//将栈S栈顶元素读出,放到x所指的存储空间中,栈顶指针保持不变
{
if (S->top == -1)//栈为空
{
return FALSE;
}
else
{
*x = S->elem[S->top];
return TRUE;
}
}
注意:在实现GetPop操作时,也可将参数SeqStack *S改为SeqStack S,将传地址方式改为传值方式。传值比传地址容易理解,但传地址比传值更节省空间与时间。
本文出自 “岩枭” 博客,请务必保留此出处http://yaoyaolx.blog.51cto.com/10732111/1771270
相关文章推荐
- 斐波拉契数列的递归、非递归、公式法多种方法实现
- 如何暴力解决弱N皇后问题(比较sb的做法)
- 中高级运维工程师所需要掌握的技能
- 传感器系列之4.6雨滴传感器
- c语言:通过指针变量访问整型变量
- c语言:利用指针变量,用函数实现将3个整数按从大到小的顺序输出
- c语言:引用指针变量比较两个整数的大小
- c语言:通过指针变量输出整型数组a的10个元素
- c语言:用结构体变量输出学生的信息,包括学号,姓名,性别。
- c语言:通过指向结构体变量的指针变量输出结构体变量中成员的信息
- c语言:编一个统计选票的程序,先后输入被选人的名字,最后输出各人得票结果
- c语言:将数组中n个整数按相反顺序存放。
- 命名空间的作用及编程举例
- 函数的重载定义及应用
- 利用图形窗口分割法将极坐标方程:r=cos(θ/3)+1/9用四种绘图方式画在不同的窗口中
- 利用MATLAB绘制隐函数f(x,y)=x^2 * sin(x+y^2)+y^2 * exp(x+y)+5 * cos(x^2+y)=0的曲线
- 用鼠标左键绘制折线,利用鼠标中键或右键终止绘制
- 绘制二元函数z=f(x,y)=(x^2-2*x)*exp(-x^2-y^2-x*y)的曲线及其三视图和三维表面图形
- 引用的定义、使用及其和指针的区别与联系
- 构造函数的定义和构造函数的重载