堆栈.cpp

来自「实现顺序栈的操作(栈空判断、入栈、出栈、读取栈顶元素)。」· C++ 代码 · 共 121 行

CPP
121
字号
#define STACK_INIT_SIZE 10//定义栈的出使大小
#define STACKINCREMENT 10//定义栈的填补增量

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<conio.h>
typedef  struct
{  int* top;
   int* base;
   int stacksize;
}SqStack;

void print()
{
    
}



int InitStack(SqStack &S)
//构造一个空栈,等待操作,成功返回1,失败退出程序
{  S.base=(int*)malloc(STACK_INIT_SIZE*100*sizeof(int));//在内存分配空间
   if(!S.base)exit(1);//分配内存失败,异常退出
   S.top=S.base;
   S.stacksize=STACK_INIT_SIZE;//定义栈的初始大小为10
   return 1;
}

int Push(SqStack &S,int e)
//实现进栈操作,把e放到S的栈顶
{    int *p1;//该变量为输出做准备
     p1=S.base;
	 if(S.top-S.base>=S.stacksize)
     {S.base=(int*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(int));//当超出了初始大小的时候
     if(!S.base)exit(1);
	 S.top=S.base+S.stacksize;
	 S.stacksize+=STACKINCREMENT;}
	 *S.top++=e;
	 system("cls");//清屏函数
	 print();
     printf("现在栈内的元素顺序为:\n");
     while(p1<S.top)
	 {printf("%-8d",*p1);*++p1;}
	 printf("\n\n\n");
	 return 1;
}    

int Pop(SqStack &S,int &e)
//栈顶元素出栈
{ 
	int *p1;
    p1=S.base;
	if(S.top==S.base)//如果栈顶等于栈底,栈为空
	return 0;
    e=*--S.top;
	 system("cls");
	 print();
     printf("现在栈内的元素顺序为:\n");
     while(p1<S.top)
	 {printf("%-8d",*p1);*++p1;}
	 printf("\n\n\n");
    return 1;
}

int StackEmpty(SqStack S)
{ if(S.base==S.top)
   return 1;
  else 
   return 0;
}



void main()
{
       
	 print();
	 SqStack S;
	 InitStack(S);
	 printf("初始化栈操作已经完成\n");
     int choise=0,e=0,flag;
	 while(choise!=4)
	 {
	  printf("请选择你想进行的操作:\n");
	  printf("1.进栈操作\n2.出栈操作\n3.判断该栈是否为空\n4.退出\n");
	  scanf("%d",&choise);
	  switch(choise)
	  {case 1:
	    printf("请输入要进栈的元素。\n");
		scanf("%d",&e);
		Push(S,e);break;
	  case 2:
		 if(flag=Pop(S,e))
		 {printf("操作成功,出栈元素为%d\n\n\n",e);break;}
         else
		 {   system("cls");
	         print();
             printf("不能出栈,栈为空栈\n");
             printf("\n\n\n");
		     break;
		 }
	   case 3:
		   system("cls");
	         print();
          if(flag=StackEmpty(S))
			  printf("是空栈\n\n\n");
		  else
			  printf("非空栈!\n\n\n");
             break;
	   case 4:
		   printf("多谢使用~SEE YOU!\n");
		   exit(0);
	   default:
		   system("cls");
	         print();
			 printf("输入错误!请重新输入!\n\n\n");
			 choise=0;
	  }
	 }
}

⌨️ 快捷键说明

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