数据结构4:栈的表示和实现
来源:互联网 发布:ubuntu建立软链接 编辑:程序博客网 时间:2024/05/30 05:42
栈是比较重要的数据结构(书上是这么说的,我还没看到后面去!),和队列一样,也是属于线性表的一种特例,存储方面也是存在顺序存储和链式存储,链式存储比较简单吧,实现起来应该不复杂,和单链表差不多,而且使用的栈一般都是顺序结构的!
其实,我认为既然是数组,那么在声明数据结构的时候,就应该有data[MAXSIZE]等,但是后来我发现,这样无法实现动态分配空间,所以使用了这种形式的声明
#include<stdio.h>#include <stdlib.h>#define MAXSIZE 100#define ERROR 0#define OK 1#define INCREASEMENT 10//typedef后面木有分号,好伐?typedef int ElemType;typedef int Status;typedef struct {ElemType *base;ElemType *top;int StackLength;}SqStack;Status InitStack(SqStack *S){S->base = (ElemType *)malloc(MAXSIZE*(sizeof(ElemType)));if (!S->base){printf("No enough space");exit(1);}S->top = S->base;S->StackLength = MAXSIZE;return OK;}Status Push(SqStack *S,ElemType e){if (S->top - S->base >= S->StackLength){S->base = (ElemType *)realloc(S->base,(MAXSIZE+INCREASEMENT)*sizeof(ElemType));if (!S->base){printf("No more space");exit(1);}S->top = S->base+MAXSIZE;S->StackLength += INCREASEMENT;}*(S->top) = e;S->top++;return OK;}//删除某个元素玩玩,LIFO!Status Pop(SqStack *S,ElemType *e){if (S->top == S->base){printf("there is no element in the stack");exit(1);}*e = *(--S->top);return OK;}//删除整个栈Status DestroyStack(SqStack S){while (S.top != S.base){free(--S.top);}return OK;}int main(){int i,j; SqStack S;ElemType e;InitStack(&S);for (i = 0;i<10;i++){Push(&S,i);}for(j = 0;j <10;j++){Pop(&S,&e);printf("%d\n",e);}while(1);}
其实对栈的销毁还是不太懂!对于分配了的空间,只需要释放指向数组的指针就可以了吗?Status DestoryStack(SqStack &S) { free(S.base); S.base = NULL; S.top = NULL; S.stacksize = 0; return OK; }
上面的实现,我觉得不妥,应该是从申请的空间中,逐次释放才可以!
Status DestroyStack(SqStack S){int i,len;len = S.StackLength;for (i = 0;i<len;i++){free(--S.top);}S.top =S.base = NULL;S.StackLength = 0;return OK;}
0 0
- 数据结构4:栈的表示和实现
- 栈的顺序表示和实现(数据结构)
- 数据结构(4):链栈的表示和实现
- 重温数据结构:栈的顺序表示和实现与栈的链式表示和实现
- 数据结构(3):顺序栈的表示和实现
- 单链表的表示和实现 - 数据结构
- 数据结构学习 串的表示和实现
- 数据结构 - 串的存储表示和实现
- 队列的链式表示和实现(数据结构)
- 循环队列的表示和实现(数据结构)
- 数据结构(16)顺序栈的表示和算法表示
- 栈的表示和实现
- 栈的表示和实现
- 栈的表示和实现
- 数据结构之:线性表的顺序表示和实现
- 数据结构—线性表的链式表示和实现
- 数组的顺序存储表示和实现-数据结构
- 线性表的顺序表示和实现 - 数据结构
- Java集合类详解
- 第一部分:Launcher APP 组成分析(一)
- hdu2955(01背包)
- 用栈实现十进制到任意进制的转换
- 网络小组学习计划
- 数据结构4:栈的表示和实现
- SendMessage和PostMessage发送消息(不同进程传递字符串)
- 如何使用DXUT框架
- *快速排序,递归实现,短小精干版:*/
- Cocoa 框架 For iOS(一) 框架的介绍,Objectivie-C运行时能力的解析等
- Vijos P1028 魔族密码(动态规划YY思维)
- 小程序
- Android 读取<meta-data>元素的数据
- NYOJ 860 又见01背包