正文

堆栈的基本操作2007-09-08 14:37:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/7zeal/29209.html

分享到:

#define STACK_INIT_SIZE  3#define STACK_INCREAMENT 2#define null 0#include <stdio.h>#include <alloc.h> typedef struct stack{    int *base;    int *top;    int size;//当前已非配的空间,没数据也算  }Sqstack;//用作堆栈的指针de 类型  void Initstack(Sqstack &s)//建立堆栈{  s.base=(int*)malloc(STACK_INIT_SIZE*sizeof(int));  if(s.base==null)  {    printf("overflow");  }  s.top=s.base;  s.size=STACK_INIT_SIZE;} void Gettop(Sqstack &s,int &e){    if(s.top==s.base){printf("stack is empty");}    e=*(s.top-1);//注意哦,有一个元素时top指向第二隔了,没改变TOP的指向} void Push(Sqstack &s,int e){    if((s.top-s.base)+1==s.size)//堆栈满了    {        s.base=(int*)realloc(s.base,(s.size+STACK_INCREAMENT)*sizeof(int));        //仍然以源地址为基地址,从。size后续补充increase        if(s.base==null)          {            printf("overflow");          }        s.top=s.base+s.size-1;        s.size+=STACK_INCREAMENT;printf("我加了\n");            }        *(s.top++)=e;} void Pop(Sqstack &s,int &e){    if(s.top==s.base){printf("stack is empty");}    e=*(--s.top);} void Show(Sqstack &s){    int i=0;    for(i=0;i<(s.top-s.base);i++)    printf("%d ",*(s.base+i));} int main(){   Sqstack s;  Initstack(s);  int a,e;   while(a!=0)  {    printf("选择操作1:Gettop 2:Push 3:Pop 4:Show\n");    scanf("%d",&a);   switch(a)     {     case 1:Gettop(s,e);printf("栈顶元素是%d\n",e);break;    case 2:printf("输入进站元素\n");scanf("%d",&e);Push(s,e);break;    case 3:Pop(s,e);printf("出栈元素是%d\n",e);break;    case 4:Show(s);printf("\n");break;      }     }     return 0;}

阅读(3555) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册