数据结构--顺序栈

顺序栈基本操作

代码如下:

#include<stdio.h>
#include<malloc.h>
#define STACK_INITSIZE 20
#define STACK_INCREASEMENT 5
#define OK 1
#define ERROR 0
typedef int ElemType;
typedef struct                                                            //定义数据类型
{
  ElemType *elem;
  int top;
  int stacksize;
}Seqstack;
int menu()                                                               //菜单
{
	int i;
	printf("==========顺序栈==========\n");
	printf("=======1.初始化顺序栈=====\n");
	printf("=======2.顺序栈入栈=======\n");
	printf("=======3.顺序栈出栈=======\n");
	printf("=======4.取栈顶元素=======\n");
	printf("=======5.判断栈是否为空===\n");
	printf("=======6.求栈的深度=======\n");
	printf("=======7.清空栈元素=======\n");
	printf("请输入您的选择(1--7):");
	scanf("%d",&i);
	return i;
}
int InitStack(Seqstack *p)                                                //初始化栈
{
  p->elem=(ElemType *)malloc(sizeof(Seqstack)*STACK_INITSIZE);
  p->top=0;
  p->stacksize=STACK_INITSIZE;
  return OK;
}
int push(Seqstack *p,int e)                                                //入栈
{    
	int i;
	if(p->top>p->stacksize)
	p->elem=(ElemType *)malloc(sizeof(ElemType)*STACK_INITSIZE+STACK_INCREASEMENT);
	p->elem[p->top]=e;
	p->top=p->top+1;
	return OK;
}
int pop(Seqstack *p,int *e)                                                  //出栈
{
      *e=p->elem[p->top--];
	  p->top=p->top-1;
	  return OK;
  
}

int GetTop(Seqstack *p,int *e)                                                  //取栈顶元素
{
      *e=p->elem[p->top--];
	  return OK;
  
}
int seqstackempty(Seqstack *p)                                                 //判空操作
{
	if(p->top<=0)
		return OK;
	else
		return ERROR;
}
int Depthstack(Seqstack *p)                                                    //求栈的深度
{
	return p->top;
}
int clearseqstack(Seqstack *p)                                                  //栈的清空
{
   p->top=0;
   return OK;

}
int main()
{
    int n,i,e,*q,b;
	Seqstack *p;
	while(1)
	{
	  i=menu();
	  switch(i)
	  {
		 case 1:system("cls");
			    b=InitStack(&p);
				if(b==1)
				printf("初始化成功\n");
				if(b==0)
				printf("初始化呢失败\n");
			    break;
		 case 2:system("cls");
			    printf("请输入入栈的元素的值\n");
			    scanf("%d",&e);
			    b=push(&p,e);
				if(b==1)
				printf("输入成功\n");
				if(b==0)
				printf("输入失败\n");
			    break;
		 case 3:system("cls");
			    b=pop(&p,&q); 
				if(b==1)
				printf("出栈成功\n");
				if(b==0)
				printf("出栈失败\n");
			    printf("%5d\n",q);
			    break;
		 case 4:system("cls");
			    b=GetTop(&p,&e);
				if(b==1)
				printf("取元素成功\n");
				if(b==0)
				printf("取元素失败\n");
			    printf("%5d\n",e);
			    break;
		 case 5:system("cls");
                b=seqstackempty(&p); 
				if(b==1)
				printf("顺序栈为空栈\n");
				if(b==0)
				printf("顺序栈不为空栈\n");
			    break;
         case 6:system("cls");
			    b=Depthstack(&p);
				printf("栈的深度为%d\n",b);
			    break;
		 case 7:system("cls");
                b=clearseqstack(&p);
				if(b==1)
				printf("顺序栈已经清空\n");
			    break;
	  }
	}
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大菜彩

家人们鼓励鼓励!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值