顺序栈的初始化,入栈,出栈,求栈长度,遍历操作(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;
}

  • 11
    点赞
  • 99
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是C语言实现顺序的完整代码: ```c #include <stdio.h> #include <stdlib.h> #define MAXSIZE 100 // 定义的最大容量 typedef int ElemType; // 元素类型 typedef struct { ElemType data[MAXSIZE]; // 存储元素 int top; // 顶指针 } SqStack; // 初始化 void InitStack(SqStack *s) { s->top = -1; } // 判断是否为空 int IsEmpty(SqStack s) { return s.top == -1; } // 判断是否已满 int IsFull(SqStack s) { return s.top == MAXSIZE - 1; } // int Push(SqStack *s, ElemType e) { if (IsFull(*s)) // 已满,无法 return 0; s->data[++s->top] = e; // 顶指针加1,将元素e return 1; } // int Pop(SqStack *s, ElemType *e) { if (IsEmpty(*s)) // 为空,无法 return 0; *e = s->data[s->top--]; // 将顶元素赋值给e,顶指针减1 return 1; } // 取顶元素 int GetTop(SqStack s, ElemType *e) { if (IsEmpty(s)) // 为空,无顶元素 return 0; *e = s.data[s.top]; // 将顶元素赋值给e return 1; } // 遍 void TraverseStack(SqStack s) { int i; printf("中元素为:"); for (i = s.top; i >= 0; i--) // 从顶到底依次输元素 printf("%d ", s.data[i]); printf("\n"); } int main() { SqStack s; ElemType e; int i; InitStack(&s); // 初始化 printf("操作:\n"); printf("请输的元素,以-1结束:"); scanf("%d", &e); while (e != -1) { if (!Push(&s, e)) // 失败 printf("已满,%d未!\n", e); else printf("%d已\n", e); scanf("%d", &e); } printf("\n操作:\n"); while (!IsEmpty(s)) { if (!Pop(&s, &e)) // 失败 printf("已空,无法!\n"); else printf("%d已\n", e); } printf("\n遍操作:\n"); for (i = 1; i <= 5; i++) Push(&s, i); // 操作 TraverseStack(s); // 遍 return 0; } ``` 以上代码实现了顺序的创建、、取顶元素和遍等基本操作

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值