栈的数组实现

原创 2013年12月04日 16:14:15

stack2.h

#ifndef STACK2_H_INCLUDED
#define STACK2_H_INCLUDED

/**< 栈的数组实现 */
typedef  int  ElementType;
struct  stackrecord
{
    int  Capacity;
    int  TopOfStack;
    int  *Array;
};
typedef  struct  stackrecord  *Stack;

Stack  CreatStack(int  maxelement);   /**< 建一个空栈 */
int  IsEmpty(Stack  S);
int  IsFull(Stack  S);
void  DisposeStack(Stack  S);             /**< 销毁栈 */
void  MakeEmpty(Stack  S);
Stack Push(ElementType  X, Stack S);
Stack Pop(Stack S);
ElementType  Top(Stack  S);
ElementType  TopAndPop(Stack  S);            /**< 出栈及返回栈顶元素 */


#endif // STACK2_H_INCLUDED












stack2.c


#include  <stdio.h>
#include  <stdlib.h>
#include  "stack2.h"

   /**< 建一个空栈 */
Stack  CreatStack(int  maxelement)
{
    Stack  S=(Stack)malloc(sizeof(struct  stackrecord));
    if(S==NULL)
        printf("out  of  space!!!");

    S->Array=(ElementType *)malloc(sizeof(ElementType)*maxelement);
    if(S->Array ==NULL)
        printf("error:out  of  space!!!");

    MakeEmpty(S);
    return  S;
}

int  IsEmpty(Stack  S)
{
    return  S->TopOfStack == -1;
}

int  IsFull(Stack  S)
{
    return S->TopOfStack ==S->Capacity -1;
}

             /**< 销毁栈 */
void  DisposeStack(Stack  S)
{
    if(S!=NULL)
    {
        free(S->Array);
        free(S);
    }
}


void  MakeEmpty(Stack  S)
{
    S->TopOfStack =-1;
}


Stack Push(ElementType  X, Stack S)
{
    if(!IsFull(S))
        S->Array[++S->TopOfStack] =X;
    else
        printf("error:stack  is  full!");

    return  S;
}


Stack Pop(Stack S)
{
    if(!IsEmpty(S))
        S->TopOfStack--;
    else
        printf("error:stack is empty!!!");

     return  S;
}
ElementType  Top(Stack  S)
{
    if(!IsEmpty(S))
        return  S->Array[S->TopOfStack];
    else
    {
        printf("Error:satck  is empty!!");
        return  0;
    }
}

            /**< 出战及返回栈顶元素 */
ElementType  TopAndPop(Stack  S)
{
    if(!IsEmpty(S))
        return  S->Array[S->TopOfStack--];
    else
        printf("Error: stack  is empty!!");

    return 0;
}




main.c

#include <stdio.h>
#include <stdlib.h>
#include  "stack2.c"

int main()
{
    Stack  S=(Stack)malloc(sizeof(struct  stackrecord));
    int  c;

    S=CreatStack(10);

    while((c=getchar())!=EOF)
        S=Push(c,S);

    while(!IsEmpty(S))
    {
        printf("%d\t",Top(S));
        S=Pop(S);
    }


    return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

栈的数组实现方法

一个数组实现两个栈

分析: 用一个数组实现两个栈有三种思路: (1)将数组按照奇、偶为分成两组 (2)将数组按照从两边到中间分成两组 (3)将数组按照从中间到两边分...

静态数组实现双向栈

// DouDirectionStack.cpp : 定义控制台应用程序的入口点。 //静态数组实现双向栈//拷贝构造函数有点问题 #include "stdafx.h" #include usin...

算法导论------------栈(stack)简单的数组实现

栈和队列都是动态集合,元素的出入是规定好的。栈规定元素是先进后出(FILO),队列规定元素是先进先出(FIFO)。栈和队列的实现可以采用数组和链表进行实现。在标准模块库STL中有具体的应用,可以参考h...

PHP数组实现栈和队列:push,pop,shif,unshift

尽管在PHP中允许直接访问某个数组单元,但PHP仍提供了各种有趣的方式来处理数组。特别要说的是,某些函数使PHP数组非常容易的实现了一个栈或队列。array_pop这个array_pop函数会删除并返...

Chapter 3 | Stacks and Queues--一个数组实现三个栈

3.1 Describe how you could use a single array to implement three stacks.
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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