使用数组实现堆栈

原创 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;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

韩顺平_PHP程序员玩转算法公开课(第一季)07_使用数组实现堆栈_学习笔记_源代码图解_PPT文档整理

文西马龙:http://blog.csdn.net/wenximalong/ 堆栈——快速入门 用数组模拟栈的使用(1) 由于堆栈是一种有序列表,当然可以使用数组的结构来存储堆栈的数据内容,堆栈...

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

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

使用数组实现堆栈和队列

使用数组实现堆栈和队列
  • lamp113
  • lamp113
  • 2016年04月13日 23:39
  • 361

数据结构与算法-----堆栈-使用数组(顺序结构)实现

堆栈1.基本特征:后进先出 2.基本操作:压入(push),弹出(pop) 3.实现要点:初始化空间、栈顶指针、判空判满 实践:使用C++语言实现堆栈类,进行示例演示并且根据此堆栈类实现进制的转...

在一个数组中实现两个堆栈

4-7 在一个数组中实现两个堆栈   (20分) 本题要求在一个数组中实现两个堆栈。 函数接口定义: Stack CreateStack( int MaxSize ); bool P...
  • ccDLlyy
  • ccDLlyy
  • 2016年09月24日 09:25
  • 911

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

本题要求在一个数组中实现两个堆栈。 函数接口定义:Stack CreateStack( int MaxSize ); bool Push( Stack S, ElementType X, int ...

数据结构与算法——在一个数组中实现两个堆栈(C语言)

要求在一个数组中实现两个堆栈。函数接口定义:Stack CreateStack( int MaxSize ); bool Push( Stack S, ElementType X, int Tag ...

JavaScript的数组实现队列与堆栈的方法

原文地址:点击打开链接 今天在项目中要使用JavaScript实现数据结构中的队列和堆栈,这里做一下总结。 一、队列和堆栈的简单介绍 1.1、队列的基本概念 队列:是一种支...

采用数组和节点方式实现的堆栈

package stack; /**  * 采用数组的方式实现的堆栈  * @author Administrator  *  */ public class MyStack {  public Ob...

PTA数据结构与算法题目集(中文)4-7 在一个数组中实现两个堆栈 (20分)

本题要求在一个数组中实现两个堆栈。 函数接口定义: Stack CreateStack( int MaxSize ); bool Push( Stack S, ElementType X, i...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用数组实现堆栈
举报原因:
原因补充:

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