#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;
}
顺序栈的初始化,入栈,出栈,求栈长度,遍历操作(C语言)
最新推荐文章于 2023-12-12 13:16:46 发布