王道书籍上的代码为伪代码,全部改写为纯C语言,非c++
代码在最后:
//顺序栈的定义
typedef struct{
int data[MAX_Size];
int top;//栈顶指针
}SqStack;
这是c语言的传参方式:void InitStack(SqStack *S)王道书上使用了&来表示传参,实际编译是错的
还有要注意,Pop出栈
要使用 *x接收和输出,用指针操作地址里的内容,不然,退出函数,x的内容会失效
int Pop(SqStack *S,int *x){
if (S->top ==-1)
return false;//站控报错
*x=S->data[S->top--] ;//top--先使用top再--,出战后指针减一
return true;
#include<stdio.h>
#define MAX_Size 50
#define true 1
#define false 0
/*
顺序栈的实现:
*/
//顺序栈的定义
typedef struct{
int data[MAX_Size];
int top;//栈顶指针
}SqStack;
void InitStack(SqStack *S){
S->top=-1;//栈顶指针为-1,站为空
}
int StackEmpty(SqStack *S){
if(S->top==-1)
return true;
else
return false;
}
/*进栈操作*/
int Push(SqStack *S,int x){
if (S->top==MAX_Size-1)
return false;
else {
S->top++;
S->data[S->top]=x;
}
return true;
}
/*出战操作*/
int Pop(SqStack *S,int *x){
if (S->top ==-1)
return false;//站控报错
*x=S->data[S->top--] ;//top--先使用top再--,出战后指针减一
return true;
}
/*读栈元素*/
int GetTop(SqStack *S, int *x) {
if (S->top==-1)
return false;//栈为空
else
*x=S->data[S->top];
return true ;
}
int main (){
//声明一个栈
SqStack S;
InitStack(&S);
//进栈操作
//用一个while循环输入进展,设置一个变量,读数据
int x=1;
printf("请输入数字,999结束!\n");
scanf("%d",&x);
while(1) {
if (x==999) break;
//进栈
if(!Push (&S,x)){
printf("栈满,本次输入失败!");
break;
}
scanf("%d",&x);
//进栈不成功,退出循环
}
int a;
GetTop(&S,&a);
printf("\n当前栈顶为:%d",a);
printf("\n===出栈=====%d",a);
while(Pop(&S,&x)) {
printf("\n");
printf("%d",x) ;
//进栈不成功,退出循环
}
}