码迷,mamicode.com
首页 > 编程语言 > 详细

c语言数据结构之栈的基本操作

时间:2015-04-05 11:50:40      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:

栈是限定仅在表尾进行插入或者删除操作的线性表。各位也可以到360云盘中下载完整程序,运行环境为vc++6.0 

http://yunpan.cn/cVKkv9fmsp4wB  访问密码 b737

1 typedef struct
2 {
3     SelemType *base;
4     SelemType *top;
5     int        stacksize;
6 }SqStack;

现在来介绍下栈的操作实现。

/********************************************************************
函数名称:  InitStack
函数作用:  构造一个空栈
输入参数:  s
输出参数:  无
返回值:    FALSE or TRUE
********************************************************************/
Status InitStack(SqStack &s)
{
   s.base=(SelemType *)malloc(STACK_INIT_SIZE*sizeof(SelemType));  //申请空间
   if(!s.base) return FALSE;    //如果申请不成功,返回FALSE
   s.top=s.base;                //申请成功,令栈顶指针等于栈尾指针
   s.stacksize=STACK_INIT_SIZE; //stacksize表示申请分配的空间大小
   return TRUE;
}
/********************************************************************
函数名称:  Push
函数作用:  将元素e入栈 
输入参数:  栈s,元素e
输出参数:  无
返回值:    FALSE or TRUE
时间复杂度:O(1)
********************************************************************/
Status Push(SqStack &s,SelemType e)
{
   if((s.top-s.base)>=s.stacksize)
   {
     s.base=(SelemType *)realloc(s.base,(s.stacksize+STACKINCREMENT)*sizeof(SelemType));
     if(!s.base) return FALSE; 
     s.top=s.base+s.stacksize;
     s.stacksize+=STACKINCREMENT;
   }
   *s.top++=e;
   return TRUE;
}
/********************************************************************
函数名称:  StackBrower
函数作用:  遍历
输入参数:  栈s
输出参数:  无
返回值:    FALSE or TRUE
时间复杂度:O(n)
********************************************************************/
Status StackBrower(SqStack s)
{
    if(!s.base) 
    {
        cout<<"不存在栈s"<<endl;
        return FALSE;
    }
    if(s.top==s.base) 
    {
        cout<<"s为空栈"<<endl;
        return FALSE;
    }
    while(!(s.top==s.base))
    {
       cout<<*(--s.top)<<"  ";
    }
    cout<<endl;
    return TRUE;
}
/********************************************************************
函数名称:  DestroyStack
函数作用:  销毁空栈
输入参数:  栈s
输出参数:  无
返回值:    FALSE or TRUE
时间复杂度:O(1)
********************************************************************/
Status DestroyStack(SqStack &s)
{
   free(s.base);          //只需要释放base指针 
   s.base=NULL;
   return TRUE;
}   
/********************************************************************
函数名称:  ClearStack
函数作用:  销毁空栈
输入参数:  栈s
输出参数:  无
返回值:    FALSE or TRUE
时间复杂度:O(1)
********************************************************************/
Status ClearStack(SqStack &s)
{
    if(s.top==s.base) return TRUE;
    s.top=s.base;
    return TRUE; 
}  
/********************************************************************
函数名称:  StackEmpty
函数作用:  判断是否为空栈
输入参数:  栈s
输出参数:  无
返回值:    0非空栈 or 1空栈
时间复杂度:O(1)
********************************************************************/
Status StackEmpty(SqStack &s)
{
   return(s.base==s.top);
}
/********************************************************************
函数名称:  StackLength
函数作用:  获取当前储存数据的长度
输入参数:  栈s
输出参数:  无
返回值:    栈长
时间复杂度:O(1)
********************************************************************/
int    StackLength(SqStack s)
{
 return (s.top-s.base);
}

Status GetTop(SqStack s,SelemType &e)
{
  e=*(s.top-1);
  return TRUE;
}

接下来就是main函数测试代码

#include"StackLib.h"

void main()
{
  int e[20];
  int i=0;
  int a;
  for(i=0;i<20;i++) e[i]=i;
  SqStack s;
  InitStack(s);           //构造一个空栈
  for(i=0;i<20;i++) 
  {
      Push(s,e[i]);       //数据入栈
  }

  StackBrower(s);         //遍历堆栈
  cout<<"当前储存数据:"<<StackLength(s)<<""<<endl;

  GetTop(s,a);            //获得栈顶元素,并打印
  cout<<a<<endl;
  
  ClearStack(s);          //清空栈
  StackBrower(s);         //遍历栈
  cout<<"1为空栈,0非空:"<<StackEmpty(s)<<endl;  //判断栈是否为空

  DestroyStack(s);        //销毁堆栈
  StackBrower(s);         //
}

 

c语言数据结构之栈的基本操作

标签:

原文地址:http://www.cnblogs.com/SimonHaykin/p/4393833.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!