用C语言创建顺序栈并实现出栈、入栈等简单基本操作

栈:是一种特殊的线性存储数据结构,分为顺序栈和链式栈,其特点是“先进后出”,类似于箱子。栈底元素保持不变,对栈中元素的删除(出栈)和插入(压栈)操作只能在栈顶进行操作。
用C语言创建顺序栈并实现出栈、入栈等简单基本操作_第1张图片

栈的结构定义:

typedef struct
{
    int base ;//base始终是指向栈底
    int top ; //top指向栈顶元素的上一个位置
    int data[ MAXIZE ] ; //定义栈
} Stack ;

初始化栈:

void init_stack( Stack * S )
{
    S->base = S->top = 0 ;
}

判断栈是否已满:

int full_stack( Stack * S )
{
    if( S->top == MAXIZE - 1 )
        return OK ;
    else
        return ERROR ;
}

判断栈是否为空:

int empty_stack( Stack * S )
{
    if( S->base == S->top )
        return OK ;
    else
        return ERROR ;
}

压栈操作:

int push_stack( Stack * S , int val )
{
    if( full_stack( S ) )
        return ERROR ;//栈满就不能进行压栈操作
    else
    {
        S->data[ S->top++ ] = val ;
        return OK ;
    }
}

出栈操作:

int pop_stack( Stack * S , int * val )
{
    if( empty_stack( S ) ) //栈空不能进行出栈操作
        return ERROR ;
    else
    {
        *val = S->data[ --S->top ] ;
        return OK ;
    }
}

遍历栈:

int traverse_stack( Stack * S )
{
    if( empty_stack( S ) )
        return ERROR ;
    else
    {
        //这里遍历栈的时候千万不能直接对top进行操作
        //如:while( --S->top= 0 ) printf( "%d " , S->data[ S->top ]),这样子就会改变了原来的栈,因此就要引入计数器i
        for( int i = S->top - 1 ; i >= 0 ; i-- )
            printf( "%d " , S->data[ i ] ) ;

        printf( "\n" ) ;
        return OK ;
    }
}

取栈顶元素:

int gettop( Stack * S , int * val )
{
    if( empty_stack( S ) )
        return ERROR ;
    else
    {
        int i = S->top - 1 ;
        *val = S->data[ i ] ;
        return OK ;
    }
}

清空栈:

int clear_stack( Stack * S )
{
    S->top = S->base ;
    return OK ;
}

附上源代码:

#include
#include

#define MAXIZE 100
#define ERROR 0
#define OK 1

typedef struct
{
    int base ;
    int top ;
    int data[ MAXIZE ] ;
} Stack ;

void init_stack( Stack * S ) ;
int empty_stack( Stack * S ) ;
int full_stack( Stack * S ) ;
int push_stack( Stack * S , int val ) ;
int pop_stack( Stack * S , int * val ) ;
int traverse_stack( Stack * S ) ;
int clear_stack( Stack * S ) ;
int gettop( Stack * S , int * val ) ;

int main( void )
{
    Stack S ;
    int val ;
    init_stack( &S ) ;
    push_stack( &S , 2 ) ;
    push_stack( &S , 3 ) ;
    push_stack( &S , 4 ) ;
    push_stack( &S , 5 ) ;
    push_stack( &S , 6 ) ;
    traverse_stack( &S ) ;
    pop_stack( &S , &val ) ;
        printf( "出栈元素是  %d\n" , val ) ;
    traverse_stack( &S ) ;
    gettop( &S , &val ) ;
        printf( "栈顶元素是 %d\n" , val ) ;

    return 0 ;
}

void init_stack( Stack * S )
{
    S->base = S->top = 0 ;
}

int empty_stack( Stack * S )
{
    if( S->base == S->top )
        return OK ;
    else
        return ERROR ;
}

int full_stack( Stack * S )
{
    if( S->top == MAXIZE - 1 )
        return OK ;
    else
        return ERROR ;
}

int push_stack( Stack * S , int val )
{
    if( full_stack( S ) )
        return ERROR ;
    else
    {
        S->data[ S->top++ ] = val ;
        return OK ;
    }
}

int pop_stack( Stack * S , int * val )
{
    if( empty_stack( S ) )
        return ERROR ;
    else
    {
        *val = S->data[ --S->top ] ;
        return OK ;
    }
}

int traverse_stack( Stack * S )
{
    if( empty_stack( S ) )
        return ERROR ;
    else
    {
        for( int i = S->top - 1 ; i >= 0 ; i-- )
            printf( "%d " , S->data[ i ] ) ;

        printf( "\n" ) ;
        return OK ;
    }
}

int clear_stack( Stack * S )
{
    S->top = S->base ;
    return OK ;
}

int gettop( Stack * S , int * val )
{
    if( empty_stack( S ) )
        return ERROR ;
    else
    {
        int i = S->top - 1 ;
        *val = S->data[ i ] ;
        return OK ;
    }
}

你可能感兴趣的:(数据结构,数据结构,栈,c语言)