顺序栈的实现(c语言)

来源:互联网 发布:手机网络卡是怎么回事 编辑:程序博客网 时间:2024/05/01 18:26

一、定义:栈是限定尽在一端插入或删除操作的线性表。“后进先出(LIFO)”。

二、习惯上称栈的可访问元素为站栈顶(top)元素,元素插入栈称为入栈(push),删除元素称为出栈(pop)。

三、顺序栈:

l  顺序栈在建立栈的时候必须说明一个固定长度。

l  当栈中有n个元素时把位置n-1作为栈顶,Top位置不存放值。

l  实现如下:

#include<stdio.h>
#define MAXSIZE 100
typedef char datatype;
typedef struct
{
    datatype S[MAXSIZE];
    int top;
} SeqStack;
SeqStack ST;
datatype x;
void  push(SeqStack *ST,datatype x);//压入栈中
char pop(SeqStack *ST);//出栈
int stackEmpty(SeqStack ST);//判断栈是否为空
void clearStack(SeqStack *ST);//清空栈
datatype getTop(SeqStack *ST);//获取栈顶元素
int main()
{
    clearStack(&ST);
    int i;




    datatype y;
    printf("请输入1个元素压入栈中:\n");
    scanf("%c",&y);
    push(&ST,y);
    if(!stackEmpty(ST))
    {
        printf("栈非空!表明压入了元素!\n");
    }
    else
    {
        printf("为空栈!\n");
    }
    datatype z;
    z=getTop(&ST);
    printf("栈顶元素为:%c\n",z);
    z=pop(&ST);
    printf("弹出 的元素为:%c\n",z);
    if(!stackEmpty(ST))
    {
        printf("栈非空!\n");
    }
    else
    {
        printf("为空栈!\n");
    }


}




void  push(SeqStack *ST,datatype x)
{
    printf("此时栈顶%d\n",ST->top);
    if(ST->top>=MAXSIZE-1)
    {
        printf("overflow");
    }
    else
    {
        ST->S[++ST->top]=x;
    }
}
datatype pop(SeqStack *ST)
{
    printf("此时栈顶为%d",ST->top);
    if(ST->top==-1)
    {
        printf("underflow!");


    }
    else
    {


        return x=ST->S[ST->top--];


    }


}
int stackEmpty(SeqStack ST)
{
    if(ST.top==-1)
        return 1;
    else return 0;


}
void clearStack(SeqStack *ST)
{
    ST->top=-1;
}
datatype getTop(SeqStack *ST)
{
    if(ST->top==-1)
    {
        printf("该栈为空!");
    }
    else
    {


        return ST->S[ST->top];
    }


}

运行结果如下图:


原创粉丝点击