顺序栈的初始化,入栈,出栈,求栈长度,遍历操作(C语言)

#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
int i, n, e, j, x, num;
//顺序栈
#define MAXSIZE 100
typedef struct {
	int* top;//栈顶指针
	int* base;//栈底指针
	int stacksize;//栈可用的最大容量
}SqStack;
//1.顺序栈的初始化
int InitSqStack_S(SqStack& S) {
	S.base = (int*)malloc(sizeof(int) * MAXSIZE);
	if (!S.base) exit(OVERFLOW);//存储分配失败
	S.top = S.base;//栈顶指针等于栈底指针,表示空栈
	S.stacksize = MAXSIZE;
	return OK;
}
//2.顺序栈的入栈
int SqStackPush_S(SqStack &S, int e) {//将元素e压入栈
	if (S.top - S.base == S.stacksize) {//栈满
		return ERROR;
	}
	scanf("%d", &e);
	*S.top = e;//S.top是指针,存放的是地址。*S.top 解码了,就是存放的就是具体的数据
	S.top++;//让栈顶往上移一位
	return OK;
}
//3.顺序栈的出栈(判断栈空不空,如果不空,则删除栈顶元素,并用e返回其值)
int SqStackPop_S(SqStack& S,int &e) {
	if (S.top == S.base) { 
		return ERROR; 
	}//栈为空
	--S.top;
	e = *S.top;
	return e;
}

//4.求栈的长度
int SqStackLength_S(SqStack& S) {
	return S.top - S.base;
}
//5.遍历栈(遍历要注意指针的移动)
int  SqStackTraverse(SqStack& S) {
	if (S.top == S.base) {
		printf("栈为空栈");
		return ERROR;
	}
	for (i = S.top - S.base; i > 0; i--) {
		S.top--;
		printf("%d\n", * S.top);
	}
	return 0;
}
//6.十进制转换二进制
void Conversion(SqStack S) {
	printf("请输入要转换的数字:");
	scanf("%d", &num);//要转换的数字
	printf("\n请输入要转换的进制:");
	scanf("%d", &i);//要几进制
	while (num!= 0) {
		SqStackPush_S(S, num % i);
		num = num / i;
	}
	SqStackTraverse(S);
}
int main() {
	SqStack Sa;//定义一个栈名
	InitSqStack_S(Sa);//初始化栈
	//Conversion(Sa);
	printf("请输入栈的长度:");
	scanf("%d", &n);
	printf("请输入%d个进栈元素:\n",n);
	for (i = 0; i < n; i++) {
		SqStackPush_S(Sa, e);
	}
	printf("请输入要出栈的元素个数:");
	scanf("%d", &x);
	for (i = 0; i < x; i++) {
		SqStackPop_S(Sa, e);
		printf("出栈的第%d个元素为:%d\n",i+1, e);
	}
	printf("出栈%d个元素后的栈为:\n",x);
	SqStackTraverse(Sa);
	return 0;
}

THE END
分享
二维码

)">
< <上一篇

)">
下一篇>>