//用顺序表实现堆栈
//包含printf与scanf函数
#include
//包含malloc函数
#include
//v是分配的内存空间的首地址,m是分配的空间的大小(代表了表的总长),n为表的实际长度
//n的初值较为重要。一定要获得栈顶元素的位置
void init_sq_LList(int **v,int m,int n)
{
*v =(int)malloc(sizeof(int)*m) ;
*n = -1;
}
//入栈函数
void push_sq_LList(int *v,int m,int *n){
int d,k;
k=*n+1;
//判断栈的空间是否用完
if(k<m){
printf("请输入一个整数\n");
scanf("%d",&d);
v[k]=d;
*n=k;
}
else printf("栈的空间已满!\n");
}
//出栈函数
void pop_sq_LList(int* v,int m, int* n){
int k=*n;
if(k<0) printf("栈为空!\n");
else{
printf("出栈的元素为:%d\n",v[k]);
*n=k-1;
}
}
//打印函数
void dis_sq_LList(int* v, int n)
{
int i;
if((v!=NULL)&&(n>0))
{
for(i=0;i<=n;i++) printf("%d ",v[i]);
printf("\n");
}
else printf("没有数据!\n");
}
int main()
{
int *v,m,n;
int i=0,j;
printf("输入栈的大小:\n");
scanf("%d",&m);
//创建栈
init_sq_LList(&v,m,&n);//void init_sq_LList(int **v,int m, int *n)
while(i<3){
printf("0——入栈 1——出栈 2——打印 3——退出程序\n");
scanf("%d",&j);
switch(j)
{
case 0:{
push_sq_LList(v,m,&n);//int *v,m,n; void push_sq_LList(int* v,int m, int* n)//
break;
}
case 1:{
pop_sq_LList(v,m,&n);//int *v,m,n; void pop_sq_LList(int* v,int m, int* n)//
break;
}
case 2:{
dis_sq_LList(v,n);//int *v,n; void dis_sq_LList(int* v, int n)//
break;
}
case 3: {
i=4;
break;
}
}
}
free(v);
v=NULL;
return 0;
}
代码如上,想知道在init函数中为什么是使用int **v,而非int *v?