静态栈(数组的方式存储),相关操作

本文详细介绍了如何将王道书籍中的伪代码转换为C语言实现顺序栈,包括栈的定义、初始化、入栈、出栈操作,以及注意事项如正确使用指针。
摘要由CSDN通过智能技术生成

王道书籍上的代码为伪代码,全部改写为纯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) ;
		//进栈不成功,退出循环
	}
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值