数据结构-堆栈

来源:互联网 发布:数据库substring 编辑:程序博客网 时间:2024/04/30 04:31

堆栈(或栈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_Stack2template<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

0 0
原创粉丝点击