正文

堆栈的基本操作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;
}

阅读(3483) | 评论(0)


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

评论

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