利用数组实现栈

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用数组实现栈相关的知识,希望对你有一定的参考价值。

利用结构体封装一个内部数组,和一个元素游标,就可以实现栈了。

内部数组可以存储在内存的栈中(Stack),也可以动态申请,存储组堆中(Heap)

储存在栈中,则需要制定栈的最大容量。储存在堆中,就可以通过malloc函数申请初始容量,当容量不够后,还可哟通过realloc函数扩充。

下面是用栈储存区实现的,因此不涉及动态内存分配和释放的问题,都由系统帮我们管理。

 

 

 

/*********
file : ArrayStack.h
date:2016/3/26

*********/


#ifndef _ARRAYSATCK_H_
#define _ARRAYSATCK_H_

#define NULL 0
const int MAX_SIZE = 50;   //栈的最大容量 
typedef int DataType;

typedef struct {
    DataType InnerArr[MAX_SIZE];
    
    int cur;    //实际元素个数的游标 ,初始化为-1 
    
}ArrayStack;



void InitStack(ArrayStack* mystack);
DataType GetPeek(const ArrayStack* mystack);
int Pop(ArrayStack* mystack, DataType*de);
int Push(ArrayStack* mystack , DataType newData);
int StackIsEmpty(const ArrayStack* mystack);
int StackIsFull(const ArrayStack* mystack);
void ClearStack(ArrayStack* mystack);
int StackLength(const ArrayStack* mystack);



#endif

 

/******************
file:ArrayStack.cpp
date:2016/3/26
*******************/

#include "ArrayStack.h" //初始化栈 void InitStack(ArrayStack* mystack) { mystack->cur = -1; } DataType GetPeek(const ArrayStack* mystack) { return mystack->InnerArr[mystack->cur]; } int Pop(ArrayStack* mystack, DataType*de) { if(StackIsEmpty(mystack)) return 0; if(de!=NULL) //如果用户需要保存这个被删除的元素 *de = mystack->InnerArr[mystack->cur]; (mystack->cur)--; return 1; } int Push(ArrayStack* mystack , DataType newData) { if(StackIsFull(mystack)) return 0; (mystack->cur)++; mystack->InnerArr[mystack->cur] = newData; return 1; } int StackIsEmpty(const ArrayStack* mystack) { return mystack->cur == -1; } int StackIsFull(const ArrayStack* mystack) { return mystack->cur == MAX_SIZE-1; } void ClearStack(ArrayStack* mystack) { mystack->cur = -1; } int StackLength(const ArrayStack* mystack) { return mystack->cur+1; }

 

以上是关于利用数组实现栈的主要内容,如果未能解决你的问题,请参考以下文章

利用队列实现栈

python数据结构之栈的实现

数据结构——栈

PHP中使用数组实现堆栈数据结构的代码

包含MIN函数的栈+一个数组实现两个堆栈+两个数组实现MIN栈

数据结构与算法--栈