/* 语言:C++ 编译环境:Visual C++6.0 链栈的表示和实现 */
#include <iostream>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
// Status是函数返回值类型,其值是函数结果状态代码
typedef int Status;
// 自定义数据类型别名
typedef int ElemType;
using namespace std;
// 链栈的存储结构
typedef struct StackNode
{
ElemType data;
struct StackNode *next;
}StackNode,*LinkStack;
// 链栈的初始化
Status InitStack(LinkStack &S)
{ // 构造一个空栈S,栈顶指针置空
S = NULL;
return OK;
}
Status Push(LinkStack &S,ElemType e)
{
LinkStack p;
p = new StackNode; // 生成新结点
p->data = e; // 将新结点数据域置为e
p->next = S; // 将新结点插入栈顶
S = p; // 修改栈顶指针为p
return OK;
}
// 链栈的出栈
Status Pop(LinkStack &S,ElemType &e)
{ // 删除S的栈顶元素,用e返回其值
LinkStack p;
if(S==NULL) return ERROR; // 栈空
e = S->data; // 将栈顶元素赋给e
p=S; // 用p临时保存栈顶元素空间,以备释放
S=S->next; // 修改栈顶指针
delete p; // 释放原栈顶元素的空间
return OK;
}
// 取链栈的栈顶元素
ElemType GetTop(LinkStack S)
{ // 返回S的栈顶元素,不修改栈顶指针
if(S != NULL) // 栈非空
return S->data; // 返回栈顶元素的值,栈顶指针不变
return ERROR;
}
int main()
{
LinkStack S;
// 列表菜单
cout<<"1 InitStack"<<endl;
cout<<"2 Push"<<endl;
cout<<"3 Pop"<<endl;
cout<<"4 GetTop"<<endl;
int choice,e;
while(1)
{
cout<<"Input a choice: ";
cin>>choice;
// 选择
switch(choice)
{
case 1:
InitStack(S);
continue;
case 2:
Push(S,3);
continue;
case 3:
Pop(S,e);
continue;
case 4:
cout<<"Get: "<<GetTop(S)<<endl;
continue;
default:
cout<<"End..."<<endl;
break;
}
break;
}
return 0;
}
相关文章
- 数据结构之栈的顺序表示及其实现
- C#实现顺序栈和链栈的代码实例
- C语言 栈的表示和实现详细介绍
- 【数据结构和算法】【栈】顺序栈的代码实现
- 栈的顺序表示和实现(数据结构)
- 数据结构C语言版 有向图的十字链表存储表示和实现
- 栈和队列数据结构的基本概念及其相关的Python实现
- 基于C++类和指针实现二叉树1、二叉树的定义 二叉树(Binary Tree)是一种特殊的树型结构,每个节点至多有两棵子树,且二叉树的子树有左右之分,次序不能颠倒。 由定义可知,二叉树中不存在度(结点拥有的子树数目)大于2的节点。二叉树形状如下下图所示:2、二叉树的性质(1)在二叉树中的第i层上至多有2^(i-1)个结点(i>=1)。备注:^表示此方(2)深度为k的二叉树至多有2^k-1个节点(k>=1)。(3)对任何一棵二叉树T,如果其终端结点数目为n0,度为2的节点数目为n2,则n0=n2+1。满二叉树:深度为k且具有2^k-1个结点的二叉树。即满二叉树中的每一层上的结点数都是最大的结点数。完全二叉树:深度为k具有n个结点的二叉树,当且仅当每一个结点与深度为k的满二叉树中的编号从1至n的结点一一对应。可以得到一般结论:满二叉树和完全二叉树是两种特殊形态的二叉树,满二叉树肯定是完全二叉树,但完全二叉树不不一定是满二叉树。举例如下图是所示:(4)具有n个节点的完全二叉树的深度为log2n+ 1
- 用ECMAScript4 ( ActionScript3) 实现Unity的热更新 -- 使用原型链和EventTrigger
- 浅析数据结构栈和队列的相互实现