栈的C语言 数组实现

原创 2015年07月10日 16:34:41

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

#define EmpytTos -1
#define MinStackSize 5


struct StackRecord
{
	int Capacity;
	int TopOfStack;
	ElementType *Array;
};

//typedef struct StackRecord * Stack;

Stack
CreateStack(int MaxStackSize)
{
	Stack S;
	
	if(MaxStackSize < MinStackSize)
		printf("%s\n","error");
	S = malloc( sizeof(struct StackRecord) );
	if(NULL == S)
		printf("%s\n","error");

	S->Capacity = MaxStackSize;
	S->TopOfStack = EmpytTos;
	S->Array = malloc( sizeof(ElementType) * MaxStackSize );
	if(NULL == S->Array)
		printf("%s\n","error");
	
	return S;
}

void
DisposeStack(Stack S)
{
	if(NULL != S)
	{
		free(S->Array);
		free(S);
	}
}

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

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

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

void
Push(ElementType x,Stack S)
{
	if(IsFull(S))
		printf("%s\n","error");
	S->Array[++S->TopOfStack] = x;
}

void
Pop(Stack S)
{
	if(IsEmpty(S))
		printf("%s\n","error");
	--S->TopOfStack;
}

ElementType
Top(Stack S)
{
	if(IsEmpty(S))
		printf("%s\n","error");
	return S->Array[S->TopOfStack--];
}

头文件:


#ifndef _Stack_h
#define _Stack_h

struct StackRecord;
typedef struct StackRecord *Stack;
typedef int ElementType;

Stack CreateStack(int MaxElements);
void DisposeStack(Stack S);
void MakeEmpty(Stack S);
int IsFull(Stack S);
int IsEmpty(Stack S);
void Pop(Stack S);
void Push(ElementType x,Stack S);
ElementType Top(Stack S);

#endif
.c文件

测试文件:



#include <stdio.h>
#include "stack.h"

int
main(void)
{
	Stack S;
	S = CreateStack(10);
	Push(2,S);
	printf("%d\n",Top(S));
	return 0;
}



makefile文件:




a.out:stacktest.o stack.o
	gcc -o a.out stacktest.o stack.o
stack.o:stack.c stack.h
	gcc -c stack.h stack.c
stacktest.o:stacktest.c
	gcc -c stacktest.c
clean:
	rm -rf *.o




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

相关文章推荐

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

这次是用数组来实现栈,实现思路和方法都比较简单,就不多解释了,下面直接上代码:头文件:#ifndef STACKCURSOR_H_INCLUDED #define STACKCURSOR_H_INCL...

C语言实现使用静态数组来构造栈结构

在数据结构中,栈是一种很重要的存在。这是一种先进后出的结构,就像一个“死胡同”一样。今天我们先用最简单的方式静态数组来模拟栈。代码上传至 https://github.com/chenyufeng19...

《数据结构与算法分析》—栈的链表和数组实现(C语言)

/*表头作为栈顶*/ #include #include struct Node { ElementType Element; PtrToNode Next; }; int IsE...

【数据结构】栈学习之数组实现(C语言)

问题1、结构体指针变量

C语言实现使用动态数组来构造栈结构

我在面前一篇博客《C语言实现使用静态数组来构造栈结构》中使用了静态数组来模拟栈的操作。静态数组的大小是在代码中写死的,是存储在用户栈上面的,使用起来不灵活。在这篇博客中我会使用动态数组来构造,此时使用...

C语言数组实现栈的基本操作,并利用O(1)求出栈中最小元素

#include #include #include #define MAX_STACK_SIZE 80 typedef struct { unsigned int stack[MAX_S...

栈的C语言实现(数组)

#include #include /* run this program using the console pauser or add your own getch, system("pau...

栈(stack)C语言链表实现&&数组实现

#ifndef _Stack_h struct Node; typedef struct Node *PtrToNode; typedef PtrToNode Stack; int IsEmpty...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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