数据结构----顺序栈的基本操作纯c语言

#include 
#include 

typedef int  ElemType;
#define stack_init_size 100    
#define  STACKINCREMENT 10
typedef struct
{
    ElemType *base;
    ElemType *top;
    int  stackSize;
}sqStack;

void Initsize(sqStack *s)
{
    s->base=(ElemType*)malloc(stack_init_size*sizeof(ElemType));
    if(s->base==0)
        exit(1);   //分配失败
    s->top=s->base;   //栈顶就是栈低
    s->stackSize=stack_init_size;//栈的最大量而不是当前容量
}

void Destroy(sqStack *s)
{
       int i,len;
       len=s->stackSize;
       for( i=0;ibase);
        s->base++;
        }
        s->base=s->top=NULL;
        s->stackSize=0;
}

void Clear(sqStack *s)
{
    s->top=s->base; //将栈中的元素全部作废,表明这个栈是空的。因为只是操作上top和base一样了只清空了列表没有清除值。
}

int GetTop(sqStack *s)
{
    int i=0;
    if(s->top==s->base)
     {
         return 0;
     }
     else
        i=*(s->top-1);
    return i;
}

void Push(sqStack *s, ElemType e)
{
    // 如果栈满,追加空间
    if( s->top-s->base >= s->stackSize )
    {
        s->base = (ElemType *)realloc(s->base, (s->stackSize + STACKINCREMENT) * sizeof(ElemType));
        if( !s->base )
            exit(0);
        s->top=s->base+s->stackSize;              // 设置栈顶
        s->stackSize=s->stackSize+STACKINCREMENT; // 设置栈的最大容量
    }

    *(s->top) = e;
    s->top++;
}
int Pop(sqStack *s)
{   int e;
        if( s->top == s->base )  // 栈已空
                return 0;
     else{
        s->top--;
        e=*(s->top);
        return e;
     }
}
int StackTraverse(sqStack S)
{      
    ElemType *p; 
    if (S.base == NULL) 
    {
        
        exit(1); 
    }
    else if (S.top == S.base)
    {     
        printf("栈中没有元素……\n");
        exit(1);
    }
    else
    {
        p = S.top;   
        while (p > S.base)   
        {      
            p--;     
            printf("%d ",*p);  
        }     
        return 0;
    }
}

void main()
{
    sqStack s;
    int i,n,e,k;

    printf("初始化一个栈");
    Initsize(&s);

    printf("输入栈的长度:\n");
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        printf("输入栈的第%d个元素\n",i);
        ++s.top;
        scanf("%d",s.top-1);
    }
    printf("遍历:");
    StackTraverse(s);

    e=GetTop(&s);
    printf("\n栈顶元素是%d\n",e);
    printf("\n请输入要插入的元素数值:");
    scanf("%d",&k);
    Push(&s,k);
    printf("遍历:");
    StackTraverse(s);

    printf("\n栈顶删除元素是:");
    e=Pop(&s);
    printf("%d\n",e);
    printf("\n");
    printf("遍历:");
    StackTraverse(s);


    printf("清空栈\n");
    Clear(&s);
    printf("遍历:");
    StackTraverse(s);

    printf("销毁栈\n");
    Destroy(&s);


}

 

你可能感兴趣的:(数据结构----顺序栈的基本操作纯c语言)