⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stack.cpp

📁 stack的辕马,写了其中的主要操作.有兴趣的朋友就下哈 .
💻 CPP
字号:
#define OK 1
#define TRUE 1
#define ERROR  0
#define FALSE  0
#define OVERFLOW  -2
#define STACK_INIT_SIZE 100
#define STACKINCREMENT  10
#define Status  int
#define SElemType  int


#include "stdio.h"
#include "malloc.h"


/*   栈的操作
   SElemType  栈的数据类型
   Status InitStatck(SqStack &s)   初始化栈
   Status DestoryStatck(SqStack &s)  销毁栈
   Status ClearStack(SqStack &s)    清除栈
   bool StackEmpty(SqStack s)         栈是否为空
   int StackLength(SqStack s)        栈的长度
   Status GetTop(SqStack s,SElemType &e)  得到栈顶
   Status Push(SqStack &s,SElemType e)   压栈
   Status Pop(SqStack &s,SElemType &e)   出栈*/


typedef struct{
	SElemType *base;
	SElemType *top;
	int stacksize;
}SqStack;

/*==================================
  功能: 初始化栈
  参数: SqStack
  返回:OVERFLOW or TRUE;
//=================================*/

Status InitStatck(SqStack &s){
  s.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));
  if(!s.base)
  {
	  return OVERFLOW;
  }
  s.top=s.base;
  s.stacksize=STACK_INIT_SIZE;
  return OK;
}

/*==================================
  功能: 销毁栈
  参数: SqStack
  返回: OK;
//=================================*/
Status DestoryStatck(SqStack &s){
	s.top=s.top;
	s.stacksize=0;
	
	free(s.top);
	free(s.base);
	
	return OK;
}
/*==================================
  功能: 清除栈
  参数: SqStack
  返回: OK;
//=================================*/
Status ClearStack(SqStack &s){
	s.top=s.base;
	s.stacksize=STACK_INIT_SIZE;

	return OK;
}

/*==================================
  功能: 判断栈是否为空
  参数: SqStack
  返回: TRUE  or FALSE
//=================================*/
bool StackEmpty(SqStack s){
	if(s.base==s.top)
	{
		return TRUE;
	}
	else
	{
		return FALSE;
	}
}

/*==================================
  功能: 得到栈的长度
  参数: SqStack
  返回:  int 栈的长度
//=================================*/
int StackLength(SqStack s){
	if(s.base=s.top)
	{
		return ERROR;
	}
	else
	{
		return (s.top-s.base);
	}
}

/*==================================
  功能: 得到栈的TOP
  参数: SqStack ,SElemType
  备注: 仅仅得到数据,不出栈;
  返回:  SElemType类型的数据
//=================================*/
Status GetTop(SqStack s,SElemType &e){
  if(StackEmpty(s))
  {
	  printf("this statck is empty !\n");
	  return ERROR;
  }
  else
  {
	  e=*(--s.top);
	  return OK;
  }
}

/*==================================
  功能: 压栈
  参数: SqStack ,SElemType
  返回:  ERROR  OR  OK
//=================================*/
Status Push(SqStack &s,SElemType e){
  if(StackLength(s)==STACK_INIT_SIZE)
  {  
	  SElemType  *tem;
      tem=(SElemType*)realloc(s.base,
		 (STACK_INIT_SIZE + STACKINCREMENT) * sizeof(SElemType));
	  if(!tem)  
	  {
		  return ERROR;
	  }

      s.base=tem;
	  s.top=s.base+STACK_INIT_SIZE;
	  s.stacksize+=STACKINCREMENT;

      *(s.top++)=e;
	  return OK;

  }
  else
  {
	  *(s.top++)=e;
	  return OK;
  }

}

/*==================================
  功能: 出栈
  参数: SqStack ,SElemType
  返回:  ERROR  OR  OK
//=================================*/
Status Pop(SqStack &s,SElemType &e){
	if(StackEmpty(s))
	{
		printf("this statck is empty !\n");
		return ERROR;
	}
	else
	{
		e=*(--s.top);
		return OK;
	}
}
//void StackTraverse(SqStack,void (*Fun)()){

void main(){
	SqStack statck;
	InitStatck(statck);

    for(int i=0;i<5;i++)
	{
		if(Push(statck,i))
		{
			printf("%d is push in this statck success!\n",i);
		}
		else
		{
			printf("\n\thappen a error\n\t");
		}
	}


	int tem;
   	printf("now  i will print this top of statck !\n");
    GetTop(statck,tem);
    printf("%d is top of this statck\n",tem);
 
     
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -