首先注意两个小问题:
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");
}