顺序栈:自定义基本操作

本代码包含了顺序栈的入栈,出栈,显示剩余栈和出栈顺序四项功能

  1. 自定义栈容量:用户通过scanf_s输入栈的大小,但是这儿所谓的栈的大小依然在MaxSize内;
  2. 入栈元素:题主在网上看到的关于栈的代码,大多是用Push(S,x)函数在代码中以 Push(S,1)、Push(S,2)、Push(S,3)、Push(S,4)、Push(S,5)这种形式来给栈赋值为(1 2 3 4 5),这种方法不太灵活,题主使用for循环即可实现用户在代码运行时输入元素的值;
  3. 指定显示几个元素:假设一个栈为(1 2 3 4 5),用户输入3则输出前三个栈元素(1 2 3),指针位置仍指向栈顶;这个函数进行简单的修改即可实现与遍历栈元素相关的其他功能,属于一个模板;
  4. 出栈(先进后出):假设一个栈为(1 2 3 4 5),用户输入3则表示第3个元素及其后面的剩余元素都出栈,此时显示出栈顺序为(5 4 3),剩余栈为(1 2)。
    以下为全部代码
#include <stdio.h>

#define MaxSize 50

typedef struct {
	int data[MaxSize];
	int Top;
}SqStack;

void InitSpStack(SqStack &S) {
	S.Top = -1;
}

int Push(SqStack &S, int x) {
	if (S.Top == MaxSize - 1)
	{
		printf("栈满");
		return 0;
	}
	S.data[++S.Top] = x;             
	return 1;

}

int Pop(SqStack& S) {
	if (S.Top == -1 )
	{
		printf("空栈");
		return 0;
	}
	S.Top--;
	return 1;
}

int Display(SqStack& S, int x) {
	int i;
	if (S.Top == -1 ||S.Top == 0)
	{
		printf("空栈\n");
		return  0;
	}
	else
	{
		for (i = 0; i < x; i++)
		{
			printf("%d ", S.data[i]);
		}
		printf("\n");
		return  1;
	}
}


int main()
{
	int A = 0;
	int a=0, b=0,c=0;

	SqStack S;
	InitSpStack(S);

	printf("请输入栈的大小:");
	scanf_s("%d",&A);	                        //判断用户输入的栈的大小是否合法
	if (A > 0) {                                //合法继续执行
		printf("请输入值(每个值需要回车确认):\n");//回车确认输入值
		for (int i = 0; i < A; i++)            
		{                                      
			scanf_s("%d", &a);                 //用户输入值,此时输入的值还不是栈值
			Push(S, a);                        //入栈,刚才输入的值此时才是栈值
		}                                      
		printf("请输入要显示几个元素:");
		scanf_s("%d", &b);
		Display(S, b);
		printf("\n");

		printf("请输入第x个元素出栈(x>0):");
		scanf_s("%d", &c);
		printf("出栈顺序:");
		for (int k = A - 1; k >= c - 1; --k)
		//因为栈是先进后出,所以该循环相当于数组的逆序输出
		{
			printf("%d ", S.data[k]);
		}
		printf("\n");

		for (int j = A - 1; j >= c; j--)
		{
			Pop(S);                            //直接移动S.Top指针,不用删值
		}
		printf("剩余栈为:");
		Display(S, S.Top);
	}
	else printf("error");                        //不合法则报错
}

结果如下:

在这里插入图片描述

  1. 当然也可以改变栈的容量,但是要在MaxSize范围内;
  2. 也可以改变要显示元素的个数,注意此时指针是不移动的,就是简单的进行数组遍历,只不过是题主遇到的题目有个函数要求实现该功能;
  3. 如果输入第1个元素出栈,则意味栈中全部元素都要出栈,即变为空栈。

改变输入后结果如下:

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值