数据结构学习---堆栈的动态数组实现及链表实现
来源:互联网 发布:软件测试方法分类 编辑:程序博客网 时间:2024/06/11 06:31
堆栈
【链表实现堆栈】
优点:可以无限增添元素,只要内存足够,
缺点:内存中存储位置不连续
typedef int ElementType;//只能向头部插入元素,因为如果在尾部插入,删除时,找不到上一个节点///因为链表是单向的//所以 push pop 操作在头结点进行class Stack{public:Stack(){S=(Stack*)malloc(sizeof(Stack)); //建立一个不存数据的头结点,方便增删节点S->Next=NULL;sz=0;}bool empty(){return (S->Next==NULL);}int size(){return sz;}void push(ElementType X){Stack* TmpCell=(Stack*)malloc(sizeof(Stack));TmpCell->Date=X;TmpCell->Next=S->Next; //在头部增添节点S->Next=TmpCell;sz++;}ElementType pop(){Stack* FirstCell; //因为只是用了指向头结点,所以并不需要分配空间ElementType TopElem;if(empty()){cout<<"堆栈空"<<endl; return -1;}else{sz--;FirstCell=S->Next;TopElem=FirstCell->Date;S->Next=FirstCell->Next;free(FirstCell); //释放内存return TopElem;}}private:int Date;Stack* Next;Stack* S;int sz;//记录栈中元素个数}stack;
【动态数组实现堆栈】
好处:申请了连续的内存空间,而且可以无限增添元素(内存足够)
初始化用malloc函数为动态数组分配maxn个空间,
s=(ElementType*)malloc(maxn*sizeof(ElementType));
如果数组满了,用realloc函数,重新分配空间,多分配一个maxn;
if(Top+1>=maxn*N){ //如果当前栈中元素总量已满, 则重新申请空间,增加maxn个空间 N++; s=(ElementType*)realloc(s,N*maxn*sizeof(ElementType)); }
整体代码
const int maxn = 10;typedef int ElementType;class Stack{ public: Stack(){ s=(ElementType*)malloc(maxn*sizeof(ElementType)); Top=-1; //因为希望元素从下标0开始储存,将Top置为-1 N=1; } bool empty(){ return (Top==-1); } int size(){ return Top+1; } void push(ElementType X){ if(Top+1>=maxn*N){ //如果当前栈中元素总量已满, 则重新申请空间,增加maxn个空间 N++; s=(ElementType*)realloc(s,N*maxn*sizeof(ElementType)); } s[++Top]=X; } ElementType pop(){ if(empty()){ cout<<"堆栈空"<<endl; return -1; } else { return s[Top--]; } } private: int Top; //记录栈顶位置 int Date; int N; //记录申请了几倍的maxn ElementType* s;}stack;
1 0
- 数据结构学习---堆栈的动态数组实现及链表实现
- 用动态数组实现堆栈数据结构
- 动态数组实现的堆栈
- 数据结构-堆栈-数组实现
- 动态数组实现堆栈
- 数据结构与算法之动态数组实现堆栈
- 数据结构-堆栈-链表实现
- 数据结构学习笔录--堆栈的实现
- 堆栈数据结构的实现~
- 数据结构--堆栈的实现
- 堆栈的数组实现
- 堆栈的数组实现
- 使用JavaScript的数组实现数据结构中的队列与堆栈
- 使用JavaScript的数组实现数据结构中的队列与堆栈
- 使用JavaScript的数组实现数据结构中的队列与堆栈
- 使用JavaScript的数组实现数据结构中的队列与堆栈
- PHP中使用数组实现堆栈数据结构的代码
- 数据结构再学习--数组实现链表
- hdu 1253 胜利大逃亡
- Socket理解
- UVA 1423Guess 【拓扑排序】
- 线程池 c 实现
- Screen Property - 2
- 数据结构学习---堆栈的动态数组实现及链表实现
- dojo enhancedgrid问题:比如说5行数据只能显示4行,10行数据显示7行
- Android ANR产生原因和解决办法
- OC学习笔记之description
- android中的任务栈和启动模式的总结
- leetcode 100 —— Same Tree
- OC循环渐进:代理设计模式
- Service的两种调用方法
- TCP、UDP、Socket