顺序栈的子系统

#include <stdio.h>
#include<malloc.h>
#define MAXLEN 10
typedef int datatype;
typedef struct
{ datatype data[MAXLEN];
  int top;
}SeqStack;
SeqStack *Snull();
int Push(SeqStack *s,datatype x);
int Pop(SeqStack *s,datatype *x);
datatype ReadTop(SeqStack *s);
int Sempty(SeqStack *s);
int sfull(SeqStack *s);
void ShowStack(SeqStack *s);
void Conversion(int m,int n);
 
void main()
{
    SeqStack *s;
    int i=1,j,chioce,val,n,m,flag;
 char a;
 s=Snull();
 while(i)
 {
  printf("/n");                
  printf("/n/t/t               顺序栈操作应用演示                   ");
  printf("/n/t/t****************************************************");
  printf("/n/t/t|             1--------------进栈                  |");
  printf("/n/t/t|             2--------------出栈                  |");
  printf("/n/t/t|             3--------------显示                  |");
  printf("/n/t/t|             4--------------读取栈顶元素          |");
  printf("/n/t/t|             5--------------判栈满                |");
  printf("/n/t/t|             6--------------判栈空                |");
  printf("/n/t/t|             7--------------数制转换              |");
  printf("/n/t/t|             8--------------置空栈                |");
  printf("/n/t/t|             0--------------返回                  |");
  printf("/n/t/t****************************************************");
  printf("/n/t/t  请选择序号  (0--8): ");
  chioce=getchar();
  getchar();
  switch(chioce)
  {
   case '1':
   j=1;
         while(j)
   {
    printf("/n/t/t输入整数('0'结束)按回车 :");
    scanf("%d",&val);getchar();
    if(val!=0)
    {
     flag=Push(s,val);
     if(flag==0) 
     {
      j=0;
      printf("栈满");
     }
    }
    else
     j=0;
      };break;
   case '2':
    if(s->top!=-1)
    {
     Pop(s,&val);
        printf("/n/t/t出栈元素为 :%6d/n",val);
    }
    else
     if(s->top==-1)
      printf("                                   栈已为空!");
    break;
   case '3':
    ShowStack(s);break;
   case '4':
    ReadTop(s);break;
   case '5':
    sfull(s);break;
   case '6':
    Sempty(s);break;
   case '7':
    printf("/n/t/t输入十进制数'n'转换的进制为'm'(n,m):");
       scanf("%d,%d",&n,&m);
    Conversion(n,m);break;
   case '8':
    s=Snull();break;
   case '0':i=0;
  }
  if(chioce=='1'||chioce=='2'||chioce=='3'||chioce=='4'||chioce=='5'||chioce=='6'||chioce=='7')
  {
   printf("/n/t/t双击回车返回主菜单,输入0按回车退出程序./n");
       a=getchar();
    if(a!='/xA')
     i=0;
  }
 }
}
 
 
SeqStack *Snull()
{  SeqStack *s;
   s=(SeqStack *)malloc(sizeof(SeqStack));
   s->top=-1;
   return s;
}
 
int Push(SeqStack *s,datatype x)
{  if(s->top==MAXLEN-1)
     return 0;
 else
 { s->top++;
   s->data[s->top]=x;
   return 1;
 }
}
 
int Pop(SeqStack *s,datatype *x)
{  if (Sempty(s))
   return 0;
   else
 {  *x=s->data[s->top];
       s->top--;
  return 1;
    }
}
 
datatype ReadTop(SeqStack *s)
{  if(s->top==-1)
     return 0;
  else
  printf("                           栈顶元素为:%3d ",s->data[s->top]);
   return 1;
}
 
int Sempty(SeqStack *s)
{  if(s->top==-1)
 {
 printf("                                  栈已空!");
 return 1;
 }
   else
   {
 printf("                                  非空!");
 return 0;
   }
}
int sfull(SeqStack *s)
{  if (s->top==MAXLEN-1)
 {
 printf("                                  栈已满!");
    return 1;
 }
 else
 {
 printf("                              栈未满!");
 return 0;
 }
}
 
void ShowStack(SeqStack *s)
{
 int i;
 if(s->top==-1)
  printf("                      栈已为空!");
 else
  printf("               栈元素:");
 for(i=s->top;i>=0;i--)
  printf("%3d ",s->data[i]);
 
}

void Conversion(int n,int m)
{
    SeqStack*s=Snull();
    int x;
    while(n)
    {
       x=n%m;
       n=n/m;
       s->top++;
       s->data[s->top]=x;
     }
    while(s->top>-1)
    {
       printf("/t%d",s->data[s->top]);
       s->top--;
     }
    getchar();
    printf("/n");
}
 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值