栈的数组实现

原创 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;
}


栈的实现——链表和数组

C语言(打印函数采用的c++): 栈的链表实现—— 栈的初始化(创建||清空)、入栈、出栈(获取栈顶元素) 栈的数组实现——初始化、入栈、出栈、清空栈 参考资料:《数据结构与算法分析...
  • a04081122
  • a04081122
  • 2016年07月21日 19:29
  • 781

数据结构示例之使用数组实现栈

以下是“使用数组实现栈”的简单示例: 1. 用c语言实现的版本 #include #include #define MaxSize 10 int stack[MaxSize]; int top ...
  • chinawangfei
  • chinawangfei
  • 2016年10月28日 21:57
  • 531

基于数组和链表两种方式实现栈

栈是一种先进后出的数据结构,在实际编程栈有很广泛的用处,Java栈已经帮我们实现好了stack类。 实现栈的两种方式,基于数组实现和基于链表实现。 1.stack接口 public interfa...
  • u012922219
  • u012922219
  • 2016年09月22日 17:06
  • 583

用java数组实现栈

栈是一种常见的数据结构。如果用一句话来概括栈的特点,估计大部分同学都能脱口而出:后进先出,即先进来的元素保存在栈的最底部,新来的元素则在栈顶堆积,直到栈满为止;而取元素的时候,只能从栈顶取,直到栈空为...
  • bitcarmanlee
  • bitcarmanlee
  • 2016年05月30日 13:06
  • 1525

数组实现栈功能(C++练习记录)

通过数组实现栈功能。MyStack.h MyStack.cpp demo.cpp
  • h532600610
  • h532600610
  • 2017年03月02日 11:05
  • 477

栈的两种实现方式:数组和链表

栈的实现与应用 这里介绍两个基本数据类型实现的栈:数组与链表 1.首先我们介绍基于数组来实现栈的过程(直接看代码即可,里面都有详尽的注释) 为了秉承抽象特性,这里将接口操作与接口的实现方法进...
  • u014640201
  • u014640201
  • 2015年09月09日 13:43
  • 806

用数组实现堆栈

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

C++一个数组实现两个栈

方案一:将数组的下标为0的位置当做第一个栈的栈底,下标为1的位置当做第二个栈的栈底,将数组的偶数位置看做第一个栈的存储空间,奇数位置看做第二个栈的存储空间。 方案二:从中间分别向两边...
  • qingdou_aixuexi
  • qingdou_aixuexi
  • 2016年09月10日 22:14
  • 324

用一个数组实现两个栈

题目:用一个数组实现两个栈 方案一:将数组的下标为0的位置当做第一个栈的栈底,下标为1的位置当做第二个栈的栈底,将数组的偶数位置看做第一个栈的存储空间,奇数位置看做第二个栈的存储空间。 方案二...
  • xyzbaihaiping
  • xyzbaihaiping
  • 2016年04月18日 23:56
  • 2941

分别用数组和链表实现栈

1,堆栈ADT package Stack;public interface StackADT { public void push(Object element);//压栈 ...
  • mengzhejin
  • mengzhejin
  • 2014年07月15日 18:20
  • 919
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:栈的数组实现
举报原因:
原因补充:

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