顺序栈的基本操作

c语言实现顺序栈的基本操作

#include<stdlib.h>
#include<stdio.h>
#include<conio.h>
#define INIT_SIZE 20
#define INCREMENT 10
typedef int ElemType;
typedef struct
{
    ElemType* base;
    ElemType*  top;
    int StackSize;

}SqStack;
SqStack * Init_Stack();
int Empty_Stack(SqStack *s);
void Push(SqStack *s, ElemType data);
ElemType Pop(SqStack *s);
void Print_Stack(SqStack *s);
ElemType Get_Top(SqStack *s);
int Get_Len(SqStack *s);

SqStack * Init_Stack()
{
    SqStack *s=(SqStack*)malloc(sizeof(SqStack));//为栈提供内存
    s->base = (ElemType*)malloc(sizeof(ElemType)*INIT_SIZE);//为栈的内容提供内存
    if (!s&&s->base)return;
    s->top = s->base;//栈顶=栈底 
    s->StackSize = INIT_SIZE;
    return s;
}
int Empty_Stack(SqStack *s)//判断空栈
{
    if (s->top == s->base)
    {
        return 1;
    }
    return 0;
}
void Push(SqStack *s,ElemType data)//入栈
{
    if (!s->base&&s)return;
    if (s->top - s->base >= INIT_SIZE)
    {
        s->base = (ElemType*)realloc(s->base, s->StackSize + sizeof(ElemType)*INCREMENT);//分配增量的空间给栈
        if (!s->base)return;
        s->top = s->base + s->StackSize;//重新设置栈顶指针
        s->StackSize += INCREMENT;
    }
    *(s->top) = data;//为栈顶指针指向的地址赋值
    s->top++;//栈顶指针指向下个地址
}

ElemType Pop(SqStack *s)//出栈
{
    if (Empty_Stack(s))return;
    ElemType data = *(s->top - 1);
    (s->top)--;
    return data;
}
void Print_Stack(SqStack *s)//打印栈
{
    if (Empty_Stack(s))return;
    ElemType *p = s->top;    //定义一个用来遍历的指针
    while (p != s->base) //从栈顶遍历到栈底
    {
        printf("%d ",*(p-1));
        p--;
    }
}
ElemType Get_Top(SqStack *s)//取栈顶元素
{
    if (Empty_Stack(s))return;
    ElemType data= *(s->top - 1);
    return data;
}
int Get_Len(SqStack *s)
{
    int len=s->top-s->base;
    return len;
}
main()
{
    SqStack *S = Init_Stack();
    Push(S, 5);
    Push(S, 6);
    Push(S, 4);
    Push(S, 7);
    printf("\n栈内元素为: ");
    Print_Stack(S);
    printf("\n出栈元素为: %d ", Pop(S));
    printf("\n栈内元素为: ");
    Print_Stack(S);
    printf("\n栈顶元素为:%d ",Get_Top(S));
    printf("\n栈的长度为:%d ", Get_Len(S));
    system("pause");
}

 

posted @ 2019-05-09 11:42  忘心笑  阅读(757)  评论(0)    收藏  举报