数据结构--共享栈

该博客介绍了一个使用C语言编写的共享栈实现,包括初始化、入栈、出栈和求栈深度等功能。用户可以选择栈的位置进行操作,并通过菜单交互进行各项功能的选择。代码中定义了共享栈的数据结构,并提供了相应的操作函数。
摘要由CSDN通过智能技术生成

共享栈

代码:

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define M 20
#define OK 1
#define ERROR 0
typedef int ElemType;
typedef struct                                                            //定义数据类型
{
  ElemType *elem;
  int top1,top2;
}sharedstack;
int menu()                                                               //菜单
{
	int i;
	printf("==========共享栈==========\n");
	printf("=======1.初始化共享栈=====\n");
	printf("=======2.共享栈入栈=======\n");
	printf("=======3.共享栈出栈=======\n");
	printf("=======4.求栈深度=========\n");
	printf("=======5.清空栈元素=======\n");
	printf("请输入您的选择(1--5):");
	scanf("%d",&i);
	return i;	
}
int initshared(sharedstack *S)                                          //初始化共享栈
{
   S->top1=-1;
   S->top2=M;
   return OK;
}
int push(sharedstack *S,int e,int i)                                   //元素进栈
{
  if(S->top1+1==S->top2)
  return ERROR;
  switch(i)
  {
    case 1:S->top1++;
	       S->elem[S->top1]=e;
		   break;
	case 2:S->top2--;
	       S->elem[S->top2]=e;
		   break;
	default:
	       return ERROR;
  }
  return OK;
}
int pop(sharedstack *S,int *e,int i)                                   //元素出栈
{
  switch(i)
  { 
    case 1:
    {
    if(S->top1==-1)
	return ERROR;
	*e=S->elem[S->top1];
    S->top1=S->top1--;
	break;
	}
	case 2:
	{
      if(S->top2==M)
       return ERROR;
	   *e=S->elem[S->top2];
       S->top2=S->top2++;
     	break;
	}
		default:
	       return ERROR;
  }
}
int stackdepth(sharedstack *S,int i)                                      //求共享栈的深度
{
  switch(i)
  {
     case 1:system("cls");
	       return S->top1+1;
		   break;
	 case 2:system("cls");
	       return M-S->top2;
	 default:
	       return ERROR;
		  
  }
}
int main()
{
   sharedstack *S;
   int b,a,i,*e;
   while(1)
   {
      a=menu();
      switch(a)
	  {
	     case 1:system("cls");
		        b=initshared(&S);  
				if(b==1)
				printf("初始化成功\n");
				else 
				printf("初始化未成功\n");
		        break;
		 case 2:system("cls");
		        printf("请输入元素的值为和选择的号位栈为:");
				scanf("%d %d",&e,&i);
		 		b=push(&S,e,i);
				if(b==1)
				printf("输入成功\n");
				else 
				printf("输入未成功\n");
		        break;
		 case 3:system("cls");
		        b=pop(&S,&e,i);
				printf("请选择输出的号位栈为:");
				scanf("%d",&i); 
				if(b==1)
				printf("输出成功\n");
				else 
				printf("输出未成功\n");
				printf("输出元素的值为:%d",e);
		        break;
		 case 4:system("cls");
		        b=stackdepth(&S,i); 
				printf("您选择的%d号位栈的深度为%d\n",i,b);
		        break;
	  }
   }
   return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

大菜彩

家人们鼓励鼓励!

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

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

打赏作者

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

抵扣说明:

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

余额充值