概述
分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net
/*
* Fatal.h - by LiveEveryDay
*/
#include <stdio.h>
#include <stdlib.h>
#define Error( Str ) FatalError( Str )
#define FatalError( Str ) fprintf( stderr, "%sn", Str ), exit( 1 )
/*
* ArrayStack.h - by LiveEveryDay
*/
typedef int ElementType;
#ifndef _ArrayStack_
#define _ArrayStack_
struct ArrayStackRecord;
typedef struct ArrayStackRecord* ArrayStack;
ArrayStack CreateArrayStack(int MaxElements);
void PushArrayStack(ElementType X, ArrayStack S);
ElementType TopOfArrayStack(ArrayStack S);
void PopArrayStack(ArrayStack S);
ElementType TopAndPopArrayStack(ArrayStack S);
int IsArrayStackEmpty(ArrayStack S);
int IsArrayStackFull(ArrayStack S);
void MakeArrayStackEmpty(ArrayStack S);
void DisposeArrayStack(ArrayStack S);
#endif
/*
* ArrayStack.c - by LiveEveryDay
*/
#include "ArrayStack.h"
#include "../Fatal.h"
#include <stdlib.h>
#define EmptyTOS ( -1 )
#define MinStackSize ( 5 )
struct ArrayStackRecord
{
int Capacity;
int TopOfStack;
ElementType* Array;
};
ArrayStack CreateArrayStack(int MaxElements)
{
if (MaxElements < MinStackSize)
{
Error("Stack size is too small!");
}
ArrayStack S;
S = malloc(sizeof(struct ArrayStackRecord));
if (S == NULL)
{
FatalError("Out of memory!!");
}
S->Array = malloc(sizeof(ElementType) * MaxElements);
if (S->Array == NULL)
{
FatalError("Out of memory!!");
}
S->Capacity = MaxElements;
MakeArrayStackEmpty(S);
return S;
}
void PushArrayStack(ElementType X, ArrayStack S)
{
if (IsArrayStackFull(S))
{
Error("Full stack!");
}
else
{
S->Array[++S->TopOfStack] = X;
}
}
ElementType TopOfArrayStack(ArrayStack S)
{
if (!IsArrayStackEmpty(S))
{
return S->Array[S->TopOfStack];
}
Error("Empty stack!");
return 0;
}
void PopArrayStack(ArrayStack S)
{
if (IsArrayStackEmpty(S))
{
Error("Empty stack!");
}
else
{
S->TopOfStack--;
}
}
ElementType TopAndPopArrayStack(ArrayStack S)
{
if (!IsArrayStackEmpty(S))
{
return S->Array[S->TopOfStack--];
}
Error("Empty stack!");
return 0;
}
int IsArrayStackEmpty(ArrayStack S)
{
return S->TopOfStack == EmptyTOS;
}
int IsArrayStackFull(ArrayStack S)
{
return S->TopOfStack == S->Capacity - 1;
}
void MakeArrayStackEmpty(ArrayStack S)
{
S->TopOfStack = EmptyTOS;
}
void DisposeArrayStack(ArrayStack S)
{
if (S != NULL)
{
free(S->Array);
free(S);
}
}
/*
* ArrayStackTest.c - by LiveEveryDay
*/
#include "ArrayStack.h"
#include <stdio.h>
int main(void)
{
printf("Testing Array Stack...n");
ArrayStack S;
int i;
S = CreateArrayStack(12);
for (i = 0; i < 10; i++)
{
PushArrayStack(i, S);
}
while (!IsArrayStackEmpty(S))
{
printf("%dn", TopOfArrayStack(S));
PopArrayStack(S);
}
DisposeArrayStack(S);
return 0;
}
// Output:
/*
9
8
7
6
5
4
3
2
1
0
*/
最后
以上就是认真大山为你收集整理的Data Structure - Array Stack (C)的全部内容,希望文章能够帮你解决Data Structure - Array Stack (C)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复