栈的顺序存储

 #define Stack_Init_Size 100
#define StackIncreament 10
#include<stdio.h>
#include<malloc.h>
typedef struct{
 int *top;
 int *base;
 int stacksize;
}SqStack;//定义栈


void Push(SqStack &s, int e)
{
 if(s.top -s.base >=s.stacksize) {//本满,追加存储空间
  s.base=(int *)realloc(s.base,
        (s.stacksize+StackIncreament)*sizeof(int));
  if(!s.base) printf("error/n");
  s.top=s.base+s.stacksize;
  s.stacksize+=StackIncreament;
 }
 *s.top++=e;
}//向栈顶插入元素e


void InitStack(SqStack &s)
{
 s.base=(int *)malloc(Stack_Init_Size*sizeof(int)); //栈底地址
 if(!s.base) printf("error/n");
 s.top=s.base;
 s.stacksize =Stack_Init_Size;//构造空栈
 printf("输入6个栈元素:");
 for(int i=0;i<6;i++)
 {
  int a;
  scanf("%d",&a);
  Push(s,a);//向栈中插元素
 }
}//初始化栈

int StackEmpty(SqStack s)
{
 if(s.top ==s.base ) return 1;
 else return 0;
}//判断栈是否为空

 

void Pop(SqStack &s, int &e)
{
 if(s.top ==s.base ) printf("error2/n");
 e=*--s.top ;
}//删除栈顶元素

void Print(SqStack s)
{
 while(!StackEmpty(s))
 {
  int e;
  Pop(s,e);
  printf("%d ",e);
 }
}//输出栈元素

void GetTop(SqStack s,int &e)
{
 if(s.base ==s.top ) printf("error3/n");
 e=*(s.top -1);
}//取栈顶元素

int StackLength(SqStack s)
{
 return (s.top-s.base);
}

 

main()
{
 int a;//存储栈顶元素
 int b;//存储栈的长度
    SqStack s;
    InitStack(s);
    Print( s);
    GetTop(s,a);
    b=StackLength(s);
 printf("所取栈顶元素:%d/b",a);
 printf("栈的长度:%d",b);
 return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值