栈的顺序存储的代码实现

来源:互联网 发布:mac怎么关闭桌面 编辑:程序博客网 时间:2024/04/28 05:00
#include<stdio.h>#include<stdlib.h>#define STACK_INIT_SIZE 100//存储空间初始分配量#define STACKINCREMENT 10//存储空间分配增量#define SElemType inttypedef struct{SElemType *base;//栈底SElemType *top;//栈顶指针int stacksize;//当前已分配的存储空间,以元素为单位;}SqStack;void InitStack(SqStack &s)//构建一个空栈s{s.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));if(!s.base){printf("构建空栈时失败");exit(-1);}s.top=s.base;s.stacksize=STACK_INIT_SIZE;}void DestoryStack(SqStack &s)//销毁栈s {free(s.base);}void ClearStack(SqStack &s)//把s置为空栈 {s.top=s.base;}int StackLength(SqStack s)//栈中元素个数{return s.top-s.base;}bool StackEmpty(SqStack s)//判断一个栈是否为空{if(s.top==s.base)return true;elsereturn false;}void GetTop(SqStack s,SElemType &e)//用e返回栈顶元素{if(StackEmpty(s)){printf("栈空");exit (-1);}e=*(s.top-1);}void Push(SqStack &s,SElemType e)//插入新元素e{if(s.top-s.base>=s.stacksize)//栈满则追加存储空间{s.base=(SElemType*)realloc(s.base,(s.stacksize+STACKINCREMENT)*sizeof(SElemType));if(!s.base){printf("栈满时重新分配空间失败");exit(-1);}s.top=s.base+s.stacksize;s.stacksize+=STACKINCREMENT;}*s.top=e;s.top++;}void Pop(SqStack &s,SElemType &e)//删除栈顶元素并用e返回其值{if(StackEmpty(s)){printf("栈空\n");exit (-1);}e=*(s.top-1);s.top--;}void Visit(SqStack s)//从栈底到栈顶遍历{if(StackEmpty(s)){printf("栈空");exit(-1); }SElemType *p=s.base;while(p!=s.top){printf("%d ",*p);p++;}printf("\n");}
int main(){int e;SqStack s;InitStack(s);Push(s,1);Push(s,2);Push(s,3);Visit(s);GetTop(s,e);printf("%d\n",e);Pop(s,e);Pop(s,e);printf("%d\n",e);ClearStack(s);Visit(s);DestoryStack(s);}

 
原创粉丝点击