文档详情

栈的创建及其基本操作.doc

发布:2017-12-22约1.57千字共3页下载文档
文本预览下载声明
#includestdio.h #includemalloc.h #includestdlib.h #define MAX_SIZE 100 #define SIZE 10 #define OK 1 #define ERROR 0 #define OVERFLOW 0 typedef struct { int *base; int *top; int stacksize; }Sqstack; int InitStack(Sqstack s) { s.base=(int*)malloc(MAX_SIZE*sizeof(int)); if(!s.base) exit(OVERFLOW); s.top=s.base; s.stacksize=MAX_SIZE; return OK; } int DestoryStack(Sqstack s) { free(s.base); /*如果采用链表,因为每个节点是单独new出来的,那自然需要每个节点都进行释放 如果是采用数组,因为空间是统一new的,自然就只需要free一次了*/ // free(s.top); return OK; } int ClearStack(Sqstack s) { s.top=s.base; return OK; } int StackEmpty(Sqstack s) { if(s.top!=s.base) return false; else return true; } int StackLength(Sqstack s) { int length=0; if(s.top==s.base) return 0; // length=s.top-s.base;//亦可以 for(int *i=s.base;i!=s.top;i++) ++length; return length; } int GetTop(Sqstack s,int e) { if(s.top==s.base) return ERROR; e=*(s.top-1); return e; } int Push(Sqstack s,int e) { if(s.top-s.base = MAX_SIZE) { s.base=(int*)realloc(s.base,(s.stacksize+SIZE)*sizeof(int)); if(!s.base) exit(OVERFLOW); s.top=s.base+s.stacksize;//s.base可能换了个地址 s.stacksize+=SIZE; } *s.top++=e; return OK; } int Pop(Sqstack s,int e) { if(s.top==s.base) return ERROR; e=*(--s.top); return e; } int main() { Sqstack s; int e=0; InitStack(s); Push(s,1); Push(s,2); //ClearStack(s); for(int *i=s.base;i!=s.top;i++) printf(%d\n,*i); printf(%d\n,StackLength(s)); Pop(s,e); for(int *j=s.base;j!=s.top;j++) printf(%d\n,*j); printf(%d\n,e); DestoryStack(s); return 0; }
显示全部
相似文档