顺序栈及其操作

一、顺序栈的基本概念

 栈是一种特殊的线性表,规定它的插入和删除运算均在线性表的同一端进行,进行插入和删除操作的那一端称为栈顶,另一端称为栈底。栈的插入和删除操作分别简称进栈和出栈。

顺序栈的基本存储结构

#define Maxsize 100
typedef int datatype;
typedef struct {
    datatype a[Maxsize];
    int top;
}sequence_stack;

 

二、顺序栈的操作集合

//void init(sequence_stack *s)
//int empty(sequence_stack s)
//int full(sequence_stack s)
//datatype get_top(sequence_stack *s)
//void pop(sequence_stack *s)
//void push(sequence_stack *s,datatype x)
//void print_down(sequence_stack s) 
//void print_up(sequence_stack s) 

 

三、顺序栈的代码实现

顺序栈的初始化

/**************************************/
/* 函数名:init                         */
/* 函数功能:顺序栈的初始化--置空栈        */
/* 函数参数:s顺序栈                     */
/* 函数返回值:null                     */
/**************************************/
void init(sequence_stack *s)
{
    s->top=-1;
} 

 

判断顺序栈是否为空

/**************************************/
/* 函数名:empty                        */
/* 函数功能:判断顺序栈是否为空            */
/* 函数参数:s顺序栈                     */
/* 函数返回值:int。1为栈空,0为非空       */
/**************************************/
int empty(sequence_stack s)
{
    return s.top==-1? 1:0;
} 

 

判断顺序栈是否满

/**************************************/
/* 函数名:full                         */
/* 函数功能:判断顺序栈是否满              */
/* 函数参数:s顺序栈                     */
/* 函数返回值:int。1为栈满              */
/**************************************/
int full(sequence_stack s)
{
    return     s.top==Maxsize-1? 1:0;
} 

 

取出栈顶元素

/**************************************/
/* 函数名:get_top                      */
/* 函数功能:取出栈顶元素                 */
/* 函数参数:s顺序栈                     */
/* 函数返回值:datatype。-999栈为空       */
/**************************************/
datatype get_top(sequence_stack s)
{
    if(empty(s)){
        printf("栈为空,无法取出栈顶元素!\n");
        return -999;
    }    
    else
        return s.a[s.top]; 
}

 

出栈

/*******************************/
/* 函数名:pop                   */
/* 函数功能:出栈                 */
/* 函数参数:s顺序栈              */
/* 函数返回值:null              */
/*******************************/
void pop(sequence_stack *s) 
{
    if(empty(*s))
        printf("栈为空,无法出栈!\n");
    else{
        s->top--; 
        //printf("成功出栈!\n");
    }
}

 

进栈

/*******************************/
/* 函数名:push                  */
/* 函数功能:进栈                 */
/* 函数参数:s顺序栈              */
/*          x进栈元素           */
/* 函数返回值:null              */
/*******************************/
void push(sequence_stack *s,datatype x)
{
    if(!full(*s)){
        s->a[++s->top]=x;
        //printf("成功进栈!\n");
    }
    else{
        printf("栈已满,无法进栈!\n");
    }
 }

 

打印栈(从上到下)

/********************************/
/* 函数名:print                  */
/* 函数功能:打印栈(从上往下)      */
/* 函数参数:s顺序栈               */
/* 函数返回值:null               */
/********************************/
void print_down(sequence_stack s)
{
    int i;
    if(!empty(s)){
        for(i=s.top;i>=0;i--)
            printf("%d ",s.a[i]);
        printf("\n"); 
    }
}

 

打印栈(从下到上)

/********************************/
/* 函数名:print                  */
/* 函数功能:打印栈(从下往上)      */
/* 函数参数:s顺序栈               */
/* 函数返回值:null               */
/********************************/
void print_up(sequence_stack s)
{
    int i;
    if(!empty(s)){
        for(i=0;i<=s.top;i++)
            printf("%d ",s.a[i]);
        printf("\n"); 
    }
}

 

 

φ(゜▽゜*)♪ 感谢观看,希望对你有帮助!

posted @ 2022-11-18 11:33  Mr_宋先生  阅读(52)  评论(0编辑  收藏  举报