使用数组实现堆栈

原创 2017年09月13日 20:11:38
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAXSIZE 10
#define OK    1
#define ERROR 0
typedef int Status;
typedef int SElemType;
struct SqStack
{
    SElemType data[MAXSIZE];//数组实现堆栈
    int top;                //栈元素序号
};


Status push(struct SqStack *S, SElemType value)
{
    /*栈满*/
    if(S->top == MAXSIZE - 1)
    {
        return ERROR;
    }
    S->top++;
    S->data[S->top] = value;
    return OK;
}

Status pop(struct SqStack *S, SElemType *value)
{
    /*栈空*/
    if(S->top == -1)
        return ERROR;
    *value = S->data[S->top];
    S->top--;
    return OK;
}

int is_full(struct SqStack *S)
{
    return S->top == MAXSIZE- 1;
}

int is_empty(struct SqStack *S)
{
    return S->top == -1;
}

int main(void)
{
    struct SqStack *stack = (struct SqStack*)malloc(sizeof(struct SqStack));
    int i = 0;
    int value;
    stack->top = -1;//这句话很重要,不然会出错
    for(i=0; i<=10; i++)
    {
        if(is_full(stack))
        {
            printf("stack is full\n");
            break;
        }
        push(stack, i);
        printf("top is %d\n", stack->data[stack->top]);
    }

    for(i=0; i<=10; i++)
    {
        if(is_empty(stack))
        {
            printf("stack is empty\n");
            break;
        }
        pop(stack, &value);
        printf("%d pop\n", value);
    }
    return 0;
}
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAXSIZE 10
#define OK    1
#define ERROR 0
typedef int Status;
typedef int SElemType;
struct SqStack
{
    SElemType data[MAXSIZE];//数组实现堆栈
    int top;                //栈元素序号
};


Status push(struct SqStack *S, SElemType value)
{
    /*栈满*/
    if(S->top == MAXSIZE - 1)
    {
        return ERROR;
    }
    S->top++;
    S->data[S->top] = value;
    return OK;
}

Status pop(struct SqStack *S, SElemType *value)
{
    /*栈空*/
    if(S->top == -1)
        return ERROR;
    *value = S->data[S->top];
    S->top--;
    return OK;
}

int is_full(struct SqStack *S)
{
    return S->top == MAXSIZE- 1;
}

int is_empty(struct SqStack *S)
{
    return S->top == -1;
}

int main(void)
{
    struct SqStack *stack = (struct SqStack*)malloc(sizeof(struct SqStack));
    int i = 0;
    int value;
    stack->top = -1;//这句话很重要,不然会出错
    for(i=0; i<=10; i++)
    {
        if(is_full(stack))
        {
            printf("stack is full\n");
            break;
        }
        push(stack, i);
        printf("top is %d\n", stack->data[stack->top]);
    }

    for(i=0; i<=10; i++)
    {
        if(is_empty(stack))
        {
            printf("stack is empty\n");
            break;
        }
        pop(stack, &value);
        printf("%d pop\n", value);
    }
    return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

用数组实现堆栈

堆栈(stack)是一组相同数据类型数据的集合,且拥有后入先出(last in first out)的特性,即堆栈的所有操作都是在顶端进行的。堆栈有五个基本操作: Create ...

堆栈的数组实现

用数组来模拟堆栈的各种运算操作import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

C++ 堆结构(数组实现)

要说最大堆和最小堆,就得先知道最大树和最小树。 每个结点的值都大于(小于)或等于其子节点(如果有的话)值的树,就叫最大(最小)树。 最大堆(最小堆)是最大(最小)完全树。 由于堆是完全二叉树,所...

使用数组实现栈

//使用数组来实现栈 package 数组实现栈; import java.util.Arrays; interface StackADT { public void push(Obje...

用JAVA实现堆栈(数组篇)

什么是堆栈,关于这个名词,我在百度,google搜索了半天,也没有发现一个比较权威的解释,还有许多资料语焉不详,就以维基百科的解释为准吧,和我记忆中的一致。 堆栈(英文:stack),中国大陆作...

堆栈的实现

堆栈,是一种数据结构,其插入和删除操作都在同一端进行,其中一端称作栈顶,另外一端称作栈底。其中,堆栈是一种先进后出的数据结构,既可以使用公式化描述实现,也可以使用链表描述进行实现。例如,我们向栈中插入...

4-7 在一个数组中实现两个堆栈 (20分)

4-7 在一个数组中实现两个堆栈 (20分) 本题要求在一个数组中实现两个堆栈。 函数接口定义: Stack CreateStack( int MaxSize ); bool Pus...

PHP使用数组实现堆栈和队列

堆栈和队列是数据结构的两种实现形式,是使用非常广泛的存储数据的容器。下面呢,就分别讲下这两种容器在PHP中的应用: 一、使用数组实现堆栈:、 1、堆栈容器中,最后进栈的将会被最先出栈,即所谓的“先...
  • joyksk
  • joyksk
  • 2017-06-20 11:59
  • 1055

使用数组实现堆栈和队列

使用数组实现堆栈和队列

Java用数组实现堆

堆: 堆是有如下特点的二叉树: 1、它是完全二叉树,即树的最后一层不要求是满的,第一个空结点开始的结点,左边所有的兄弟结点必须全部不为空,右边所有结点必须全部为空。 2、常常用一个数组来实现。 3、堆...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)