栈的基本运算及注意

首先注意两个小问题:

1. void initStack(sqStack *&s)和clearStack(sqStack *&s)这两个函数必须用sqStack *&s其它都可以不用,总之函数内要改s的值的时候要用(用sqStack *s就错了),而内只是用到*s,s->时可以不用(用sqStack *&s也不会错)。


2.同理对于,ElemType &e和ElemType e也一样,要传回参数时必须用ElemType &e,而传入参数时用ElemType e。

总之,&表示的是引用,有&符号,就表示函数内的变量和主函数的变量是同一个,函数内改变它的值,主函数相应的变量也就跟着改变了;没有&符号,就表示函数内的变量是主函数的变量的一个副本,在函数内改变其值,是不会改变主函数中变量的值的


typedef struct
{
ElemType data[MaxSize];//栈内元素存储
int top;//top为栈顶指针,标识位置


}SqStack;

//建立栈
void InitStack(SqStack *&s)//要给S分配内存,改变其内容
{
s=(SqStack*)malloc(sizeof(SqStack));//初始化时要分配内存,这里用的是SqStack的内存大小,已经包括了Maxsize
s->top=-1;
}


//求栈的长度
void StackLength(SqStack *s)
{
int k;
k=s->top+1;
printf("%d",k);
}




//进栈
void Push(SqStack *s,ElemType e)
{
if(s->top==MaxSize-1)//注意栈底位置为0.所以栈顶为Maxsize-1
printf("full");
else
{
s->top++;
s->data[s->top]=e;
printf("success");
}
}
 //出栈
void Pop(SqStack *s,Elemtype &e)
{
if(s->top==-1)
printf("empty");
else 
{
e=s->data[s->top];
s->top--;
printf("出栈元素为%d\n",e);
}
}
//取出栈顶元素
void GetTop(SqStack 8s,ElemType &e)
{
if(s->top==-1)
printf("empty");
else
{
e=s->data[s->top];
printf("取出栈顶元素为%d\n",e);
}
}
//打印出栈中元素
void PrintStack(SqStack *s)
{
int i;
for(i=s->top;i>=0;i--)
printf("%d",s->data[i]);
printf("\n");
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值