数据结构-堆栈

堆栈(或栈stack)

定义:堆栈(或栈stack)是限定插入和删除运算只能在同一端进行的线性数据结构。是限定插入和删除运算只能在同一端进行的线性数据结构.

描述 :栈是后进先出(last-in-first-out LIFO)的动态线性数据结构.允许插入和删除元素的一端称为栈顶,另一端称为栈底。若栈中无元素,则称为空栈。
S=(a0,a1,…,an-1)

算法伪代码:

ADTStack {

   数据:

      零个或多个元素的线性序列(a0,a1,...,an-1), 其最 大允许长度为MaxStackSize。对于它插入和删除运算都限制在同一端进行,并遵循LIFO原则。

   运算:

       Create(): 建立一个空栈。

       Destroy():撤消一个栈。

IsEmpty():若栈空,则返回true;否则返回 false。

    IsFull(): 若栈满,则返回true; 否则返回 false。

    Top(x):返回栈顶元素。若操作成功,则返回true;否则返回false。

    Push(x): 在栈顶插入元素x。

    Pop():   从栈中删除栈顶元素。

    Clear():  清除堆栈中全部元素。

};

算法如下:

C语言实现:

#include "stdio.h"

#ifndef ElemType
#define ElemType int /*在实际应用中,将ElemType定义成实际类型*/
#endif/*typedef int ElemType;*/

#ifndef SQ_Stack              /*或 #if !defined(SQ_Stack)*/
#define SQ_Stack

#ifndef MaxSize/*MaxSize未定义过则定义*/
#define MaxSize 100  /*顺序栈的容量,栈存储元素个数*/
#endif
  
typedef struct{
ElemType data[MaxSize];/*定义存储栈中元素的数组*/
int top;                 /*栈顶位置*/
}sqStack;

void InitStack(sqStack *S)/*初始化栈*/ 
{S->top=-1;} 

int Empty(sqStack *S)/*判栈空*/
{return S->top==-1?1:0;}

int Full(sqStack *S)/*判栈满*/
{return S->top==MaxSize-1;}

int Push(sqStack *S,ElemType x)/*入栈*/
{if(Full(S))return 0;/*{printf("栈满!\n");}*/
 S->data[++S->top]=x;return 1;}

int Pop(sqStack *S,ElemType *x)/*出栈*/     
{if(Empty(S))return 0;/*{printf("栈空!");}*/
 *x=S->data[S->top--];return 1;}

int GetTop(sqStack *S,ElemType *x)/*取栈顶元素*/
{if(Empty(S))return 0;/*{printf("栈空!");}*/
 *x=S->data[S->top];
 return 1;}

#endif
C++实现:

#include <iostream.h>
//using namespace std;
#ifndef SQ_Stack2              //或 #if !defined(SQ_Stack)
#define SQ_Stack2

template<class ElemType>
class sqStack{
ElemType *data,X; //定义存储栈中元素的数组
int top,MaxSize;  //栈顶位置,顺序栈的容量
public://初始化栈
sqStack(int n=100):top(-1),MaxSize(n),X(0){data=new ElemType[n];} 

int Empty(){return top==-1?1:0;}//判栈空

int Full(){return top==MaxSize-1;}//判栈满

int Push(ElemType x)//入栈
{if(Full())return 0;//{printf("栈满!\n");}
 data[++top]=x;return 1;}

ElemType Pop()//出栈     
{if(Empty())return X;//{printf("栈空!");}
 return data[top--];}

ElemType GetTop()//取栈顶元素
{if(Empty())return X;//{printf("栈空!");}
 return data[top];}

};
#endif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值