数据结构 - 顺序存储结构-栈

0

顺序存储结构-栈

//stack.c
#include <stdio.h>
#include <stdlib.h>

//类型
typedef struct node{

    int *data;
    int size;
    int top;
}stack_tt;
//创建
stack_tt* create_stack(int size)
{
    if(size<=0)
        return NULL;

    stack_tt* stack=malloc(sizeof(stack_tt));

    stack->size=size;
    stack->top=-1;//为空
    stack->data=malloc(sizeof(int)*size);

    return stack;
}
//判空
int isnull_stack(stack_tt* stack)
{
    if(stack==NULL)
        return 0;

    return stack->top==-1;
}
//判满
int isfull_stack(stack_tt* stack)
{
    if(stack==NULL)
        return 0;

    return stack->top==stack->size-1;
}
//入栈  push
int push_stack(stack_tt* stack,int data)
{
    //1
    if(stack==NULL||isfull_stack(stack))
        return -1;

    //2
    stack->data[stack->top+1]=data;
    
    //3
    stack->top++;

    return 0;
}
//出栈 pop   将数据取出  返回值能返回取出的值么???
int pop_stack(stack_tt* stack,int *data)
{
    if(stack==NULL||isnull_stack(stack))
        return -1;

    *data=stack->data[stack->top--];
    return 0;
}

//打印(假)
int print_stack_notreal(stack_tt* stack)
{
    if(stack==NULL||isnull_stack(stack))
        return -1;

    int i;
    for(i=stack->top;i>=0;i--)
    {
        printf("%3d ",stack->data[i]);
        
    }
    printf("\n");

    return 0;
}
//看一眼  view   只能看到栈的顶部元素
int view(stack_tt* stack)
{
    if(stack==NULL||isnull_stack(stack))
        return -1;

    printf("%3d ",stack->data[stack->top]);
    return 0;
}
//长度
int length_stack(stack_tt* stack)
{
    if(stack==NULL||isnull_stack(stack))
        return 0;

    return stack->top+1;
}

//清空
int clear_stack(stack_tt* stack)
{
    if(stack==NULL)
        return -1;
    
    stack->top=-1;
    return 0;
}
//销毁
int destroy_stack(stack_tt* stack)
{
    if(stack==NULL)
        return -1;

    free(stack->data);
    free(stack);

    return 0;
}

//打印(真)
int print_stack_real(stack_tt* stack)
{
    if(stack==NULL||isnull_stack(stack))
        return -1;

    stack_tt* temp=create_stack(length_stack(stack));

    int data;
    while(!isnull_stack(stack))
    {
        view(stack);
        pop_stack(stack,&data);
        push_stack(temp,data);
    }

    printf("\n");

    while(!isnull_stack(temp))
    {
        pop_stack(temp,&data);
        push_stack(stack,data);
    }

    destroy_stack(temp);
    return 0;
}
//逆打印(真)
int reprint_stack_real(stack_tt* stack)
{
    if(stack==NULL||isnull_stack(stack))
        return -1;

    stack_tt* temp=create_stack(length_stack(stack));

    int data;
    while(!isnull_stack(stack))
    {
    //    view(stack);
        pop_stack(stack,&data);
        push_stack(temp,data);
    }

//    printf("\n");

    while(!isnull_stack(temp))
    {
        view(temp);
        pop_stack(temp,&data);
        push_stack(stack,data);
    }
    printf("\n");

    destroy_stack(temp);
    return 0;
}



int main(int argc, const char *argv[])
{
    stack_tt* stack=create_stack(20);

    int i;

    for(i=1;i<=20;i++)
    {
        push_stack(stack,i*3);
        print_stack_notreal(stack);
    }

    reprint_stack_real(stack);
    print_stack_real(stack);
    print_stack_notreal(stack);

#if 0
    int data;
    for(i=1;i<=20;i++)
    {
        pop_stack(stack,&data);
        printf("pop data:%d\n",data);
        print_stack_notreal(stack);
    }
#endif

    return 0;
}

你可能感兴趣的

载入中...