码迷,mamicode.com
首页 > 编程语言 > 详细

利用数组实现栈

时间:2016-03-26 14:04:08      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:

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

内部数组可以存储在内存的栈中(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; }

 

利用数组实现栈

标签:

原文地址:http://www.cnblogs.com/lulipro/p/5322751.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!