栈的数组实现(C语言版)

来源:互联网 发布:云计算 erp 编辑:程序博客网 时间:2024/04/28 03:30

这次是用数组来实现栈,实现思路和方法都比较简单,就不多解释了,下面直接上代码:

头文件:

#ifndef STACKCURSOR_H_INCLUDED#define STACKCURSOR_H_INCLUDEDtypedef int ElementType;typedef struct StackRecord *Stack;int Isempty(Stack S);int IsFull(Stack S);Stack CreatStack(int MaxElements);void DisposeStack(Stack S);void MakeEmpty(Stack S);void Push(ElementType X,Stack S);ElementType Top(Stack S);void Pop(Stack S);ElementType TopAndPop(Stack S);#endif // STACKCURSOR_H_INCLUDED

实现:

#include "StackCursor.h"#include <stdlib.h>#define EmptyTOS (-1)#define MinStackSize (5)void Error(char * message){}void FatalError(char * message){}struct StackRecord{    int Capacity;    int TopOfStack;    ElementType * Array;};Stack CreatStack(int MaxElements){    Stack S;    if(MaxElements < MinStackSize)        Error("Stack size is too Small");    S = malloc( sizeof(struct StackRecord));    if( S == NULL )        FatalError("Out of space!!!");    S->Array = malloc(sizeof(ElementType)*MaxElements);    if(S->Array == NULL)        FatalError("Out of space!!!");    S->Capacity = MaxElements;    MakeEmpty(S);    return S;}void DisposeStack(Stack S){    if( S != NULL )    {        free(S->Array);        free(S);    }}int IsEmpty( Stack S ){    return S->TopOfStack == EmptyTOS;}void MakeEmpty( Stack S ){    S->TopOfStack = EmptyTOS;}void Push( ElementType X,Stack S ){    if( IsFull(S) )        Error( "Full stack" );    else        S->Array[++S->TopOfStack] = X;}ElementType Top(Stack S){    if(!IsEmpty( S ))        return S->Array[S->TopOfStack];    Error("Empty stack");    return 0;}void Pop(Stack S){    if( IsEmpty(S) )        Error("Empty stack");    else        S->TopOfStack--;}ElementType TopAndPop(Stack S){    if(!IsEmpty(S))        return S->Array[S->TopOfStack--];    Error("Empty stack");    return 0;}int IsFull(Stack S){    return S->TopOfStack == S->Capacity-1;}int main(){    Stack S = CreatStack(50);    int i;    for(i = 0;i < 20;i++)        Push(i,S);    while(!IsEmpty(S))    {        printf("%d\n",TopAndPop(S));    }    DisposeStack(S);}

注:代码改编自《数据结构与算法:C语言描述》第二版

0 0
原创粉丝点击